SpringBoot Shiro授权实现过程解析

网友投稿 236 2022-12-22


SpringBoot Shiro授权实现过程解析

这篇文章主要介绍了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 filterMap= new LinkedHashMap();

//设置拦截后跳转的请求路径

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;

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Spring Validator接口校验与全局异常处理器
下一篇:Java反射获取class对象方式解析
相关文章

 发表评论

暂时没有评论,来抢沙发吧~