请选择 进入手机版 | 继续访问电脑版

Shiro+springboot+mybatis(md5+salt+散列)认证与授权-02

[复制链接]
毕高严 发表于 2020-12-31 20:22:57 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
代码延续地址:Shiro+springboot+mybatis(md5+salt+散列)认证与授权-01

  1.创建t_role角色表(比如管理员admin,普通用户user等),创建t_pers权限表(比如add,update,delete等),t_user_role与t_role_pers作为三个表的中间表(因为这三个表之间是多对多的关系)


2.UserMapper.xml新增sql查询
  1.             select u.id uid,u.username,r.id rid,r.name        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};                select p.id,p.name,p.url,r.name        from t_role r        left join t_role_pers rp        on r.id=rp.roleId        left join t_pers p        on p.id=rp.persId        where r.id=#{id}   
复制代码
3.UserDao新增方法
  1.     //根据用户名查询所有角色    User findByRolesUserName(String username);    //根据角色id查询权限聚集    List findPermsByRoleId(String id);
复制代码
4.Service层新增方法(接口代码省略)
  1.     @Override    public User findByRolesUserName(String username) {        return userDao.findByRolesUserName(username);    }    @Override    public List findPermsByRoleId(String id) {        return userDao.findPermsByRoleId(id);    }
复制代码
5.改变自界说realm
  1. /** * @author:抱着鱼睡觉的喵喵 * @date:2020/12/29 * @description:    自界说realm完成用户认证和授权 */public class CustomerRealm extends AuthorizingRealm {    /**     * 用户授权     * @param principalCollection     * @return     */    @Override    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {        System.out.println("调用权限认证:"+principalCollection);        String primaryPrincipal = (String) principalCollection.getPrimaryPrincipal();        //调用身份信息获取角色和权限信息        UserService userService = (UserService) ApplicationContextUtils.getBean("userService");        //根据主身份获取角色和权限信息        User users = userService.findByRolesUserName(primaryPrincipal);        //授权角色信息        if (!CollectionUtils.isEmpty(users.getRoles())){            SimpleAuthorizationInfo simpleAuthorizationInfo = new SimpleAuthorizationInfo();            users.getRoles().forEach(role -> {                simpleAuthorizationInfo.addRole(role.getName());                List perms = userService.findPermsByRoleId(role.getId());                if (!CollectionUtils.isEmpty(perms)){                    perms.forEach(pers -> {                        simpleAuthorizationInfo.addStringPermission(pers.getName());                    });                }            });            return simpleAuthorizationInfo;        }        return null;    }    /**     * 用户认证     * @param authenticationToken     * @return     * @throws AuthenticationException     */    @Override    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {        String principal = (String) authenticationToken.getPrincipal();        //在工厂中获取业务对象        UserService userService = (UserService) ApplicationContextUtils.getBean("userService");        User user = userService.findByUserName(principal);        if (!ObjectUtils.isEmpty(user)){            return new SimpleAuthenticationInfo(user.getUsername(),user.getPassword(), ByteSource.Util.bytes(user.getSalt()),this.getName());        }        return null;    }}
复制代码
6.index.jsp
  1.                 Document    [size=6]系统主页,欢迎你的到来[/size]
  2.     [url=https://www.jianchenwangluo.com/${pageContext.request.contextPath}/user/outLogin]退出[/url]   
  3. [list]                    
  4. [*][url=https://www.jianchenwangluo.com/"]用户管理[/url]
  5. [list]                                            
  6. [*][url=https://www.jianchenwangluo.com/"]添加用户[/url]                                       
  7. [*][url=https://www.jianchenwangluo.com/"]删除用户[/url]                    
  8. [*][url=https://www.jianchenwangluo.com/"]修改用户[/url]                    
  9. [*][url=https://www.jianchenwangluo.com/"]查询用户[/url]               
  10. [/list]                                       
  11. [*][url=https://www.jianchenwangluo.com/"]部门格式化[/url]                           
  12. [*][url=https://www.jianchenwangluo.com/"]商品管理[/url]            
  13. [*][url=https://www.jianchenwangluo.com/"]订单管理[/url]            
  14. [*][url=https://www.jianchenwangluo.com/"]物流管理[/url]                           
  15. [*][url=https://www.jianchenwangluo.com/"]终极格式化[/url]            
  16. [/list]
复制代码
7.访问http://localhost:8080/shiro/login.jsp


退出



来源:https://blog.csdn.net/Kevinnsm/article/details/111991348
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )