spring-Springsecurity cas单点登录,循环重定向问题

问题描述

Springsecurity cas单点登录,循环重定向问题

最近在弄springsecurity+cas实现单点登录,但配置完成测试,去发现在cas server端登录成功之后,竟出现了循环重定向问题,我springsecurity配置如下:

 <?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:security="http://www.springframework.org/schema/security"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
                        http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
                        http://www.springframework.org/schema/security
                        http://www.springframework.org/schema/security/spring-security-3.2.xsd">

     <!--  Spring-Security 的配置 -->  

     <!-- 配置不过滤的资源(静态资源及登录相关) -->
    <security:http pattern="/static/**" security="none"></security:http>  

    <!--  注意use-expressions=true.表示开启表达式,否则表达式将不可用. /access-denied.htm  , auto-config="true" use-expressions="true"-->
    <security:http entry-point-ref="casAuthenticationEntryPoint" auto-config="true" use-expressions="true"  access-denied-page="/user/index.htm">  

        <!--允许所有人访问 access="permitAll"-->
        <security:intercept-url pattern="/login.htm"   access="permitAll"/>
        <security:intercept-url pattern="/regist*.htm" access="permitAll" />
        <security:intercept-url pattern="/upload/**"   access="permitAll" />

        <!--允许IS_AUTHENTICATED_ANONYMOUSLY匿名访问
        <security:intercept-url pattern="/index.htm" access="IS_AUTHENTICATED_ANONYMOUSLY" /> -->  

        <!--允许USER权限访问   hasRole('USER')-->
        <security:intercept-url pattern="/user/**" access="hasRole('ROLE_USER')" /> 

         <!--允许USER权限访问-->
        <security:intercept-url pattern="/exam/**" access="hasRole('ROLE_USER')" /> 

        <!--允许ROLE权限访问-->
        <security:intercept-url pattern="/auth/**" access="hasRole('ROLE_ROLE')" />  

        <!--允许ADMIN权限访问所有资源-->
        <security:intercept-url pattern="/**" access="hasRole('ROLE_ADMIN')" />  

         <!--**** cas单点  .2015-06-23 by cyj ****-->
        <security:custom-filter position="CAS_FILTER" ref="casAuthenticationFilter"></security:custom-filter>
        <!--**** cas单点  .2015-06-23 by cyj ****-->

    </security:http>  

    <!--***************************************** CAS TEST  2015-06-23  . by cyj***************************************** -->

    <!--
    The CAS filter handles the redirect from the CAS server and starts the ticket validation.
    -->
    <bean id="casAuthenticationFilter" class="org.springframework.security.cas.web.CasAuthenticationFilter">
        <property name="authenticationManager" ref="authenticationManager"></property>
        <property name="authenticationSuccessHandler">
            <bean class="org.springframework.security.web.authentication.SimpleUrlAuthenticationSuccessHandler">
                <property name="alwaysUseDefaultTargetUrl">
                    <value>true</value>
                </property>
                <property name="defaultTargetUrl">
                    <value>http://localhost:8080/user/index.htm</value>
                </property>
            </bean>
        </property>
    </bean>

    <!--**** 2015-06-23,CAS TEST ****-->
    <security:authentication-manager alias="authenticationManager" erase-credentials="false">
        <security:authentication-provider  ref="casAuthenticationProvider">
        </security:authentication-provider>
    </security:authentication-manager>
    <!--**** 2015-06-23,CAS TEST ****-->

    <!--
    Handles the CAS ticket processing.
    -->
    <bean id="casAuthenticationProvider" class="org.springframework.security.cas.authentication.CasAuthenticationProvider">
        <property name="authenticationUserDetailsService" ref="authenticationUserDetailsService"/>
        <property name="serviceProperties" ref="serviceProperties"></property>
        <property name="ticketValidator">
            <bean class="org.jasig.cas.client.validation.Cas20ServiceTicketValidator">
                <constructor-arg index="0" value="https://localhost:8443/cas-server" /> <!-- //SSO验证地址 -->
            </bean>
        </property>
        <property name="key" value="cas123"></property>
    </bean>

    <!-- authorities对应 CAS server的 登录属性, 在此设置到spirng security中,用于spring security的验证
    <bean id="authenticationUserDetailsService" class="org.springframework.security.cas.userdetails.GrantedAuthorityFromAssertionAttributesUserDetailsService">
        <constructor-arg>
            <array>
                <value>authorities</value>
            </array>
        </constructor-arg>
    </bean>
    -->

    <bean id="authenticationUserDetailsService" class="com.bms.comm.cas.MyAuthenticationUserDetailsService">
        <!-- <constructor-arg>
            <array>
                <value>authorities</value>
            </array>
        </constructor-arg> -->
        <property name="attributes">
            <array>
                <value>authorities</value>
            </array>
        </property>
    </bean>

    <!--
    This section is used to configure CAS. The service is the
    actual redirect that will be triggered after the CAS login sequence.
    //http://localhost:8088/SpringSecurity 具体应用
    // j_spring_cas_security_check spring的虚拟URL,此标志标识使用 CAS authentication upon return from CAS SSO login. -->

    <bean id="serviceProperties" class="org.springframework.security.cas.ServiceProperties">
        <property name="service" value="https://localhost:8447/j_spring_cas_security_check"></property>
        <property name="sendRenew" value="false"></property>
    </bean>

    <!--
    The entryPoint intercepts all the CAS authentication requests.
    It redirects to the CAS loginUrl for the CAS login page.
    通过上述的配置,则具体应用在使用的时候,用户认证和授权则无需过问,只需在应用中配置相关的角色访问权限即可。即,只需对下面的红色部分进行修改,
    即可以完成应用的认证和授权工作。大大简化了应用和认证与授权的剥离工作
    -->
    <bean id="casAuthenticationEntryPoint" class="org.springframework.security.cas.web.CasAuthenticationEntryPoint">
        <property name="loginUrl" value="https://localhost:8443/cas-server/login"></property> <!-- //SSO登录地址 -->
        <property name="serviceProperties" ref="serviceProperties"></property>
    </bean>

