SpringBoot中Shiro使用Pac4j集成CAS认证
Pac4j 简介
Pac4j与Shiro,Spring Security一样都是权限框架,并且提供了OAuth - SAML - CAS - OpenID Connect - HTTP - OpenID - Google App Engine - Kerberos (SPNEGO) 的认证集成。且可以和shiro,security等权限框架集成。
Pac4j CAS认证流程
代码 关键部分
说明: pac4j-cas与shiro的集成是通过过滤器完成cas认证,提供相应的Pac4jRealm来与shiro集成。代码过多就不一一列出了,详细的请下载附件,附件中代码屏蔽了公司相关代码。自身项目需要保持CAS与非CAS并存所以把CAS登录固定到指定路径了。
POM
<!--cas认证 --> <dependency> <groupId>org.pac4j</groupId> <artifactId>pac4j-cas</artifactId> <version>3.8.3</version> </dependency> <!-- pac4j与shiro集成--> <dependency> <groupId>io.buji</groupId> <artifactId>buji-pac4j</artifactId> <version>4.1.1</version> </dependency>
JAVA配置
//Pac4jConfig.java 配置中 @Bean public CasConfiguration casConfig() { final CasConfiguration configuration = new CasConfiguration(); //CAS server登录地址 configuration.setLoginUrl(casServerUrl + "/login"); configuration.setAcceptAnyProxy(true); configuration.setPrefixUrl(casServerUrl + "/"); //监控CAS服务端登出,登出后销毁本地session实现双向登出 DefaultLogoutHandler logoutHandler = new DefaultLogoutHandler(); logoutHandler.setDestroySession(true); configuration.setLogoutHandler(logoutHandler); return configuration; } //ShiroConfig.java 中 //shiro 过滤器配置中增加SecurityFilter,CallbackFilter ,LogoutFilter @Bean("shiroFilter") public ShiroFilterFactoryBean shirFilter(SecurityManager securityManager) { ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean(); shiroFilterFactoryBean.setSecurityManager(securityManager); //获取filters Map<String, Filter> filters = shiroFilterFactoryBean.getFilters(); filters.put("authc", new MySystemFilter()); // cas 资源认证拦截器 SecurityFilter securityFilter = new SecurityFilter(); securityFilter.setConfig(exPac4jConfig); securityFilter.setClients(clientName); filters.put("securityFilter", securityFilter); //cas 认证后回调拦截器 CallbackFilter callbackFilter = new CallbackFilter(); callbackFilter.setConfig(exPac4jConfig); filters.put("callbackFilter", callbackFilter); shiroFilterFactoryBean.setFilters(filters); // 本地登出同步登出CAS服务器 LogoutFilter pac4jCentralLogout = new LogoutFilter(); pac4jCentralLogout.setConfig(exPac4jConfig); pac4jCentralLogout.setCentralLogout(true); pac4jCentralLogout.setLocalLogout(true); filters.put("pac4jCentralLogout", pac4jCentralLogout); //拦截器. Map<String, String> filterChainDefinitionMap = new LinkedHashMap<String, String>(); filterChainDefinitionMap.put("/logout", "logout"); filterChainDefinitionMap.put("/pac4jCentralLogout", "pac4jCentralLogout"); filterChainDefinitionMap.put("/cas", "securityFilter"); filterChainDefinitionMap.put("/callback", "callbackFilter"); filterChainDefinitionMap.put("/**", "authc"); shiroFilterFactoryBean.setLoginUrl("/login"); shiroFilterFactoryBean.setSuccessUrl("index"); shiroFilterFactoryBean.setUnauthorizedUrl("/error/403"); shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap); return shiroFilterFactoryBean; } @Bean public SecurityManager securityManager() { DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(); securityManager.setAuthenticator(exModularRealmAuthenticator()); List<Realm> realms = new ArrayList<>(); realms.add(exSystemRealm()); // casRealm继承Pac4jRealm 与shiro的Realm使用方法相同 realms.add(casRealm); securityManager.setRealms(realms); securityManager.setCacheManager(redisCacheManager()); //增加pac4jSubjectFactory securityManager.setSubjectFactory(pac4jSubjectFactory); securityManager.setRememberMeManager(cookieRememberMeManager()); securityManager.setSessionManager(sessionManager()); return securityManager; }
问题
- 默认配置不支持CAS登出本地项目退出
重写ShiroSessionStore见ExShiroSessionStore.java
附件:链接: https://pan.baidu.com/s/1E-6uTYpOFn2ldAxd_k0XvQ 提取码: 8nhx
参考资料
https://www.cnblogs.com/suiyueqiannian/p/9359597.html
http://www.pac4j.org/docs/index.html
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
【阿里云新品发布会】第33期:最新产品动态
点击订阅新品发布会 新产品、新版本、新技术、新功能、价格调整,评论在下方,下期更新!关注更多内容,了解更多 产品动态 新版本: IoT安全运营中心 - IoT安全运营中心(v1.2.1)发布 查看产品 查看文档 物联网安全运营中心-Link SOC(Security Operations Center),帮助管理员识别和消除IoT系统潜在的安全风险,通过实时的“风险预警、安全检测、安全防护、安全响应、可用性保护”构建自动化的安全运营中心,保障IoT系统的安全性和可用性。 部署模式:支持公共云、VPC部署。(即将支持敏捷PaaS版) SOC集成已集成到IoT事业部的行业平台,支持通过OA账号登录。 网络连接拓扑:生成设备之间的网络连接拓扑图,支持根据协议、端口、历史连接次数分析网络连接是否是安全的。 事件分析:物联网系统多种多样,用户从自己关注的维度通过安全日志筛选可用性、安全性相关的事件。 自定义告警:基于事件分析模板,设定周期性检查任务,一旦发现用户定义的某个指标超过阈值则自动触发告警。 授权管理:查看授权额度和已经接入设备的数量。 优化-dashboard展示:提供更多维度的安全数...
- 下一篇
第421期 Python 周刊
新闻 感谢 Guido 链接: https://blog.dropbox.com/topics/company/thank-you--guido Python之父 Guido van Rossum 即将离开 Dropbox 并宣布退休。感谢 Guido 为 Python 社区所做的一切贡献,由衷的祝福 Guido 退休后能够做自己喜欢的事情。 文章,教程或讲座 对话生态系统:200 多个 FOSS 应用的经验总结 链接: https://www.youtube.com/watch?v=t1lvsmcPEcE 该对话着眼于 200 多个最成功的开源 Python 应用, 以总结出有关构建软件的最实际有效的建议。这些项目在架构,测试,许可,包装和发行方面积累了开发者毕生的经验, 期待您学习! Griffin,一个每日可进行数十亿检测的反欺诈风险规避引擎 链接: https://engineering.grab.com/griffin 这篇文章重点介绍了 Grab 高性能风险检测引擎,该引擎可以最小的工作量自定义创建规则来检测规避风险。 《纽约时报》是如何尝试推荐算法的? 链接: https...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS关闭SELinux安全模块
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS8编译安装MySQL8.0.19
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Red5直播服务器,属于Java语言的直播服务器