关于 j_spring_cas_security_check 404 问题的处理

本文探讨了SSO-CAS框架中常见的循环重定向异常现象,并详细记录了解决这一问题的过程。作者发现web.xml中defaultservlet的不当配置是导致问题的根本原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CAS server认证通过并成功跳回客户系统,然后浏览器页面却显示循环重定向异常!
相信使用SSO-CAS开源框架的开发者中遇到此情况的人不在少数。

表面原因是循环重定向,进一步原因则是我们设置的登录路径存在问题导致跳转至默认页面,而默认页面又同样需要CAS认证,于是就不断的认证跳转认证跳转。

而再进一步分析,就我当前遇到的情况而言则是由于[b]rootpath/j_spring_cas_security_check[/b] [b]404[/b] 导致。
而这个问题是在开发过程中突然出现的,查看spring sec配置,web.xml 等等都无法定位异常原因。
折腾了很久,不得不推翻工程,重新进行试错配置,很幸运很快找到问题所在!一个我之前无论如何也怀疑不到的地方,即web.xml中[b]default servlet[/b]的引入,由于使用spring mvc,意在排除mvc对静态文件的处理所以让 default servlet预先处理之,加入
  <servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.js</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.css</url-pattern>
</servlet-mapping>
......

而mvc相关的servlet 映射则是明确给出的 如
  <servlet-mapping>
<servlet-name>cas-management</servlet-name>
<url-pattern>/manage/add.html</url-pattern>
</servlet-mapping>
......


这样配置完之后,问题就出现了,登录路径无论如何是返回404了。
解决方法是要么去掉 default的引入,要么将后面的配置用通配符代替明确的servlet映射
但是细想来也算是个奇葩的隐含规则,恕小生才疏学浅确实不知道有这么一出。
要将CAS集成到Spring Security中,需要遵循以下步骤: 1. 在pom.xml中添加依赖项: ``` <dependency> <groupId>org.apereo.cas</groupId> <artifactId>cas-server-support-security</artifactId> <version>${cas.version}</version> </dependency> ``` 2. 在Spring Security的配置文件中添加以下内容: ``` <security:http entry-point-ref="casEntryPoint"> <security:intercept-url pattern="/secure/**" access="ROLE_USER"/> <security:custom-filter ref="casAuthenticationFilter" after="CAS_FILTER"/> </security:http> <bean id="casEntryPoint" class="org.springframework.security.cas.web.CasAuthenticationEntryPoint"> <property name="loginUrl" value="https://CAS_SERVER/login"/> <property name="serviceProperties" ref="serviceProperties"/> </bean> <bean id="serviceProperties" class="org.springframework.security.cas.ServiceProperties"> <property name="service" value="https://${APP_HOST}:${APP_PORT}/j_spring_cas_security_check"/> <property name="sendRenew" value="false"/> </bean> <bean id="casAuthenticationFilter" class="org.springframework.security.cas.web.CasAuthenticationFilter"> <property name="authenticationManager" ref="authenticationManager"/> </bean> <security:authentication-manager alias="authenticationManager"> <security:authentication-provider ref="casAuthenticationProvider"/> </security:authentication-manager> <bean id="casAuthenticationProvider" class="org.springframework.security.cas.authentication.CasAuthenticationProvider"> <property name="userDetailsService" ref="userDetailsService"/> <property name="serviceProperties" ref="serviceProperties"/> <property name="ticketValidator"> <bean class="org.jasig.cas.client.validation.Cas20ServiceTicketValidator"> <constructor-arg value="https://CAS_SERVER"/> </bean> </property> <property name="key" value="casAuthenticationProvider"/> </bean> <bean id="userDetailsService" class="org.springframework.security.core.userdetails.jdbc.JdbcDaoImpl"> <property name="dataSource" ref="dataSource"/> <property name="usersByUsernameQuery"> <value>SELECT username,password,enabled FROM users WHERE username=?</value> </property> <property name="authoritiesByUsernameQuery"> <value>SELECT username, role FROM user_roles WHERE username=?</value> </property> </bean> ``` 3. 在CAS服务器上配置应用程序的服务: ``` { "@class" : "org.apereo.cas.services.RegexRegisteredService", "serviceId" : "https://${APP_HOST}:${APP_PORT}/j_spring_cas_security_check", "name" : "My Application", "id" : 1, "evaluationOrder" : 10, "attributeReleasePolicy": { "@class": "org.apereo.cas.services.ReturnAllAttributeReleasePolicy" } } ``` 这些步骤将使CASSpring Security集成在一起,从而实现基于CAS的身份验证和授权。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值