</beans>

请大牛帮我看下,看我的配置哪有问题?谢谢!!

解决方案

手机上看起来费劲,循环重定向一般都是配置一个路径被拦截,而又有拦截被跳转到该页面导致了。看看配置文件逻辑上有没有问题

时间: 2024-10-06 11:03:46

spring-Springsecurity cas单点登录,循环重定向问题的相关文章

spring security +cas 单点登录 注销session问题

问题描述 我现在有个项目,用springsecurity+cas登录,单点登录成功,显示在线人数为1,但是当我单点登出,也就是注销的时候,经过控制台,发现注销的时候会创建session,注销的sessionid不是创建的sessionid,也就是说当我注销后,重新登录时,就会显示在线人数为2.请问这个问题如何解决 解决方案 解决方案二:判断session的值如何为空的话,session.invalidate()

spring security cas单点登录拒绝访问

问题描述 cas服务端和cas客户端都已经配合,访问cas服务端可以登录,访问客户端应用资源的时候出现拒绝访问问题,但是能成功跳转到cas服务端的login页面,输入账号密码后控制台打印显示出服务端登录成功,但是关于客户端的打印出现拒绝访问异常,而且httpSession不为null但是里面没值.初次使用spring security和cas望多多指教.异常信息:首次登录直接出现拒绝访问,但是却能跳转到cas 登录页面,引用 解决方案 Spring Security与CAS集成,第一次访问客户端

spring整合shrio+cas单点登录

问题描述 spring整合shrio+cas单点登录 我想不通过登录界面登录,而是通过发送一个id后在后台实现登录,这要这么实现了.这里有使用到spring的flow. <view-state id=""viewLoginForm"" view=""casLoginView"" model=""credential""> <binder> <binding

SpringSecurity+JPA+CAS单点登录

问题描述 SpringSecurity+JPA+CAS单点登录错误信息如下:ERRORContextLoader:220-Contextinitializationfailedorg.springframework.beans.factory.BeanDefinitionStoreException:UnexpectedexceptionparsingXMLdocumentfromServletContextresource[/WEB-INF/classes/applicationContext

CAS单点登录(SSO)完整教程

CAS单点登录(SSO)完整教程(2012-02-01更新) 一.教程说明 前言 教程目的:从头到尾细细道来单点登录服务器及客户端应用的每个步骤 单点登录(SSO):请看百科解释猛击这里打开 本教程使用的SSO服务器是Yelu大学研发的CAS(Central Authentication Server), 官网:http://www.jasig.org/cas 本教程环境: Tomcat6.0.29 JDK6 CAS Server版本:cas-server-3.4.3.1.cas-server-

CAS单点登录时AJAX页面刷新无反应(302 Moved Temporarily)

最近使用CAS做单点认证服务时发现过大概二十分钟后就发现凡是异步方式刷新页面就无反应了(由于使用EasyUI框架,所以页面刷新基于ajax+div方式),刚开始一直认为是CAS服务端超时的问题,查看了各个配置,网上也参考了许多帖子,一直没有解决,今天无意想起来是不是session过期了呢,因为单点登录客户端没有配置任何session有效时长,也就是说客户端的session时长为tomcat默认时长(网上有人说Tomcat默认session有效期为30分钟,而现在发现的是大概20分钟后就会出现用a

.net cas 单点登录 求助

问题描述 .net cas 单点登录 求助 本人花了一个多星期找资料+测试,还是实现不了这个单点登录功能.请csdn网友出手相助 外部单点登录网址:http://59.41.39.98:808/CAS_Server/login 登录帐号与密码:0166166 123456 功能描述:1.在一个自己开发的网站登录界面,输入帐号密码,实现单点登录. 2.如果1无法实现,那在打开单点登录网址,输入帐号密码登录成功后能返回本网站页面. PS:需要是.net开发的,如果有完整可用的样例源码最好,感谢..

java-关于CAS单点登录的用户认证

问题描述 关于CAS单点登录的用户认证 现有多个系统web1,web2,web3... 用户张三,在web1里用户名密码是user1/123,在web2里用户名密码是zhangsan/456,在web3里用户名密码是abc/789-- 这些多个系统的用户名密码存放在不同数据库中,但是每个数据库里都有"工号"这个字段,且为必填项. 现在将这多个系统用CAS做单点登录,这多个数据库如何通过"工号"这个字段统一? 刚看到的一个思路: 单对多模式:一个用户使用不同凭证登录不

JAVA CAS单点登录之四:CAS服务器增加JDBC访问能力

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://dba10g.blog.51cto.com/764602/1753680 经过前面说明,已经完成了CAS服务器的搭建,代理客户端的搭建以及普通客户端,back-end-service客户端的搭建.如果不明白的,参照如下链接. JAVA CAS单点登录之一:搭建CAS服务器  JAVA CAS单点登录之二:CAS普通模式1演练 JAVA CAS单点登录之三:CAS代理模式演练  现