核心类简介

xxxToken:用户凭证
xxxFilter:生产token,设置登录成功,登录失败处理方法,判断是否登录连接等
xxxRealm:依据配置的支持Token来认证用户信息,授权用户权限

核心配置

Shrio整体配置:ShrioConfig.java

 @Beanpublic ShiroFilterFactoryBean shirFilter(SecurityManager securityManager) {ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();shiroFilterFactoryBean.setSecurityManager(securityManager);Map<String, Filter> filters = shiroFilterFactoryBean.getFilters();//将自定义 的FormAuthenticationFilter注入shiroFilter中filters.put("authc", new AuthenticationFilter());filters.put("wechat",new ExWechatAppFilter());shiroFilterFactoryBean.setFilters(filters);Map<String, String> filterChainDefinitionMap = new LinkedHashMap<String, String>();...//建立url和filter之间的关系filterChainDefinitionMap.put("/wechat/**","wechat");filterChainDefinitionMap.put("/**", "authc");...shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);return shiroFilterFactoryBean;}@Beanpublic SecurityManager securityManager() {DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();securityManager.setAuthenticator(exModularRealmAuthenticator());List<Realm> realms = new ArrayList<>();//设置多Realmrealms.add(systemRealm());realms.add(wechatAppRealm());securityManager.setRealms(realms);securityManager.setCacheManager(ehCacheManager());securityManager.setRememberMeManager(cookieRememberMeManager());return securityManager;}//重要!!定义token与Realm关系,设置认证策略public MyModularRealmAuthenticator myModularRealmAuthenticator(){MyModularRealmAuthenticator authenticator = new MyModularRealmAuthenticator();FirstSuccessfulStrategy strategy = new FirstSuccessfulStrategy();authenticator.setAuthenticationStrategy(strategy);return authenticator;}@Beanpublic SystemRealm systemRealm() {SystemRealm systemRealm = new SystemRealm();systemRealm.setAuthorizationCachingEnabled(true);systemRealm.setAuthorizationCacheName("authorization");systemRealm.setCredentialsMatcher(hashedCredentialsMatcher());return systemRealm;}@Beanpublic WechatAppRealm WechatAppRealm(){WechatAppRealm wechatAppRealm = new WechatAppRealm();wechatAppRealm.setAuthorizationCachingEnabled(false);return WechatAppRealm;}

Realm,Token关联关系配置:MyModularRealmAuthenticator.java

public class MyModularRealmAuthenticator extends ModularRealmAuthenticator {@Overrideprotected AuthenticationInfo doAuthenticate(AuthenticationToken authenticationToken) throws AuthenticationException {assertRealmsConfigured();
//依据Realm中配置的支持Token来进行过滤List<Realm> realms = this.getRealms().stream().filter(realm -> realm.supports(authenticationToken)).collect(Collectors.toList());if (realms.size() == 1) {return doSingleRealmAuthentication(realms.get(0), authenticationToken);} else {return doMultiRealmAuthentication(realms, authenticationToken);}}}

认证授权配置:Realm.java

public class SystemRealm extends AuthorizingRealm {... @Overrideprotected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {//重要!!多realm每个都会执行授权相关信息,此处进行过滤if(principals.fromRealm(getName()).isEmpty()){return null;}//授权代码...return authorizationInfo;}/*** 主要是用来进行身份认证的*/@Overrideprotected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token)throws AuthenticationException {//生产AuthenticationInfo代码...//校验的部分由配置的credentialsMatcher进行处理return authenticationInfo;}/*** 扩展认证token** @param authenticationToken* @return boolean* @author mjm* @date 2018/7/3 12:32*/@Overridepublic boolean supports(AuthenticationToken authenticationToken) {//设置此Realm支持的Tokenreturn authenticationToken != null && (authenticationToken instanceof UsernamePasswordToken );}
}

过滤器配置:AuthenticationFilter.java

基础的过滤器类型:官网中默认有很多已实现的过滤器,可依据需求扩展

public class AuthenticationFilter extends FormAuthenticationFilter {..../*** 创建令牌** @param servletRequest ServletRequest* @param servletResponse ServletResponse* @return 令牌*/@Overrideprotected AuthenticationToken createToken(ServletRequest servletRequest, ServletResponse servletResponse) {//依据request中不同的参数创建不同的token...return new xxxToken(...);}....
}

参考资料

http://shiro.apache.org/realm.html#Realm-Supporting%7B%7BAuthenticationTokens%7D%7D

Spring Boot -Shiro配置多Realm相关推荐

  1. Spring Boot -Shiro配置多Realm 1

    2019独角兽企业重金招聘Python工程师标准>>> 核心类简介 xxxToken:用户凭证 xxxFilter:生产token,设置登录成功,登录失败处理方法,判断是否登录连接等 ...

  2. (39.3) Spring Boot Shiro权限管理【从零开始学Spring Boot】

    在学习此小节之前您可能还需要学习: (39.1) Spring Boot Shiro权限管理[从零开始学Spring Boot] http://412887952-qq-com.iteye.com/b ...

  3. Spring Boot Shiro 权限管理

    Spring Boot Shiro 权限管理 标签: springshiro 2016-01-14 23:44 94587人阅读 评论(60) 收藏 举报 本来是打算接着写关于数据库方面,集成MyBa ...

  4. Spring Boot + Shiro 集成

    2019独角兽企业重金招聘Python工程师标准>>> Spring Boot + Shiro 集成 Shiro 是一个流行的 Java 安全框架. 其实 Spring 有一个 Sp ...

  5. spring boot shiro redis整合基于角色和权限的安全管理-Java编程

    一.概述 本博客主要讲解spring boot整合Apache的shiro框架,实现基于角色的安全访问控制或者基于权限的访问安全控制,其中还使用到分布式缓存redis进行用户认证信息的缓存,减少数据库 ...

  6. Spring Boot Shiro视频 - 身份认证准备工作

    [视频 & 交流平台] à SpringBoot视频 http://study.163.com/course/introduction.htm?courseId=1004329008& ...

  7. Spring Boot 属性配置和使用

    spring Boot 允许通过外部配置让你在不同的环境使用同一应用程序的代码,简单说就是可以通过配置文件来注入属性或者修改默认的配置. Spring Boot 系列 Spring Boot 入门 S ...

  8. springboot原生mysql写法_【Rainbond最佳实践】Spring Boot框架配置MySQL

    Rainbond开源软件介绍: Rainbond是国内首个开源的生产级无服务器PaaS. 深度整合基于Kubernetes的容器管理.多类型CI/CD应用构建与交付.多数据中心的资源管理等技术,提供云 ...

  9. spring boot自动配置

    首先,一般的java Web项目需要很多配置,web配置(web.xml).spring配置(默认叫applicationContext.xml),非常繁琐 而spring-boot-starter是 ...

最新文章

  1. Android文本框输入汉字,android中EditText输入类型为何不能设置为中文
  2. 尚硅谷为什么免费开放资源_什么是开放游戏? 新资源
  3. (42)System Verilog接口变量数据位宽扩展
  4. 小米MIX 4 8月不会发布:或配屏下摄像头/100W快充
  5. gui卡顿 python_视频下载神器(youget),在 Python 中怎么使用?
  6. 数据库设计经验浅谈(3,4,5)转载
  7. Yii 2.0 权威指南(1) 第一次问候
  8. 客户端主机自查DNS故障及应急解决办法
  9. Linux学习笔记(7)
  10. 交换机vlan配置实训心得_交换机系统配置实验心得
  11. hdoj 1575 Tr A (矩阵快速幂)
  12. 服务器网站gzip压缩,网站实现Gzip网页压缩的方法与步骤 提高网页浏览速度
  13. oracle的单引号和双引号的深入举例分析
  14. [转]英文自我介绍范文
  15. 怎么将图片在线转成PDF
  16. 只需这一篇博客就能完全弄懂LSM树
  17. 输出日期为2021年的第几天(switch...case)
  18. 3种简单的键盘记录简单介绍
  19. C++函数返回值和返回引用
  20. jGestures: jQuery的手势事件插件

热门文章

  1. android 开源fc模拟器_星标 4.5K!又一个跨端框架,腾讯开源内部跨端统一开发框架:Hippy...
  2. laravel redis_如何将redis优化
  3. 工作流activity_开源、强大的工作流引擎:camunda入门介绍
  4. 致盗窃,抄袭有三AI内容以及不可理喻的读者
  5. 【知识星球】从SVM对偶问题,到疲劳驾驶检测,到实用工业级别的模型压缩技巧...
  6. 全球及中国壁纸市场盈利预测与投资风险分析报告2022-2027年
  7. 中国钠离子电池行业竞争需求状况及投资盈利分析报告2021-2027年版
  8. 全球及中国霍乱菌苗行业模式分析及前景发展规划建议报告2022-2027年版
  9. 全球与中国塑料废料粉碎机市场运营状况分析及投资风险评估报告2022-2027年版
  10. csdn和博客园对比