Java 在JSP中注销后保留会话属性

Java 在JSP中注销后保留会话属性,java,jsp,session,spring-security,Java,Jsp,Session,Spring Security,我正在为一个学校项目使用JSP和Spring创建一个网络商店。 该网站必须是可用的,没有连接(付款除外),所以我可以添加项目到我的购物车,即使我没有连接。 购物车中的项目保存为会话属性 我的问题是,当用户连接并且购物车中有项目时,如果他注销,所有会话属性都将被删除,因此购物车将被清除。对于拥有多个帐户(即专业帐户和私人帐户)并希望切换另一个帐户进行支付的用户来说,这是不实际的 有没有办法在注销后保留某个会话属性 以下是我在JSP页面中如何调用注销: <a href="<sp

我正在为一个学校项目使用JSP和Spring创建一个网络商店。 该网站必须是可用的,没有连接(付款除外),所以我可以添加项目到我的购物车,即使我没有连接。 购物车中的项目保存为会话属性

我的问题是,当用户连接并且购物车中有项目时,如果他注销,所有会话属性都将被删除,因此购物车将被清除。对于拥有多个帐户(即专业帐户和私人帐户)并希望切换另一个帐户进行支付的用户来说,这是不实际的

有没有办法在注销后保留某个会话属性

以下是我在JSP页面中如何调用注销:

<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);
    }