spring+shiro+cas的整合问题之循环重定向

场景介绍:
1.CAS服务器采用JASIG CAS 【3.5.3】
2.SHIRO【1.2.3】
3.SPRING【4.1.RELEASE】
服务器配置的域名为www.test.com,登录的路径为www.test.com/cas/
客户应用域名为localhost:8080,应用的项目地址为localhost:8080/demo/admin/main,(登录地址为:localhost:8080/demo/admin/login).
要达到的效果是登录项目地址自动重定向到cas服务器登录,然后登录成功后转到项目的地址。

循环重定向的问题

客户应用的CAS拦截器配置的拦截地址和successUrl相同,导致CAS认证成功后跳转到successUrl后依然被CAS拦截认证导致一直循环跳转。
失败的循环重定向需要检查下Rleam的failUrl地址是否和loginurl相同。
注意:springmvc配置的默认地址为/admin/,以让项目启动即跳转到CAS服务器,
            CAS拦截器拦截的地址最好是一个具体的地址,而不应该是同一种格式的,我的项目中就应该是
<property name="filterChainDefinitions">
	<value>/admin/=cas</value>
</property>
shiroFilter中配置
<property name="loginUrl" value="http://www.test.com/cas/login?service=http://localhost:8080/demo/admin/" />
<property name="successUrl" value="http://localhost:8080/demo/admin/main" />
注意:loginUrl和successUrl是不相同的,[相同会循环跳转].
为了能够在登录失败的时候跳转到CAS登录,做以下配置:
<bean id="casFilter" class="org.apache.shiro.cas.CasFilter">
	<property name="failureUrl" value="http://www.test.com/cas/login?service=http://localhost:8080/demo/admin/"/>
</bean>

====================================================================================================

好久没有鼓捣shiro配置,今天又遇到一些坑,都是以前遇到过的,在此记录,以备以后及其他小伙伴参考:
CAS Client客户端退出后,其它的客户端并没有退出,请看看客户端配置的CAS Server是否一致,我的就因为一个是localhost一个是127.0.0.1导致.
CAS Server登录成功后,跳转到应用时提示重定向次数过多,调试时发现和上面的情况类似.但是配置上看不出是怎么回事.
通过回忆测试环境的步骤,进行相应的回退,发现是因为添加了sessionManager的配置导致的,
原来默认使用的是ServletContainerSessionManager没有问题,改成自己配置的SessionManager就会重定向。
调试后发现原来是因为没有配置SessionIdCookie的原因,导致本地项目验证失败重定向到CAS Server进行认证,而CAS认证成功后跳转到本地项目,
本地项目通过TS以及获取Session进行验证失败,就这样悲剧了。解决就是加上相应的配置

<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
	。。。。。
	<!-- sessionManager -->
	<property name="sessionManager" ref="sessionManager" />
	。。。。。
</bean>
    <!--&lt;!&ndash; 自定义会话管理配置 &ndash;&gt;-->
    <bean id="sessionManager" class="cn.jely.cd.util.security.shiro.session.SessionManager">
        <property name="sessionDAO" ref="sessionDAO"/>
        <!-- 会话超时时间,单位:毫秒  -->
        <property name="globalSessionTimeout" value="${session.sessionTimeout}"/>
        <!-- 定时清理失效会话, 清理用户直接关闭浏览器造成的孤立会话 -->
        <property name="sessionValidationInterval" value="${session.sessionTimeoutClean}"/>
        <<property name="sessionValidationSchedulerEnabled" value="true"/>
        <property name="sessionIdCookie" ref="sessionIdCookie"/>
    <</bean>
    <!-- 指定本系统SESSIONID, 默认为: JSESSIONID 问题: 与SERVLET容器名冲突, 如JETTY, TOMCAT 等默认JSESSIONID,-->
<!–<当跳出SHIRO SERVLET时如ERROR-PAGE容器会为JSESSIONID重新分配值导致登录会话丢失!-->
<bean id="sessionIdCookie" class="org.apache.shiro.web.servlet.SimpleCookie"> <constructor-arg name="name" value="JELY_SESSION_ID"/> </bean>





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值