怎么在SpringBoot中实现Shiro授权?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
使用Shiro过滤器实现授权
设置好授权拦截跳转的请求地址
/** * 创建ShiroFilterFactoryBean */ @Bean public ShiroFilterFactoryBean getShiroFilterFactoryBean(@Qualifier("securityManager") DefaultWebSecurityManager securityManager) { ShiroFilterFactoryBean shiroFilterFactoryBean=new ShiroFilterFactoryBean(); //设置安全管理器 shiroFilterFactoryBean.setSecurityManager(securityManager); //添加Shiro内置过滤器 /** * Shiro内置过滤器,可以实现权限相关的拦截器 * 常用的过滤器: * anon:无需认证(登录)可以访问 * authc:必须认证才可以访问 * user:如果使用rememberMe的功能可以直接访问 * perms:该资源必须得到资源权限才可以访问 * role:该资源必须得到角色权限才可以访问 */ Map<String, String> filterMap= new LinkedHashMap<String,String>(); //设置拦截后跳转的请求路径 shiroFilterFactoryBean.setLoginUrl("/user/badRequest"); //设置未授权提示的页面 shiroFilterFactoryBean.setUnauthorizedUrl("/user/badRequest"); shiroFilterFactoryBean.setFilterChainDefinitionMap(filterMap); return shiroFilterFactoryBean; }
再使用 filterMap 去放对应的拦截即可,例如 filterMap.put("/**", "anon")
上面是认证的,如果需要授权的,相应的多给一个任意的授权字符串如 filterMap.put("/user/add", "perms[user:add]")
授权逻辑编写的位置
/** * 执行授权逻辑 */ @Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection arg0) { System.out.println("开始执行Shiro的授权方法..."); //给资源进行授权 SimpleAuthorizationInfo info= new SimpleAuthorizationInfo(); //添加资源的授权字符串 info.addStringPermission("user:add"); return null; }
授权字符串和之前的字符串对应
补充
/** * 执行认证逻辑 */ @Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken arg0) throws AuthenticationException { System.out.println("开始执行Shiro的认证方法..."); //编写Shiro判断逻辑,判断用户名和密码 //判断用户名是否存在 UsernamePasswordToken token=(UsernamePasswordToken)arg0; User user = userMapper.findByUsername(token.getUsername()); if(user==null) return null; //判断密码是否正确,参数一为认证的实体 return new SimpleAuthenticationInfo(user,user.getPassword(),""); }
在执行认证时的SimpleAuthenticationInfo第一个传参可以用来获取当前用户
/** * 执行授权逻辑 */ @Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection arg0) { System.out.println("开始执行Shiro的授权方法..."); //给资源进行授权 SimpleAuthorizationInfo info= new SimpleAuthorizationInfo(); //添加资源的授权字符串 info.addStringPermission("user:register"); //获取当前的登录用户 User user=(User)SecurityUtils.getSubject().getPrincipal(); return null; }
看完上述内容,你们掌握怎么在SpringBoot中实现Shiro授权的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。