Spring Security的退出功能由LogoutFilter过滤器实现,只需要一段简单的配置就可以在项目中实现退出功能,如下示
<logout logout-url="/logout" logout-success-url="/login"/>
1.logout-url表示退出的URL地址
2.logout-success-url表示退出成功后应该转向的URL地址,默认实现类是根据这个URL构造一个SimpleUrlLogoutSuccessHandler类
根据这段配置Spring Security会生成一个LogoutFilter,并将设置的属性相应的注入LogoutFilter中,LogoutFitler中还包括一个LogoutHandler的列表,每个实现LogoutHandler接口的类都表示需要在退出时完成的事情,诸如清除记录自动登录凭证相关信息的Cookie,致Session无效,清除持久化存储中记录的自动登录凭证相关数据,前提是你使用的持久化存储来保存自动登录凭证相关数据的。
如果配置logout-success-url无法满足需求,希望能再做点其它事情,还可以实现LogoutSuccessHandler,用来处理特定的退出成功后希望完成的事情。这里的需求因为是多种类型的用户登录,所以针对每个不同类型的用户退出操作也各有不同,后台登录用户退出应该转向后台登录界面,前台登录用户退出应该转向前台登录界面,所以我编写了一个特定的实现LogoutSuccessHandler的MultipleLogoutSuccessHandler,判断的依据主要是根据AuthenticationToken的类型来的,记得前面讲过针对后台登录使用的是BackendAuthenticationToken,前台登录使用的是ForendAuthenticationToken,所以这里就可以根据不同的AuthenticationToken来实现不同的退出成功转向的操作。