最近在做单点登录,采用的是CAS+Spring Security3.2来做的,按照网上找的一些例子做了,发现了一个问题,就是跳转到CAS服务器登录之后,再跳转回我的项目的时候就会报404,打断点跟了一下发现AbstractAuthenticationProcessingFilter的doFilter方法
if (!requiresAuthentication(request, response)) {
chain.doFilter(request, response);
return;
}
直接就return了,然后就是一个404页面,搞不懂是什么问题
从CAS跳转回来的地址是http://localhost:8088/xtask/j_spring_cas_security_check?ticket=ST-10-PAQN0mcApmeNXgZuFxpv-cas01.example.org
我的web.xml配置如下
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>XTask</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- Spring Security -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/applicationContext*.xml
</param-value>
</context-param>
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
<listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
</listener>
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
applicationContext-security.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns:beans="http://www.springframework.org/schema/beans"
xmlns="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.0.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.2.xsd">
<http auto-config="false" entry-point-ref="casAuthEntryPoint" servlet-api-provision="true" access-denied-page="/403.jsp">
<intercept-url pattern="/index.jsp" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
<intercept-url pattern="/login.jsp" access="ROLE_USER"/>
<intercept-url pattern="/**" access="ROLE_USER,ROLE_ADMIN"/>
<custom-filter position="CAS_FILTER" ref="casAuthenticationFilter"/>
<custom-filter ref="requestSingleLogoutFilter" before="LOGOUT_FILTER" />
<custom-filter ref="singleLogoutFilter" before="CAS_FILTER" />
<session-management>
<concurrency-control max-sessions="1"
expired-url="/index.jsp" error-if-maximum-exceeded="false" />
</session-management>
<!--
<custom-filter position="FORM_LOGIN_FILTER" ref="casAuthenticationFilter"/>
-->
</http>
<!-- 在认证管理器中注册cas认证提供器 -->
<authentication-manager alias="authenticationManager">
<authentication-provider ref="casAuthenticationProvider" />
</authentication-manager>
</beans:beans>
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
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.0.xsd">
<!-- -->
<!-- cas 认证过滤器 -->
<bean id="casAuthenticationFilter" class="org.springframework.security.cas.web.CasAuthenticationFilter">
<property name="authenticationManager" ref="authenticationManager" />
<property name="authenticationFailureHandler" ref="authenticationFailureHandler" />
<property name="authenticationSuccessHandler" ref="authenticationSuccessHandler" />
<property name="filterProcessesUrl" value="/j_spring_cas_security_check" />
</bean>
<!-- cas 认证失败控制器 -->
<bean id="authenticationFailureHandler"
class="org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler">
<property name="defaultFailureUrl" value="/403.jsp" />
</bean>
<!-- cas 认证成功控制器 -->
<bean id="authenticationSuccessHandler"
class="org.springframework.security.web.authentication.SimpleUrlAuthenticationSuccessHandler">
<property name="alwaysUseDefaultTargetUrl" value="true" />
<property name="defaultTargetUrl" value="/frame.do" />
</bean>
<!-- CAS认证切入点,声明cas服务器端登录的地址 -->
<bean id="casAuthEntryPoint" class="org.springframework.security.cas.web.CasAuthenticationEntryPoint">
<property name="loginUrl" value="http://localhost:8089/cas/login" />
<property name="serviceProperties" ref="casService" />
</bean>
<!-- 登录成功后的返回地址 -->
<bean id="casService" class="org.springframework.security.cas.ServiceProperties">
<property name="service" value="http://localhost:8088/xtask/j_spring_cas_security_check"/>
<property name="sendRenew" value="false"/>
</bean>
<!-- cas认证提供器,定义客户端的验证方式 -->
<bean id="casAuthenticationProvider" class="org.springframework.security.cas.authentication.CasAuthenticationProvider">
<property name="ticketValidator" ref="casTicketValidator" />
<property name="serviceProperties" ref="casService" />
<property name="key" value="epcpass-cas" />
<property name="authenticationUserDetailsService" ref="authenticationUserDetailsService" />
</bean>
<bean id="casTicketValidator" class="org.jasig.cas.client.validation.Cas20ServiceTicketValidator">
<constructor-arg index="0" value="http://localhost:8089/cas/" />
</bean>
<!-- 客户端只验证用户名是否合法 -->
<bean id="authenticationUserDetailsService"
class="org.springframework.security.core.userdetails.UserDetailsByNameServiceWrapper">
<property name="userDetailsService" ref="userDetailImpl"/>
</bean>
<!-- 获取客户端用户 -->
<bean id="userDetailImpl" class="com.epc.xtask.UserDetailServiceImpl"></bean>
<!-- 注销客户端 -->
<bean id="singleLogoutFilter" class="org.jasig.cas.client.session.SingleSignOutFilter" />
<!-- 注销服务器端 -->
<bean id="requestSingleLogoutFilter" class="org.springframework.security.web.authentication.logout.LogoutFilter">
<constructor-arg value="http://localhost:8089/cas/logout" />
<constructor-arg>
<bean class="org.springframework.security.web.authentication.logout.SecurityContextLogoutHandler"/>
</constructor-arg>
<property name="filterProcessesUrl" value="/j_spring_cas_security_logout" />
</bean>
</beans>
程序的代码我已经上传了,请帮忙看看,谢谢了
问题补充:后台DEBUG信息
org.springframework.security.web.context.HttpSessionSecurityContextRepository - No HttpSession currently exists
No SecurityContext was available from the HttpSession: null. A new one will be created.
相关推荐
通过`CasAuthenticationProvider`,Spring Security可以与CAS服务器通信,进行用户的验证和授权。 **Spring Security的过滤器链** 在Spring Boot应用中,Spring Security的过滤器链是关键。`...
1. **配置CAS客户端**:在Spring Boot应用中,我们需要引入CAS客户端库,例如`spring-security-cas`,并配置相关的CAS服务器地址、服务验证URL等。 2. **配置Spring Security**:在Spring Security的配置类中,设置...
yshop基于当前流行技术组合的前后端分离商城系统: SpringBoot2+MybatisPlus+SpringSecurity+jwt+redis+Vue的前后端分离的商城系统, 包含分类、sku、运费模板、素材库、小程序直播、拼团、砍价、商户管理、 秒杀、...
SpringBoot+SpringSecurity+JWT+MybatisPlus实现基于注解的权限验证,可根据注解的格式不同,做到角色权限控制,角色加资源权限控制等,粒度比较细化。 @PreAuthorize("hasAnyRole('ADMIN','USER')"):具有admin或...
3. **CAS客户端配置**:在应用中集成CAS作为SSO的客户端,需要在Spring Security的配置中加入CAS的相关配置,如指定CAS服务器地址、服务验证URL等。同时,配置CAS过滤器以处理用户的身份验证请求。 4. **Spring ...
在本项目中,Spring Security负责管理用户登录、权限验证等安全相关的工作,确保只有经过身份验证的用户才能访问特定资源。配合Spring Boot,我们可以轻松实现安全控制,避免未授权的访问。 Spring Session是Spring...
基于当前流行技术组合的前后端分离商城系统:SpringBoot2+MybatisPlus+SpringSecurity+jwt+redis+Vue的前后端分离的商城系统, 包含商城、sku、运费模板、素材库、小程序直播、拼团、砍价、商户管理、 秒杀、优惠券...
3. **集成CAS客户端**:添加CAS客户端库到项目中,如`cas-client-support-springboot`或`cas-client-support-spring`。在Spring配置文件中声明`CasClientConfigurer`和`CasFilter`,并配置CAS服务器的URL、服务验证...
开源测试项目:spring mvc+springsecurity3+ehcache+bootstrap+mysql 内附MySQL表,直接导入就可运行 效果图请移步:http://blog.csdn.net/yangxuan0261/article/details/10053947
youlai-boot 是【有来开源组织】基于Spring Boot 3 + Spring Security 6 + JWT + Mybatis-Plus + Redis + XXL-Job + Vue3 等主流技术栈搭建的前后端分离权限管理系统。 在线预览地址:http://vue3.youlai.tech 后端...
**Spring Security** 是Spring框架的一个子项目,专注于提供身份验证和授权功能。它可以保护你的应用程序免受恶意访问,支持各种认证和授权机制,包括HTTP基本认证、OAuth2、JWT等。 **MyBatis** 是一个优秀的持久...
全注解 spring boot +spring security + mybatis+druid+thymeleaf+jsp+mysql+bootstrap 支持thymeleaf和jsp并存 全注解 spring boot spring security thymeleaf+jsp同时使用 mybatis druid mysql bootstrap 访问 ...
在这个项目中,Spring Security会被配置为使用JWT进行身份验证。首先,我们需要创建一个自定义的`AuthenticationProvider`,负责验证用户的凭证。接着,当用户成功登录后,我们将在`AuthenticationSuccessHandler`中...
在这个项目中,Spring Security负责身份验证和授权,为API提供安全访问控制。用户登录后,Spring Security会生成一个JWT令牌,用于后续请求的身份验证。 3. **JWT**: JWT是一种轻量级的身份认证和授权机制,通常...
后端使用SpringBoot框架进行业务逻辑开发,利用Spring Security实现权限控制。数据库采用MySQL进行数据存储,使用MyBatis进行数据访问。 权限控制模块设计包括用户、角色和权限三个主要模块。用户模块用于管理用户...
当用户尝试访问受保护的资源时,Spring Security 会将请求重定向到CAS服务器进行身份验证。如果验证成功,CAS会返回一个服务票据(Service Ticket),Spring Security 使用这个票据来确认用户的合法性,从而允许访问...
spring+springmvc+shiro+cas单点登录实例 springmvc+spring+shiro+cas单点登录实例 加入了登录验证码认证,修改了下首页样式,不过样式没有弄好,很丑的,有空自己再弄下 说明:cas-server是单点登录服务端,用的是...
1. **Spring Security认证**:Spring Security的核心在于认证过程,即验证用户的身份。通常,我们可以定义一个`UserDetailsService`来加载用户的详细信息,然后通过`AuthenticationManager`进行认证。一旦用户被认证...
SpringSecurity教程+视频+源码+资料.txt
Spring Security 6可能会引入更多对最新Java特性的支持,改进加密机制,以及增强对OAuth2和其他身份验证协议的支持。它提供了一种灵活的方式来保护RESTful API、Web应用以及微服务。 4. **Vue 3**: Vue.js 3是这个...