退出的基本配置:
<logout logout-url="/logout.htm" logout-success-url="/login.htm" invalidate-session="true" />
也可以自定义退出成功的handler,添加配置success-handler-ref。如果不配置logout-url,默认的退出url是j_spring_security_logout。处理退出时Spring Security3将会做的事:
- 使得HTTP session失效(如果invalidate-session属性被设置为true,默认是true的);
- 清除SecurityContex(真正使得用户退出);
- 将页面重定向至logout-success-url指明的URL。
- 如果启用了rememberme,清除cookie
退出过滤器是:org.springframework.security.web.authentication.logout.LogoutFilter,退出的流程比较简单:
看源码:
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) res; if (requiresLogout(request, response)) { Authentication auth = SecurityContextHolder.getContext().getAuthentication(); if (logger.isDebugEnabled()) { logger.debug("Logging out user '" + auth + "' and transferring to logout destination"); } // 循环调用退出handler,执行logout方法 for (LogoutHandler handler : handlers) { handler.logout(request, response, auth); } // 退出成功后的handler logoutSuccessHandler.onLogoutSuccess(request, response, auth); return; } chain.doFilter(request, response); }
handlers集合默认在org.springframework.security.config.http.LogoutBeanDefinitionParser配置的:
ManagedList handlers = new ManagedList(); SecurityContextLogoutHandler sclh = new SecurityContextLogoutHandler(); if ("true".equals(invalidateSession)) { sclh.setInvalidateHttpSession(true); } else { sclh.setInvalidateHttpSession(false); } //一个SecurityContextLogoutHandler对象 handlers.add(sclh); // 如果启用了rememberme,还需要清理cookie if (rememberMeServices != null) { handlers.add(new RuntimeBeanReference(rememberMeServices)); } builder.addConstructorArgValue(handlers);
先看SecurityContextLogoutHandler的logout方法
public void logout(HttpServletRequest request, HttpServletResponse response, Authentication authentication) { Assert.notNull(request, "HttpServletRequest required"); // 销毁session if (invalidateHttpSession) { HttpSession session = request.getSession(false); if (session != null) { session.invalidate(); } } // 设置SecurityContextHolder对象为空 SecurityContextHolder.clearContext(); }
启用rememberme时,退出清除了cookie:AbstractRememberMeServices
public void logout(HttpServletRequest request, HttpServletResponse response, Authentication authentication) { if (logger.isDebugEnabled()) { logger.debug( "Logout of user " + (authentication == null ? "Unknown" : authentication.getName())); } //清除cookie cancelCookie(request, response); }
退出成功后将根据配置重定向到一个url。
相关推荐
在"SpringSecurity笔记2-SpringSecurity命名空间"的学习中,还会涉及到如何自定义过滤器链,以及如何通过`<custom-filter>`元素插入自定义的SpringSecurity过滤器。同时,理解`<access-denied-handler>`和`...
8. **自定义扩展**:Spring Security允许开发者自定义许多核心组件,如认证提供者、访问决策器、过滤器等,以适应特定的业务需求。 为了充分利用这个压缩包中的内容,你需要解压并查看源代码,了解其内部结构和工作...
**Spring Security**是一种广泛应用于Java企业级项目中的安全框架,它基于Spring AOP(面向切面编程)和Servlet过滤器来提供全面的安全解决方案。该框架能够在Web请求级别以及方法调用级别处理身份验证...
在Spring Security中,退出流程通常是通过调用`logout`过滤器来实现的。这个过滤器负责清理用户的会话信息,包括注销用户的认证信息,并重定向到一个指定的“登出成功”页面。以下是一些关于实现Spring Security多...
Spring Security3 提供了一系列的过滤器,每个过滤器负责处理不同类型的安全请求。常见的过滤器包括: * SecurityContextPersistenceFilter:创建安全上下文 * UsernamePasswordAuthenticationFilter:完成认证处理...
- **过滤器链**:Spring Security 使用一系列过滤器来处理请求,每个过滤器都有特定功能,如认证、授权等。 - **记住我功能**:允许用户在一段时间内免密登录,通常使用 Cookie 实现。 - **CSRF 保护**:防止跨站...
完整的Spring Security过滤器配置列表列出了所有参与安全流程的过滤器及其在过滤链中的顺序,这对于理解和调试Spring Security配置至关重要。 在实际应用中,Spring Security可以通过AOP(面向切面编程)进一步...
2. **过滤器链**:Spring Security 使用一系列过滤器来处理HTTP请求。这些过滤器包括`HttpSessionAuthenticationStrategy`、`AnonymousAuthenticationFilter`、`UsernamePasswordAuthenticationFilter`等,它们分别...
### Spring Security3中文文档知识点概览 #### 第一章:一个不安全应用的剖析 - **安全审计**:介绍如何通过安全审计来发现系统中的安全漏洞,并解释审计的重要性。 - **关于样例应用**:本章节以JBCPPets应用为例...
- 它的核心组件包括过滤器链,如`DelegatingAuthenticationEntryPoint`和`RememberMeAuthenticationFilter`,这些组件协同工作以实现无状态的HTTP请求处理。 - Spring Security支持多种认证方式,如HTTP Basic、...
- **添加Spring DelegatingFilterProxy到web.xml文件**:指导如何在web.xml中配置过滤器以启用Spring Security。 - **添加Spring Security XML配置文件的应用到web.xml**:进一步说明如何整合Spring Security配置与...
- **过滤器链(Filter Chain)**:SpringSecurity通过一系列过滤器处理HTTP请求,执行安全相关的操作。 - **访问决策管理器(Access Decision Manager)**:决定用户是否被授权访问特定资源。 - **会话管理...
SpringSecurity的核心组件包括:过滤器链、认证管理、权限控制、会话管理等。 在这个"springboot+springsecurity入门"项目中,我们将关注如何将这两个框架结合使用,实现一个自定义表单登录的功能。自定义表单登录...
3. Spring Security 4.2的新特性 27 3.1 Web改进 27 3.2配置改进 28 3.3杂项 28 4.样品和指南(从这里开始) 28 5. Java配置 29 5.1 Hello Web安全Java配置 29 5.1.1 AbstractSecurityWebApplicationInitializer 31 ...
Spring Security的核心是其过滤器链,它由一系列的`Filter`组成,每个`Filter`负责特定的安全任务,如CSRF保护、登录验证等。`FilterSecurityInterceptor`是授权的关键部分,它检查每个请求,并根据配置的访问决策...