Java 在JSP中注销后保留会话属性
我正在为一个学校项目使用JSP和Spring创建一个网络商店。 该网站必须是可用的,没有连接(付款除外),所以我可以添加项目到我的购物车,即使我没有连接。 购物车中的项目保存为会话属性 我的问题是,当用户连接并且购物车中有项目时,如果他注销,所有会话属性都将被删除,因此购物车将被清除。对于拥有多个帐户(即专业帐户和私人帐户)并希望切换另一个帐户进行支付的用户来说,这是不实际的 有没有办法在注销后保留某个会话属性 以下是我在JSP页面中如何调用注销:Java 在JSP中注销后保留会话属性,java,jsp,session,spring-security,Java,Jsp,Session,Spring Security,我正在为一个学校项目使用JSP和Spring创建一个网络商店。 该网站必须是可用的,没有连接(付款除外),所以我可以添加项目到我的购物车,即使我没有连接。 购物车中的项目保存为会话属性 我的问题是,当用户连接并且购物车中有项目时,如果他注销,所有会话属性都将被删除,因此购物车将被清除。对于拥有多个帐户(即专业帐户和私人帐户)并希望切换另一个帐户进行支付的用户来说,这是不实际的 有没有办法在注销后保留某个会话属性 以下是我在JSP页面中如何调用注销: <a href="<sp
<a href="<spring:url value='/logout'/>">
<spring:message code='logout'/>
</a>
感谢您的帮助我找到了解决方案(就在我眼前):
在configure
函数中添加.invalidateHttpSession(false)
似乎就是我想要的
我的WebSecurityConfiguration.java
现在看起来是这样的:
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable();
http
.authorizeRequests()
.antMatchers(AUTHORIZED_REQUESTS_ADMIN).hasRole("ADMIN")
.antMatchers(AUTHORIZED_REQUESTS_ANYBODY).permitAll()
.antMatchers(STATIC_RESOURCES).permitAll()
.anyRequest().authenticated()
.and()
.formLogin() // We define the login part here.
.successHandler(new SavedRequestAwareAuthenticationSuccessHandler())
.loginPage(LOGIN_REQUEST)
.defaultSuccessUrl("/home")
.failureUrl("/error.jsp")
.permitAll()
.and()
.logout()
//.logoutUrl("")
.logoutSuccessUrl("/home")
.permitAll()
.invalidateHttpSession(false);
}
感谢您的帮助,伙计们您是否正在清除或重置任何文件中的
会话存储
?默认情况下,只要特定选项卡处于打开状态,该选项卡的会话
数据就不应清除。我对Spring Security
不太熟悉,但是http
上的logout
、authenticated
或重定向方法可能正在清除会话存储。在这些情况下,您应该使用客户端cookie。@是,注销方法是重置会话存储,我正在寻找一种方法来防止它。我找到了(简单,真丢脸)的解决办法,并在下面贴了一个答案。谢谢你的帮助!
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable();
http
.authorizeRequests()
.antMatchers(AUTHORIZED_REQUESTS_ADMIN).hasRole("ADMIN")
.antMatchers(AUTHORIZED_REQUESTS_ANYBODY).permitAll()
.antMatchers(STATIC_RESOURCES).permitAll()
.anyRequest().authenticated()
.and()
.formLogin() // We define the login part here.
.successHandler(new SavedRequestAwareAuthenticationSuccessHandler())
.loginPage(LOGIN_REQUEST)
.defaultSuccessUrl("/home")
.failureUrl("/error.jsp")
.permitAll()
.and()
.logout()
//.logoutUrl("")
.logoutSuccessUrl("/home")
.permitAll()
.invalidateHttpSession(false);
}