先附上
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");
}
for (LogoutHandler handler : handlers) {
handler.logout(request, response, auth);
}
logoutSuccessHandler.onLogoutSuccess(request, response, auth);
return;
}
chain.doFilter(request, response);
}
/**
* Allow subclasses to modify when a logout should take place.
*
* @param request the request
* @param response the response
*
* @return <code>true</code> if logout should occur, <code>false</code> otherwise
*/
protected boolean requiresLogout(HttpServletRequest request, HttpServletResponse response) {
String uri = request.getRequestURI();
int pathParamIndex = uri.indexOf(';');
if (pathParamIndex > 0) {
// strip everything from the first semi-colon
uri = uri.substring(0, pathParamIndex);
}
int queryParamIndex = uri.indexOf('?');
if (queryParamIndex > 0) {
// strip everything from the first question mark
uri = uri.substring(0, queryParamIndex);
}
[color=red]if ("".equals(request.getContextPath())) {
return uri.endsWith(filterProcessesUrl);
}[/color]
return [color=red]uri.endsWith(request.getContextPath() + filterProcessesUrl)[/color];
}
requiresLogout方法是判断url是否为 logout_url 的,居然用了 endsWith,我进行了测试,只要地址后缀为 j_spring_security_logout 的 都能退出系统。
而且
if ("".equals(request.getContextPath())) {
return uri.endsWith(filterProcessesUrl);
}这段代码貌似没用, 直接用下面那个就能比较出来。
大家有什么看法?
分享到:
相关推荐
Spring Security是Spring框架的一个强大且高度可定制的安全模块,用于保护基于Web和非Web的应用程序。版本3.0的发布带来了许多改进和新特性,使其成为处理安全需求的首选解决方案。本文将深入探讨Spring Security ...
Spring Security 是一个强大的且高度可定制的身份验证和访问控制框架,用于保护基于 Java 的应用程序。在3.0版本中,它提供了许多关键功能,旨在确保应用程序的安全性,防止未经授权的访问,并实现用户身份验证和...
Spring Security 是一个强大的Java安全框架,它为Web应用程序提供了全面的安全解决方案。在3.0.x版本中,"remember-me"功能是Spring Security提供的一种便捷方式,允许用户在关闭浏览器后仍能在一段时间内保持登录...
Spring Security 是一个强大的、高度可定制的安全框架,用于保护基于Java的应用程序。它提供了许多开箱即用的功能,如认证、授权、会话管理等,并且这些功能可以根据具体需求进行定制。Spring Security 3.0 版本相较...
总结,SpringSecurity是一个功能强大的安全框架,它为开发者提供了安全Web应用的全套解决方案。通过理解并熟练运用其核心概念和组件,我们可以构建出安全、健壮的应用程序。在学习过程中,分析提供的源代码和示例将...
SpringSecurity是Java领域中一个强大的安全框架,用于处理Web应用的安全性问题,如认证、授权等。在SpringSecurity中,登出(logout)功能是应用中不可或缺的一部分,它允许用户安全地结束当前会话,清除相关认证...
在“spring security第一个项目”中,我们将探讨如何搭建一个基础的Spring Security环境,实现用户登录验证以及权限控制。 首先,我们需要理解Spring Security的基本架构。它由四个主要组件组成:Filter Security ...
使用 Spring Security 实现 logout 功能非常简单,只需要在 Spring Security 配置类上加上一行代码:`http.logout()`。这将启用 logout 功能,使用户可以安全地退出系统。在 logout 配置之后,可以在“退出”按钮上...
Spring Security是Java领域一个强大的安全框架,用于处理Web应用程序的安全性。在"Spring Security 3 多页面登录 小秘密小运气"这个主题中,我们可以深入探讨Spring Security 3如何支持多个登录页面以及其中可能涉及...
通过以上详细解析,可以看出Spring Security是一个非常强大且灵活的安全框架,它不仅能够满足基本的认证需求,还提供了丰富的高级特性,如权限管理、Remember-Me功能、session管理等。这对于构建安全可靠的企业级...
Spring Security 是一个强大的和高度可定制的身份验证和访问控制框架,用于Java应用程序。在这个入门Demo实例中,我们将探讨如何配置和使用Spring Security来保护我们的Java应用。教程链接提及的CSDN博客文章提供了...
- 自定义Filter:创建一个自定义的Filter,配置在Spring Security的过滤链中,对特定路径的静态资源进行过滤。 - 配置忽略资源:在Spring Security配置中,可以指定哪些URL路径应该被忽略,不进行安全控制。例如,...
Spring Security 是一个强大的和高度可定制的身份验证和访问控制框架,用于Java应用程序。它提供了全面的安全解决方案,包括用户认证、权限授权、会话管理、CSRF防护以及基于HTTP的访问控制。在这个例子中,我们将...
Spring Security 是一个强大的和高度可定制的身份验证和访问控制框架,用于保护基于Java的应用程序。它为Spring应用程序提供了全面的安全服务,包括用户认证、权限控制、会话管理以及CSRF(跨站请求伪造)防护等。...
Spring Security 是一个强大的且高度可定制的身份验证和访问控制框架,广泛用于构建安全的Java Web应用程序。本教程将深入探讨Spring Security的基本使用和配置代码,帮助你理解和实践这个框架。 首先,Spring ...
在提供的压缩包文件"ALLSRC"中,你应该能找到一个完整的Spring Security项目,包括源代码、配置文件和依赖。通过这个项目,你可以深入理解Spring Security的工作原理,并学习如何自定义其核心组件。如果你对码云不...
Spring Security 是一个强大的Java安全框架,用于保护Web应用程序免受各种威胁。它提供了一套全面的安全解决方案,包括认证、授权、会话管理以及基于角色的访问控制。在本教程中,我们将深入探讨Spring Security 3的...
以下是在Spring Boot项目中使用Spring Security进行前后端分离配置的一个基本示例: ##### 3.1 依赖配置 在`pom.xml`文件中添加必要的依赖: ```xml <!-- Spring Security --> <groupId>org.springframework....
Spring Security 是一个强大的且高度可定制的身份验证和访问控制框架,它是Java开发人员在构建安全Web应用程序时的首选工具。这个“Spring Security 小例子(1)”很可能是针对初学者或者那些希望快速了解该框架基本...
在"SpringSecurity笔记2-SpringSecurity命名空间"的学习中,还会涉及到如何自定义过滤器链,以及如何通过`<custom-filter>`元素插入自定义的SpringSecurity过滤器。同时,理解`<access-denied-handler>`和`...