我是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