为什么当我在用户注销时将session-managment配置插入spring-security.xml文件时重定向到invalid-session-url?

时间:2015-10-23 09:33:37

标签: java spring spring-mvc java-ee spring-security

我是Spring Security中的新手,当我设置会话管理设置时,我正在处理与注销操作相关的项目存在以下问题。

所以我有以下情况。

这是我的 spring-security.xml 配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security" 
    xmlns:beans="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-4.0.xsd
                        http://www.springframework.org/schema/security 
                        http://www.springframework.org/schema/security/spring-security-4.0.xsd">

      <http pattern="/resources/**" security="none"/>
       <http auto-config="true" use-expressions="true" authentication-manager-ref="authenticationManager">
        <intercept-url pattern="/login" access="permitAll" />
        <intercept-url pattern="/registrati" access="permitAll" />
        <intercept-url pattern="/sessionTimeout" access="permitAll" />
        <intercept-url pattern="/error" access="permitAll" />
        <intercept-url pattern="/salvaRegistrazione" access="permitAll" />
        <intercept-url pattern="/captcha.html" access="permitAll" />
        <intercept-url pattern="/monitoraggioCandidature" access="permitAll" />
        <intercept-url pattern="/riepilogoDettaglioRegione" access="permitAll" />
        <intercept-url pattern="/**" access="isAuthenticated()" />
        <logout logout-success-url="/login" logout-url="/logout" />
        <form-login  login-page="/login"  
                     authentication-failure-url="/login?error=true"
                    default-target-url="/"
                    username-parameter="nomeUtente"
                    password-parameter="password"
                    login-processing-url="/j_spring_security_check"/>
        <csrf disabled="true"/>

        <session-management  invalid-session-url="/sessionTimeout" />

    </http> 

    <authentication-manager id="authenticationManager" >
        <authentication-provider>
            <jdbc-user-service data-source-ref="datasource" 
                users-by-username-query="select des_usr_par, des_psw_par,true from TID001_ANAGPARTECIPA where des_usr_par =?"
                 authorities-by-username-query="select des_usr_par, prg_par from TID001_ANAGPARTECIPA where des_usr_par = ? "/>

        </authentication-provider>
    </authentication-manager>

</beans:beans>

这是 sessionTimeout.html 视图(我在项目中使用 Thymeleaf ,因此扩展名为.html而不是.jsp,但现在这并不重要)

那么,您可以在之前的 spring-security.xml 文件中看到,定义了与会话管理相关的此设置:

<session-management  invalid-session-url="/sessionTimeout" />

如果会话过期,则会向 / sessionTimeout 资源生成HTTP请求(或类似的内容,如果是错误的断言,请更正我)。此请求由显示先前 sessionTimeout.html 视图

的控制器方法处理
@RequestMapping(value = "/sessionTimeout", method = RequestMethod.GET)
public String sessionTimeout(Model model) {
    return "sessionTimeout";
}

正如您在前面的 spring-security.xml 中看到的那样,我还通过以下方式管理Spring Security标准方式的注销任务:

<logout logout-success-url="/login" logout-url="/logout" />

必须重定向到与 / login 资源的请求相关联的登录页面。

好的,这很好用,直到我没有在 spring-security.xml 文件中插入会话管理。问题是当我插入这一行时:

<session-management  invalid-session-url="/sessionTimeout" />

进入此配置文件时,当用户执行注销操作而不是显示登录页面时,会显示 sessionTimeout.html 视图,因为会话已过期或无效。

为什么我有这种奇怪的行为?这种行为的原因是什么?我该如何解决?

TNX

0 个答案:

没有答案