`

spring security 3.0 logout filter 代码中的一个小bug

阅读更多
先附上
   
      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 security3.0帮助文档

    Spring Security是Spring框架的一个强大且高度可定制的安全模块,用于保护基于Web和非Web的应用程序。版本3.0的发布带来了许多改进和新特性,使其成为处理安全需求的首选解决方案。本文将深入探讨Spring Security ...

    spring security3.0 demo

    Spring Security 是一个强大的且高度可定制的身份验证和访问控制框架,用于保护基于 Java 的应用程序。在3.0版本中,它提供了许多关键功能,旨在确保应用程序的安全性,防止未经授权的访问,并实现用户身份验证和...

    spring security 3.0x remember-me 免登陆

    Spring Security 是一个强大的Java安全框架,它为Web应用程序提供了全面的安全解决方案。在3.0.x版本中,"remember-me"功能是Spring Security提供的一种便捷方式,允许用户在关闭浏览器后仍能在一段时间内保持登录...

    Spring Security 3.0 安全权限管理手册

    Spring Security 是一个强大的、高度可定制的安全框架,用于保护基于Java的应用程序。它提供了许多开箱即用的功能,如认证、授权、会话管理等,并且这些功能可以根据具体需求进行定制。Spring Security 3.0 版本相较...

    SpringSecurity学习总结源代码

    总结,SpringSecurity是一个功能强大的安全框架,它为开发者提供了安全Web应用的全套解决方案。通过理解并熟练运用其核心概念和组件,我们可以构建出安全、健壮的应用程序。在学习过程中,分析提供的源代码和示例将...

    springsecurity_logout.rar

    SpringSecurity是Java领域中一个强大的安全框架,用于处理Web应用的安全性问题,如认证、授权等。在SpringSecurity中,登出(logout)功能是应用中不可或缺的一部分,它允许用户安全地结束当前会话,清除相关认证...

    spring security第一个项目

    在“spring security第一个项目”中,我们将探讨如何搭建一个基础的Spring Security环境,实现用户登录验证以及权限控制。 首先,我们需要理解Spring Security的基本架构。它由四个主要组件组成:Filter Security ...

    SpringSecurity退出功能实现的正确方式(推荐)

    使用 Spring Security 实现 logout 功能非常简单,只需要在 Spring Security 配置类上加上一行代码:`http.logout()`。这将启用 logout 功能,使用户可以安全地退出系统。在 logout 配置之后,可以在“退出”按钮上...

    spring security 3 多页面登录 小秘密小运气

    Spring Security是Java领域一个强大的安全框架,用于处理Web应用程序的安全性。在"Spring Security 3 多页面登录 小秘密小运气"这个主题中,我们可以深入探讨Spring Security 3如何支持多个登录页面以及其中可能涉及...

    初识 Spring Security - v1.1.pdf

    通过以上详细解析,可以看出Spring Security是一个非常强大且灵活的安全框架,它不仅能够满足基本的认证需求,还提供了丰富的高级特性,如权限管理、Remember-Me功能、session管理等。这对于构建安全可靠的企业级...

    SpringSecurity入门Demo实例

    Spring Security 是一个强大的和高度可定制的身份验证和访问控制框架,用于Java应用程序。在这个入门Demo实例中,我们将探讨如何配置和使用Spring Security来保护我们的Java应用。教程链接提及的CSDN博客文章提供了...

    狂神spring-security静态资源.zip

    - 自定义Filter:创建一个自定义的Filter,配置在Spring Security的过滤链中,对特定路径的静态资源进行过滤。 - 配置忽略资源:在Spring Security配置中,可以指定哪些URL路径应该被忽略,不进行安全控制。例如,...

    Spring security认证授权

    Spring Security 是一个强大的和高度可定制的身份验证和访问控制框架,用于Java应用程序。它提供了全面的安全解决方案,包括用户认证、权限授权、会话管理、CSRF防护以及基于HTTP的访问控制。在这个例子中,我们将...

    spring security 与ssm框架整合的一个小 demo

    Spring Security 是一个强大的和高度可定制的身份验证和访问控制框架,用于保护基于Java的应用程序。它为Spring应用程序提供了全面的安全服务,包括用户认证、权限控制、会话管理以及CSRF(跨站请求伪造)防护等。...

    Spring Security 基本使用和配置代码

    Spring Security 是一个强大的且高度可定制的身份验证和访问控制框架,广泛用于构建安全的Java Web应用程序。本教程将深入探讨Spring Security的基本使用和配置代码,帮助你理解和实践这个框架。 首先,Spring ...

    Spring security 自定义密码加密方式的使用范例。

    在提供的压缩包文件"ALLSRC"中,你应该能找到一个完整的Spring Security项目,包括源代码、配置文件和依赖。通过这个项目,你可以深入理解Spring Security的工作原理,并学习如何自定义其核心组件。如果你对码云不...

    spring security3配置和使用实例+教程

    Spring Security 是一个强大的Java安全框架,用于保护Web应用程序免受各种威胁。它提供了一套全面的安全解决方案,包括认证、授权、会话管理以及基于角色的访问控制。在本教程中,我们将深入探讨Spring Security 3的...

    Spring Security详细介绍及使用含完整代码(值得珍藏)

    以下是在Spring Boot项目中使用Spring Security进行前后端分离配置的一个基本示例: ##### 3.1 依赖配置 在`pom.xml`文件中添加必要的依赖: ```xml &lt;!-- Spring Security --&gt; &lt;groupId&gt;org.springframework....

    Spring Security 小例子(1)

    Spring Security 是一个强大的且高度可定制的身份验证和访问控制框架,它是Java开发人员在构建安全Web应用程序时的首选工具。这个“Spring Security 小例子(1)”很可能是针对初学者或者那些希望快速了解该框架基本...

    SpringSecurity笔记2-SpringSecurity命名空间

    在"SpringSecurity笔记2-SpringSecurity命名空间"的学习中,还会涉及到如何自定义过滤器链,以及如何通过`&lt;custom-filter&gt;`元素插入自定义的SpringSecurity过滤器。同时,理解`&lt;access-denied-handler&gt;`和`...

Global site tag (gtag.js) - Google Analytics