栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

springboot整合shiro数据库认证

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

springboot整合shiro数据库认证

创建项目

1、开发数据库注册 1、开发注册界面

用户注册

用户名:
密码 :

2、创建数据表结构
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for t_user
-- ----------------------------
DROp TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user` (
  `id` int(6) NOT NULL AUTO_INCREMENT,
  `username` varchar(40) DEFAULT NULL,
  `password` varchar(40) DEFAULT NULL,
  `salt` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

SET FOREIGN_KEY_CHECKS = 1;

3、项目引入依赖
        
        
            com.baomidou
            mybatis-plus-boot-starter
            3.4.3.4
        
		
        
            org.apache.shiro
            shiro-spring-boot-starter
            1.8.0
        
        
        
            com.alibaba
            druid
            1.2.8
        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
        
            mysql
            mysql-connector-java
            8.0.25
            runtime
        
4、配置application.yaml配置文件
spring:
  application:
    # 应用名字
    name: shiro
  mvc:
    view:
      prefix: /
      suffix: .html
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/shirodemo?characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
    username: root
    password: 123456
    type: com.alibaba.druid.pool.DruidDataSource
server:
  # 端口号
  port: 8888
mybatis:
  #别名
  type-aliases-package: com.zhubayi.shirodb.entity
  #xml的位置
  mapper-locations: classpath:mapper/*Mapper.xml
5、创建entity
@Data
@Accessors(chain = true)
@AllArgsConstructor
@NoArgsConstructor
public class User {
    @TableId(type = IdType.AUTO)
    private String  id;
    private String username;
    private String password;
    private String salt;
}
6、创建Mapper接口
@Mapper
public interface UserMapper extends baseMapper {
	void save(User user);
}

7、开发mapper配置文件



    
        insert into t_user values(#{id},#{username},#{password},#{salt})
    

8、开发service接口

public interface UserService extends IService {
    
    void register(User user);
}

8、创建salt工具类
public class SaltUtils {
    
    public static String getSalt(int n){
        char[] chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567890!@#$%^&*()".toCharArray();
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < n; i++) {
            char aChar = chars[new Random().nextInt(chars.length)];
            sb.append(aChar);
        }
        return sb.toString();
    }
}

9、开发service实现类
@Service
@Transactional
public class UserServiceImpl extends ServiceImpl implements UserService {
    @Autowired
    private UserMapper userMapper;

    
    @Override
    public void register(User user) {
        //1.生产随机盐
        String salt = SaltUtils.getSalt(8);
        //2.把随机盐保存到数据库
        user.setSalt(salt);
        //3.明文密码进行md5 + salt + hash散列
        Md5Hash md5Hash = new Md5Hash(user.getPassword(),salt,1024);
        user.setPassword(md5Hash.toHex());
        userMapper.save(user);
    }
}
10、开发Controller
@Controller
@RequestMapping("user")
public class UserController {
    @Autowired
    private UserService userService;
    @PostMapping("register")
    public String register(User user){
        System.out.println(user);
        try {
            userService.register(user);
            return "redirect:/login.html";
        }catch (Exception e){
            e.printStackTrace();
            return "redirect:/register.html";
        }
    }
}

11、启动项目进行注册


2、开发数据库认证 1、开发Mapper
 //根据身份信息认证的方法
    User findByUserName(@Param("username") String username);
2、开发mapper配置文件



    
        insert into t_user values(#{id},#{username},#{password},#{salt})
    

    
        SELECT u.id uid,u.username,r.id,r.NAME rname
        FROM t_user u
                     LEFT JOIN t_user_role ur
                ON u.id=ur.userid
                     LEFT JOIN t_role r
                ON ur.roleid=r.id
        WHERe u.username=#{username}
    

    
8、Service接口
	//根据用户名查询所有角色
    User findRolesByUserName(String username);
    //根据角色id查询权限集合
    List findPermsByRoleId(String id);
8、Service实现
@Override
    public User findRolesByUserName(String username) {
        return userMapper.findRolesByUserName(username);
    }

    @Override
    public List findPermsByRoleId(String id) {
        return userMapper.findPermsByRoleId(id);
    }
9、修改自定义realm
 protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
        //拿到主体
        String primaryPrincipal =(String) principalCollection.getPrimaryPrincipal();
        //得到用户信息包含权限权限信息
        User user = userService.findRolesByUserName(primaryPrincipal);
        //授权信息
        if(!CollectionUtils.isEmpty(user.getRoles())){
            SimpleAuthorizationInfo simpleAuthorizationInfo = new SimpleAuthorizationInfo();
            user.getRoles().forEach(role -> {
                //角色信息
                simpleAuthorizationInfo.addRole(role.getName());
                //权限信息
                List perms = userService.findPermsByRoleId(role.getId());
                // 功能列表
                Set menus = new HashSet();
                if(!CollectionUtils.isEmpty(perms)){
                    for (Perms permission : perms) {
                        if(StringUtils.isNotEmpty(permission.getName())) {  //加一个非空判断
                            menus.add(permission.getName());
                        }
                    }
                    simpleAuthorizationInfo.addStringPermissions(menus);
                }
            });
            return simpleAuthorizationInfo;
        }
        return null;
    }
10、启动测试

在数据库添加数据:

用户数据:t_user

角色数据:t_role
*
用户角色关联数据:t_user_role

菜单权限数据:t_perms


角色菜单权限关联数据:t_role_perms

这个用户是普通用户登录之后只能看到,用户管理。

当再t_user_role表增加一个管理管理员角色。

刷新之后,就可以看到管理员所拥有的权限。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/530700.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号