我正在使用Spring Boot和Spring Security编写一个Web项目。
我想以方法而不是网址/logout
注销。例如:一个控制器方法获取一个URL,然后这个方法做一些事情并注销。
我的Spring Security配置:
@Override
protected void configure(HttpSecurity httpSecurity) throws Exception {
httpSecurity
.authorizeRequests()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.failureUrl("/login?error").permitAll()
.and()
.logout().permitAll();
}
但我不知道如何使用某种方法退出。我应该在SecurityConfig.class
做什么?如果没有URL注销方法,我该怎么办?
答案 0 :(得分:0)
您可以在Controller内创建一个方法,并使用SecurityContextLogoutHandler类的方法注销来注销当前用户。
@RequestMapping(value="/custom-logout", method = RequestMethod.GET)
public String customLogout(HttpServletRequest request, HttpServletResponse response) {
// Get the Spring Authentication object of the current request.
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
// In case you are not filtering the users of this request url.
if (authentication != null){
new SecurityContextLogoutHandler().logout(request, response, authentication); // <= This is the call you are looking for.
}
return "redirect:/login-page";
}
答案 1 :(得分:-1)
.logout()
.logoutUrl("/logoutUrl")
.logoutSuccessUrl("/index.html?logout=true")
.logoutSuccessHandler(logoutHandler)
.invalidateHttpSession(true)
注销用户即清除SecurityContext,并在成功注销后重定向到页面index.html?logout = true。 您还可以定义实现LogoutHandler的LogoutSuccessHandler,并实现onLogoutSuccess()以为您的用例添加任何post logout逻辑。 Spring提供了很少的LogoutHandler实现,如SecurityContextLogoutHandler,SimpleUrlLogoutSuccessHandler等。在spring security docs中查看更多内容。 invalidateHttpSession(true)使您的httpsession无效。