Skip to content

Latest commit

 

History

History
75 lines (55 loc) · 2.19 KB

File metadata and controls

75 lines (55 loc) · 2.19 KB

Spring Security 退出登录

Spring Security 默认的退出登录 URL 为/logout,退出登录后,Spring Security 会做如下处理:

  • 使当前的 Sesion 失效;

  • 清除与当前用户关联的 RememberMe 记录;

  • 清空当前的 SecurityContext;

  • 重定向到登录页。

Spring Security 允许我们通过配置来更改上面这些默认行为。

自定义退出登录行为

我们在 Spring Security 配置中添加如下配置:

......
.and()
.logout()
.logoutUrl("/signout")
.logoutSuccessUrl("/signout/success")
.deleteCookies("JSESSIONID")
.and()
......

上面配置了退出登录的 URL 为/signout,退出成功后跳转的 URL 为/signout/success,退出成功后删除名称为 JSESSIONID 的 cookie。

在 Controller 中添加和/signout/success 对应的方法:

@GetMapping("/signout/success")
public String signout() {
return "退出成功,请重新登录";
}

接着将/signout/success 添加到免认证路径里。启动项目,登录后访问/signout

QQ 截图 20190618151054.png

可看到退出成功,并且请求重定向到了/signout/success。

除了指定 logoutUrl 外,我们也可以通过 logoutSuccessHandler 指定退出成功处理器来处理退出成功后的逻辑:

@Autowired
private MyLogOutSuccessHandler logOutSuccessHandler;

......
.and()
.logout()
.logoutUrl("/signout")
// .logoutSuccessUrl("/signout/success")
.logoutSuccessHandler(logOutSuccessHandler)
.deleteCookies("JSESSIONID")
.and()
......
MyLogOutSuccessHandler 实现 LogoutSuccessHandler:

@Component
public class MyLogOutSuccessHandler implements LogoutSuccessHandler {
@Override
public void onLogoutSuccess(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Authentication authentication) throws IOException, ServletException {
httpServletResponse.setStatus(HttpStatus.UNAUTHORIZED.value());
httpServletResponse.setContentType("application/json;charset=utf-8");
httpServletResponse.getWriter().write("退出成功,请重新登录");
}
}

效果和上面一样:20190618151655.png