Apache shiro(3)—cas + shiro配置说明

这篇博客我们还是继续讲如何使用,其他的我自己还需要一些时间来消化。这次因为项目的需要,将登录从shiro中抽出来交给cas来验证。Shiro,只负责权限的验证。shiro在1.2版本之后加入了对cas的支持。我们先从cas入手……

SSO的概念

单点登录( Single Sign-On , 简称 SSO )是目前比较流行的服务于企业业务整合的解决方案之一, SSO就是一次登录,就可以访问多个互相信任的应用。而cas只是这种解决方案的一种实现。

这么说吧:大家应该都去过游乐场,通常会卖通票。就是买一张票,就可以玩游乐场中的所有项目,而不用玩一项买一项的票。这就是单点登录最直白的理解了:“通票”。

原理:

ok,下面就看一下,shiro+cas之后的认证过程。图里的票据指的是,第三步用户的验证信息通过验证后,cas服务器随机生成的一个唯一的身份标识。这个票据会被存储在浏览器的cookie中。注:这里只是直白的说法,后面会有博客详细这部分的过程。

下图,表明的是一个web应用的登录过程,这时候用户访问第二个应用时可以直接拿浏览器中的cookie去cas认证,因为应用1已经证过了。因此用户访问第二个应用时就不需要重新登陆了。

Spring-shiro.xml的配置:

上面大概的说了一下,cas的验证原理。下面就看看cas和shiro集成的配置。这个是基于前一篇博客的,如果不记得可以翻看前一篇博客。一下配置都已本地为例:

首先,引入Jar包。shiro-cas-1.2.3.jar、cas-client-core-3.2.0.jar

然后,在Spring - shiro.xml修改如下配置:

  • 第一:shiroSecurityFilter修改为:
 <property name="loginUrl" value="http://localhost:18080/cas/login?service=http://localhost:8080/authority-web/shiro-cas"> </property>
    <property name="successUrl" value="http://localhost:8080/authorityn-web/index.jsp"></property>

