一、前言

Apache Shiro与Spring Security一样是Java的一个安全框架。那为什么与Spring整合却用Shiro?不要问为什么,任性!开个玩笑:D 其实我个人是认为Spring Security太过于笨重,要写太多的过滤器。我是个怕麻烦的人,Shiro的配置简单这就是我选择的理由,何况Spring官方自己都推荐使用Shiro。而Shiro权限控制与CAS单点登录的组合更是堪称Java安全中的***~( ̄_, ̄ )……但本文只介绍它们三者的整合配置(说白了就是给自己留个学习笔记啦),若对此方面内容感兴趣的可以到网上搜索学习,在此推荐开涛大神的:《跟我学shiro》。

再次强调,以下内容仅为个人学习笔记,不是篇教程。

二、配置

Shiro最主要的就是认证与授权,而CAS的重点在于单点登录,其实CAS与Shiro整合的话就是关于认证那块的整合。

我们先来看web.xml中Shiro与CAS的配置:

<!-- 引入详情配置 --><context-param><param-name>contextConfigLocation</param-name><param-value>classpath*:/cas-client-shiro.xml</param-value></context-param><!-- shiro配置 (需写在Spring MVC Servlet配置之前)--><filter>  <filter-name>shiroFilter</filter-name>  <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>  <init-param>  <param-name>targetFilterLifecycle</param-name>  <param-value>true</param-value>  </init-param>  </filter>  <filter-mapping>  <filter-name>shiroFilter</filter-name>  <url-pattern>/*</url-pattern>  </filter-mapping>spring mvc servlet配置……<!-- 退出 --><filter><filter-name>logoutFilter</filter-name><filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class></filter> <filter-mapping><filter-name>logoutFilter</filter-name><url-pattern>/logout</url-pattern></filter-mapping><!-- 该过滤器用于实现单点登出功能,可选配置。--><filter><filter-name>CAS Single Sign Out Filter</filter-name><filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class><init-param><param-name>targetBeanName</param-name><param-value>singleSignOutFilter</param-value></init-param></filter><filter-mapping><filter-name>CAS Single Sign Out Filter</filter-name><url-pattern>/*</url-pattern></filter-mapping>………………其它配置省略………………

在上面的配置中是否有留意到这货:DelegatingFilterProxy,它会自动的把filter请求交给相应名称的bean处理。例如在启动时,spring会有一个filter请求,这个请求转交给了shiroFilter这个bean去处理了。so^接下来我们就得去找找看shiroFilter在哪?

此为上文加载的cas-client-shiro.xml配置:

    <!-- shiro配置 --><bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"><property name="securityManager" ref="securityManager"/><!-- 设定角色的登录链接,这里为cas登录页面的链接和可配置回调地址  --><property name="loginUrl" value="${cas.casServerLoginUrl}?service=${cas.service}login/" /><property name="successUrl" value="/" /><property name="filters"><util:map><!-- 添加casFilter到shiroFilter整合 --><entry key="casFilter" value-ref="casFilter"/></util:map></property> <property name="filterChainDefinitions"><value>               /login/ = casFilter/logout = anon/** = authc</value></property></bean><!-- CasFilter为自定义的单点登录Fileter --><bean id="casFilter" class="com.test.shiro.filter.CasFilter"><!-- 配置验证错误时的失败页面  --><property name="failureUrl" value="${cas.casServerLogoutUrl}?service=${cas.logoutRedirectUrl}"/><property name="realm" ref="casRealm"/></bean><!-- MyRealm为自定义的Realm --><bean id="casRealm" class="com.test.shiro.realm.MyRealm"><property name="cacheManager" ref="shiroMemcacheManager" /><property name="appId" value="${roomy.uap.client.appId}"/><property name="casServerUrlPrefix" value="${cas.host}"/><!-- 客户端的回调地址设置 --><property name="casService" value="${cas.service}login/"/></bean><!-- 缓存管理器 -->………………<!-- 会话sessionDAO -->………………<!-- 会话管理器sessionManager --> ………………<!-- 会话验证调度器sessionValidationScheduler -->………………<!-- 安全管理器securityManager -->………………<!-- Shiro生命周期处理器lifecycleBeanPostProcessor-->………………<!-- 退出 --><bean name="logoutFilter" class="com.test.cas.client.filter.LogoutFilterWithShiro"><property name="casServerLogoutUrl" value="${cas.casServerLogoutUrl}"></property><property name="redirectUrl" value="${cas.logoutRedirectUrl}"></property></bean><!-- 单点登出 --><bean name="singleSignOutFilter"  class="com.test.cas.client.session.SingleSignOutFilter">  <property name="sessionMappingStorage" ref="sessionMappingStorage"></property></bean>  <bean id="sessionMappingStorage" class="com.test.cas.client.session.ShiroBackedSessionMappingStorage"><property name="cacheManager" ref="shiroMemcacheManager" /><property name="sessionManager" ref="sessionManager" /></bean>

以上内容众多省略,其实我想强调的是MyRealm。恩,我们要实现的认证、预授权操作都在此自定义的Realm中实现操作。MyRealm继承了CasRealm,CasRealm又继承了AuthorizingRealm。所以,MyRealm中具体写了授权实现逻辑,而认证则调用了CasRealm中的方法……

三、结语

为什么不好好的写一篇博文教程?首先,这方面的东西内容非常多,不是一两篇能说的清楚的。其次,自己也是刚开始学习,并未完全掌握。最后,本人特别懒,目前只是想给自己留个学习笔记而已。

转载于:https://blog.51cto.com/linhongyu/1587818

Spring+Shiro+CAS整合配置笔记相关推荐

  1. spring + shiro + cas 实现sso单点登录

    sso-shiro-cas spring下使用shiro+cas配置单点登录,多个系统之间的访问,每次只需要登录一次,项目源码 系统模块说明 cas: 单点登录模块,这里直接拿的是cas的项目改了点样 ...

  2. spring+shiro+cas实现单点登录,登出

    cas.war下载地址:https://download.csdn.net/download/qq_37160920/10662543 1.下载cas.war,放在tomcat的 webapps下发布 ...

  3. 基于注解的Spring MVC整合Hibernate(所需jar包,spring和Hibernate整合配置,springMVC配置,重定向,批量删除)

    1.导入jar 2.web.xml配置 <?xml version="1.0" encoding="UTF-8"?> <web-app ver ...

  4. MyEclipse — Maven+Spring+Struts+Hibernate 整合 [学习笔记-1]

    示例数据库test,用户信息表 MyEclipse连接 MySql Database . MyEclipse创建Web工程 ,并加入Hibernate支持 [项目右键->MyEclipse-&g ...

  5. Spring、Mybatis整合Service优化思路,DAO层、Service层最终编码以及log4j日志的使用

    5. Spring.Mybatis整合Service层事务控制优化思路分析 # spring中处理事务的两种方式1. 编程式事务处理定义:通过在业务层中注入事务管理器对象,然后通过编码的方式进行事务控 ...

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

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

  7. Shiro教程,整合SpringBoot项目实战(笔记)

    1.shiro 1.1什么是权限管理 基本上涉及到用户参与的系统都要进行权限管理,权限管理属于系统安全的范畴,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户可以访问而且只能访问自己 ...

  8. 【Spring】Spring SpringMVC MyBatis 整合 applicationContext.xml文件笔记

    今天主要记录在SSM整合 主要的配置文件代码内容: <?xml version="1.0" encoding="UTF-8"?><beans ...

  9. Spring Boot快速整合Shiro

    文章目录 Spring Boot快速整合Shiro 1.创建Demo 2.Shiro实现登陆拦截 3.Shiro实现用户认证 4.Shiro整合Mybatis-Plus 5.Shiro整合MD5盐值加 ...

最新文章

  1. mysql 最小日期函数_MySQL 日期加减函数汇总
  2. 数字图像处理——第七章 小波和多分辨处理
  3. Selenium3自动化测试——5. 鼠标悬停操作
  4. 【Android 高性能音频】AAudio 状态机 ( 创建 | 打开 Open | 开始 Started | 暂停 Paused | 刷写 Flushed | 停止 Stopped | 关闭 )
  5. 通俗说一下python和人工智能有什么关系
  6. boost::math::acosh用法的测试程序
  7. mysql关系数据库引擎_MySQL数据库引擎详解
  8. 对比 SQL Server 2005 和 Oracle
  9. 如何轻松了解 Python 必学的 django 框架?
  10. 2022爱分析・汽车行业数字化实践报告
  11. 沃尔夫冈·阿玛多伊斯·莫扎特
  12. 如何快速撰写文章—伪原创
  13. Html网站页面实现黑白效果
  14. Excel只删除开头和末尾空格,中间不管的2种操作
  15. skywalking源码分析第十八篇一agent端Trace三部曲一Span栈桢机制
  16. HNOI 2018 游记
  17. vue之packages.json添加注释的正确写法
  18. oppop+r1c怎么设置语言中文,OPPO R1C配置怎么样?OPPO R1C参数配置详情
  19. 计算机硬件存在的故障,计算机硬件故障及处理.ppt
  20. java如何调用父类的实例对象_java子类调用父类的方法中包含子类重写的实例方法...

热门文章

  1. js图表控件:highcharts的应用(二)
  2. 一个游戏客户端文件的字节加解密代码,我花1000元请人解的,存在这,以后应该用得到。...
  3. wget抓取数据,需要用户登录验证
  4. JavaScript之作用域链
  5. block,inline和inline-block概念和区别
  6. Java Web Model2实战
  7. autofs一个神奇的服务
  8. Hibernate(2)——Hibernate的实现原理总结和对其模仿的demo
  9. util类中非静态方法中注入serivce,在controller层是使用util。
  10. 学习笔记------tag文件