Spring安全性:删除cookie以进行注销

时间:2017-05-04 04:22:53

标签: java spring

我在Spring启动应用程序中使用以下安全配置:

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
        .csrf().disable()
        .authorizeRequests()
            .antMatchers("/login").permitAll()
        .and()
        .authorizeRequests()
            .antMatchers("/signup").permitAll()
        .and()
        .authorizeRequests()
            .anyRequest().authenticated()
        .and()
            .logout().logoutUrl("/logout").logoutSuccessUrl("/login").deleteCookies("auth_code").invalidateHttpSession(true)
        .and()
        // We filter the api/signup requests
        .addFilterBefore(
            new JWTSignupFilter("/signup", authenticationManager(),
                    accountRepository, passwordEncoder),
            UsernamePasswordAuthenticationFilter.class)
        // We filter the api/login requests
        .addFilterBefore(
            new JWTLoginFilter("/login", authenticationManager()),
            UsernamePasswordAuthenticationFilter.class)
        // And filter other requests to check the presence of JWT in
        // header
        .addFilterBefore(new JWTAuthenticationFilter(userDetailsServiceBean()),
            UsernamePasswordAuthenticationFilter.class);
} 

当我注销时,我想删除在登录期间设置的cookie。我使用deleteCookie,但在标题中没有删除登录期间设置的cookie的概念。为什么?

如何告诉浏览器删除cookie?

现在,响应的标题包含:

Set-Cookie →JSESSIONID=E4060381B435217F7D68EAAE82903BB0;path=/;Secure;HttpOnly

我应该将Cookie的过期时间设置为超过当前日期吗?

3 个答案:

答案 0 :(得分:2)

JSESSIONID

中添加.deleteCookies("auth_code", "JSESSIONID")
logout().logoutUrl("/logout").logoutSuccessUrl("/login").deleteCookies("auth_code", "JSESSIONID").invalidateHttpSession(true)

答案 1 :(得分:1)

您不需要删除Cookie。一旦会话在服务器上关闭,无论如何都不能使用cookie,如果该人返回,它将被替换。只是让它正常过期(默认情况下,当浏览器关闭时)。

答案 2 :(得分:0)

使用 Spring Security 删除 cookie 的方法有多种。

  1. 您可以在spring security配置方法中添加以下带有注销的方法。

    .logout()

用逗号(,)分隔的cookies删除列表的delete cookies方法

`.deleteCookies("JSESSIONID","remember-me")`

清除所有身份验证

`.clearAuthentication(true)`

然后使会话对象无效。

`.invalidateHttpSession(true)`
  1. 明确地使 cookie 过期并删除,并将其映射到 /logout 路径。

    @RequestMapping(path = "/logout", method = RequestMethod.GET)

private void removeCookies(HttpServletRequest request, HttpServletResponse response) {

 Cookie rememberMeCookie = new Cookie("remember-me", "");

 rememberMeCookie.setMaxAge(0);

 response.addCookie(rememberMeCookie);

 securityService.logoutCurrentUser();
    }

参考:https://www.baeldung.com/java-servlet-cookies-session