<property name="filters">
			<map> <!--添加cas的过滤器到shiro  -->
				<entry key="casFilter">
					<bean class="org.apache.shiro.cas.CasFilter">
                                        <!--配置验证错误时的失败页面 /main 为系统登录页面 -->
						<property name="failureUrl" value="/message.jsp" />
					</bean>
				</entry>
			</map>
	</property>
     <!-- 过滤器链,请求url对应的过滤器 -->
     <property name="filterChainDefinitions">
           <value>
                 /message.jsp=anon
                 /logout=logout                 <!--shiro登出过滤器,清理shiro存储的缓存,用户信息等  -->
                 /shiro-cas=casFilter  <!--cas的过滤器的拦截规则  -->
                    <!--验证所有请求,如果shiro中不存在用户信息,则返回到loginUrl的登录页面  -->
                                    /** =user
           </value>
     </property>
  • 第二:shiroRealm的配置中添加两个属性,分别为cas服务器的登录地址和cas客户端的入口即会被拦截的地址:
     <property name="casServerUrlPrefix" value="http://localhost:18080/cas"></property>
     <property name="casService" value="http://localhost:8080/authorityn-web/shiro-cas"></property>
  • 第三:在securityManager的配置中加入属性:
<property name="subjectFactory" ref="casSubjectFactory"></property>
  • 第四:加入casSubjectFactory Bean的配置
 <bean id="casSubjectFactory" class="org.apache.shiro.cas.CasSubjectFactory" />

接着:Web.xml的配置,加入多点登出的配置,这里主要是从cas服务器上清除用户的登录信息:

<listener>
	<listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
</listener>
<filter>
	<filter-name>singleSignOutFilter</filter-name>
	<filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
</filter>
<filter-mapping>
	<filter-name>singleSignOutFilter</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>

需要注意的是,这样单点退出Shiro中的用户信息是不会清除的,也就是说就算你点击退出了。各个应用还是能够正常访问。这里首先需要在web.xml中配置项目的默认访问地址和shiroSecurityFilter中的successUrl。否则可能会导致从退出到登录页面重新登录找不到页面的问题。那么退出的请求地址应该为:cas服务器注销地址+web应用退出地址作为参数。

http://localhst:18080/cas/logout?service=http://localhost:8080/itoo-authority-application-web/logout

总结:cas和shiro的集成是将shiro的只能面对单个应用的登录抽离出来,交给cas去验证。前面,说过cas的验证实际上是一个“通票”的概念。

时间: 2024-10-07 10:16:59

Apache shiro(3)—cas + shiro配置说明的相关文章

Apache Shiro 集成-Cas

http://blog.csdn.net/peterwanghao/article/details/8825008 Shiro集成CAS是在1.2版本里新增的功能. Shiro-cas模块将应用作为CAS客户端与CAS SSO服务器一起保护web应用. CAS协议的一个基本理解: 1. 如果你想访问一个被CAS客户端保护的应用,而你还没有进行认证.你讲被重定向到CAS服务端的登录页面.在应用中你需要配置CAS的登录url地址. http://application.examples.com/pr

SpringMvc 下集成shiro与cas

由于内部系统越来越多,单点登录已经是一个较优选择.之前各个系统都集成了shiro作为权限管理, 所以必须要把shiro与cas集成. 集成步骤: 首先在POM中引入shiro-cas包 <dependency>  <groupId>org.apache.shiro</groupId>  <artifactId>shiro-cas</artifactId>  <version>1.2.2</version> </dep

Spring Boot 集成Shiro和CAS

请大家在看本文之前,先了解如下知识点: 1.Shiro 是什么?怎么用? 2.Cas 是什么?怎么用? 3.最好有Spring基础 可以先看看这两篇文章,按照这2篇文章的内容做一遍: Spring Boot Shiro 权限管理 CAS单点登录 首先看一下下面这张图: 第一个流程是单纯使用Shiro的流程. 第二个流程是单纯使用Cas的流程. 第三个图是Shiro集成Cas后的流程. [流程图高清图连接:http://img.blog.csdn.net/20160117224937078] PS

cas+shiro实现不时时的去请求cas进行身份验证

cas+shiro不进行时时去cas验证身份信息,需要用shiro在当前系统有一份完整的认证机构. 那么有一个问题,什么时候去cas校验信息,目前的配置方式: cas系统设置默认的浏览器session存活时间,当前系统的session存活时间为30分钟,那么当当前系统身份验证失败是,去cas校验. 这里涉及到一个非常重要的节点,就是shiro框架内部是怎么进行cas校验的呢,请看代码: org.apache.shiro.web.filter.AccessControlFilterd还是所有默认验

cas+tomcat+shiro实现单点登录-4-Apache Shiro 集成Cas作为cas client端实现

目录 1.tomcat添加https安全协议 2.下载cas server端部署到tomcat上 3.CAS服务器深入配置(连接MYSQL) 4.Apache Shiro 集成Cas作为cas client端实现 Apache Shiro 集成Cas作为cas client端实现 第一步.添加maven依赖 <!-- shiro依赖包 --> <!-- <dependency> <groupId>org.apache.shiro</groupId> &

Springboot集成Shiro和Cas实现单点登录(服务端篇CAS5)

什么是单点登录? 先说一个需求场景,比如:一个企业的内部有N多个子系统,每个子系统都有一套自己的用户名和密码,那么企业的员工要登录N个子系统,这样一个员工 就要记住N个用户名和密码,就算各个子系统的用户名和密码都是统一的,登录每个子系统都要输入用户名和密码进行登录也是一个繁琐的操作过程,那么单点登录功能由此便应运而生了.单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一.SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应

cas+shiro遇到的一个问题:统一注销失败,session的注销跟创建事件都能捕获到,原因是:

最近遇到一个非常麻烦的问题,cas+shiro 统一注销的失败,cas正常注销掉,但是应用里面的用户信息没有被注销掉 跟踪问题: 首先怀疑SingleSignOutHttpSessionListener监听器没有正常工作没有把应用的session注销掉,这里可以跟大家讲一下cas 客户端及服务器的注销原理 1,客户端发送一个注销请求到cas server,跟踪casorg.jasig.cas.CentralAuthenticationServiceImpl类的destroyTicketGrant

cas shiro sso slg

准备写个cas+shior 的单点登录sso和单点登出slg 持续更新,完整demo上github. slg: 注意点 shiro 配置文件 / cas服务器的地址 domain 和 slg 时的cas domain一定保证一致 slg 时 cas 会清除cas服务器domain下的cookies(token, st), 但cas client(及你的application)的cookies 需要自己清除,否则如果cookies有效期为-1时,slg必须关闭了浏览器,才生效

JAVAWEB开发之权限管理(二)——shiro入门详解以及使用方法、shiro认证与shiro授权

shiro介绍 什么是shiro shiro是Apache的一个开源框架,它将软件系统的安全认证相关的功能抽取出来,实现用户身份认证,权限授权.加密.会话管理等功能,组成了一个通用的安全认证框架.它可以实现如下的功能: 1.验证用户 2.对用户执行访问控制,如:判断用户是否具有角色admin,判断用户是否拥有访问的资源权限. 3.在任何环境下使用SessionAPI.例如C/S程序 4.可以使用多个用户数据源.例如一个是Oracle数据库,另外一个是MySQL数据库. 5.单点登录(SSO)功能