p2p_shiro的bean的具体配制

JWT+Shiro的整体流程说明

JWTToken-->AuthenticationToken     详见代码
UserPrincipal-->LockedPrincipal-->JWTPrincipal---subject secret两个字段   详见代码
AuthService有关jwt的所有逻辑的封装与处理    详见代码
-------------------------------------------------------------------
0.登录时调用AuthService.java的buildJWTToken 生成jwt
1.根据Header里的获取httpRequest.getHeader(AUTHORIZATION_HEADER);拿到token形成JWTToken

2.AuthRealm的认证方法逻辑doGetAuthenticationInfo
通过AuthenticationToken拿到JWTPrincipal对象-->通过jwt的decode拿到ID然后构建JWTPrincipal对象
然后根据JWTPrincipal的secret方法加密认证token的合法性
构建Principal对象与token构造SimpleAuthenticationInfo对象

3.AuthRealm的权限方法doGetAuthorizationInfo
增加权限
-----------------------------------------------------------------------
整体配制代码
1.AuthRealm 继承AuthorizingRealm
  
 doGetAuthorizationInfo //获取用户权限或角色信息
   doGetAuthenticationInfo //进行身份验证eg:用户名与password密码的校验  
                                          //并且会设置具体的principal
                                          
   AuthRealm注入到spring详见参考代码 
(realm.setAuthenticationTokenClass(JWTToken.class);//设置具体的Au..Token)
   AuthRealm本身自定义的代码  涉及到的参考类AuthService代码
2.securityManager--->指定具体的 AuthRealm
     securityManager禁用Shiro的Session持久化功能,以此为Restful提供无状态   详见参考代码

3.LifecycleBeanPostProcessor 注入这个bean用来管理shiro一些bean的生命周期
    生命周期就是初始化 与 销毁的管理   详见参考代码
4.DefaultAdvisorAutoProxyCreator是用来扫描上下文,寻找所有的Advistor(通知器)必须在lifecycleBeanPostProcessor创建之后创建 详见如下代码
@Bean
@DependsOn("lifecycleBeanPostProcessor")
DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator() {
    DefaultAdvisorAutoProxyCreator creator = new DefaultAdvisorAutoProxyCreator();
    creator.setProxyTargetClass(true);
    return creator;
}
5.AuthorizationAttributeSourceAdvisor权限注解的advisor 支持权限注解的通知器,详见如下代码

@Bean//入参的SecurityManager类型为org.apache.shiro.mgt.SecurityManager  而不是java.lang.SecurityManager别引用错了
AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager) {
	AuthorizationAttributeSourceAdvisor advisor = new AuthorizationAttributeSourceAdvisor();
	advisor.setSecurityManager(securityManager);
	return advisor;
}


6.设置ShiroFilterFactoryBean
   ShiroFilterFactoryBean shiroFilter = new ShiroFilterFactoryBean();
   shiroFilter.setSecurityManager(securityManager);  //设置securityManager
   shiroFilter.getFilters().put("jwt", new JWTFilter(authService));// 设置一个自定义的过滤器
   shiroFilter.setFilterChainDefinitionMap(chain.getFilterChainMap());//设置一个过滤链的定义
                         关于FilterChainDefinitionMap参数说明文章
   ShiroFilterFactoryBean注入详见参考示例代码
   
JWTFilter_BasicHttpAuthenticationFilter_参考未例代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值