我在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的过期时间设置为超过当前日期吗?
答案 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 的方法有多种。
您可以在spring security配置方法中添加以下带有注销的方法。
.logout()
用逗号(,)分隔的cookies删除列表的delete cookies方法
`.deleteCookies("JSESSIONID","remember-me")`
清除所有身份验证
`.clearAuthentication(true)`
然后使会话对象无效。
`.invalidateHttpSession(true)`
明确地使 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();
}