Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring security 导航到spring安全登录页面会重定向到无效的会话url_Spring Security - Fatal编程技术网

Spring security 导航到spring安全登录页面会重定向到无效的会话url

Spring security 导航到spring安全登录页面会重定向到无效的会话url,spring-security,Spring Security,为了在会话超时时将用户重定向到我想要的url,我最近在我的spring安全文件中添加了以下内容 <http pattern="/resources/**" security="none"/> <http pattern="/resources/js/**" security="none"/> <http pattern="/resources/css/**" security="none"/> <!-- excluded pages --> <

为了在会话超时时将用户重定向到我想要的url,我最近在我的spring安全文件中添加了以下内容

<http pattern="/resources/**" security="none"/>
<http pattern="/resources/js/**" security="none"/>
<http pattern="/resources/css/**" security="none"/>
<!-- excluded pages -->
<http pattern="/login.htm" security="none"/>
<http pattern="/j_spring_security_check" security="none"/>
<http pattern="/accessDenied.htm" security="none"/> 
<http pattern="/error.htm" security="none"/>

<http use-expressions="true" auto-config="false" entry-point-ref="loginUrlAuthenticationEntryPoint">    
    <!-- custom filters -->
    <custom-filter position="FORM_LOGIN_FILTER" ref="twoFactorAuthenticationFilter" />      
    <custom-filter after="SECURITY_CONTEXT_FILTER" ref="securityLoggingFilter"/>
    <!-- session management -->     
    <session-management 
        invalid-session-url="/sessionExpired.htm" 
        session-authentication-error-url="/alreadyLoggedIn.htm">

        <concurrency-control 
            max-sessions="1" 
            expired-url="/sessionExpiredDuplicateLogin.htm" 
            error-if-maximum-exceeded="false" 
            session-registry-alias="sessionRegistry"/>

    </session-management>   

当会话在下一次单击时过期时,用户被带到/sessionExpired.htm,这是所需的效果。但是,现在当我导航到登录页面(login.htm)时出现问题,我被重定向到无效的会话url(/sessionExpired.htm)

显然这不是我想要的。我一直在阅读它,建议的解决方案之一似乎是像这样删除jsessionid cookie,并将invalidate session设置为false(我现在在logout.htm的controller方法中使session无效)


我试过了,但似乎不起作用。有人能帮我理解这里发生了什么,我该如何解决?当我进入登录页面时,它似乎在试图记住我是谁


谢谢

我在Tomcat中遇到了这个问题(不确定是否只适用于它)

从Tomcat文档()中,我们可以得出结论,为会话cookie生成的路径后面有一个斜杠:

某些浏览器(如IE)会为路径为/foo的上下文发送会话cookie,并向/foobar发出请求。为了防止出现这种情况,Tomcat将在与会话cookie关联的路径中添加一个尾随斜杠,因此,在上面的示例中,cookie路径变为/foo/。但是,如果cookie路径为/foo/,IE将不再向/foo发送带有请求的cookie。除非存在映射到/*的servlet,否则这应该不是问题。在这种情况下,需要禁用此功能。此属性的默认值为true。要禁用此功能,请将属性设置为false

另一方面,SpringSecurity将生成一个没有尾部斜杠的cookie路径。设置cookie响应标头将发送到浏览器,但cookie路径将与路径不匹配,因为缺少尾部斜杠

浏览器将不会清除现有的JSESSIONID cookie,因为路径不匹配


我解决了实现CookieClearningLogoutHandler的自定义实现的问题。

能否在已映射url和所需角色的位置发布代码。我猜您已经用一些必需的角色标记了登录url。在登录页面上,您应该给出一个表达式。如果你不能理解这一点,那么就用安全管理器发送url映射的代码。我已经编辑显示我在登录页面上没有使用任何代码。哇,这是一个很好的答案。我也要试着这样做。您是否介意为我发布一段自定义CookieClearningLogoutHandler,让我了解您所做的事情?public void logout(HttpServletRequest请求、HttpServletResponse响应、身份验证){Cookie Cookie=new Cookie(“JSESSIONID”,null);Cookie.setPath(request.getContextPath()+“/”);cookie.setMaxAge(0);response.addCookie(cookie);}这在Spring Security 5.0和4.2中已经修复:
<logout logout-success-url="/logout.htm" invalidate-session="false" delete-cookies="JSESSIONID"/>