在jsp中注销后保留会话属性

z9smfwbn  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(315)

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

<a href="<spring:url value='/logout'/>">
   <spring:message code='logout'/>
</a>

这是SpringSecurity的默认调用。
这是我的安全配置( 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();
    }

谢谢你的帮助

kb5ga3dv

kb5ga3dv1#

我找到了一个解决办法(就在我眼皮底下):加上 .invalidateHttpSession(false)configure 功能似乎是我想要的。
我的 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);
    }

谢谢你们的帮助

相关问题