9.4.4 退出

其实,按照我们的配置,退出功能已经启用了,不需要再做其他的配置了。我们需要的只是一个使用该功能的链接。

退出功能是通过 Servlet 容器中的Filter实现的(默认情况下),这个 Filter 会拦截针对 “/logout” 的请求。因此,为应用添加退出功能只需添加如下的链接即可(如下以 Thymeleaf 代码片段的形式进行了展现):

<a th:href="@{/logout}">Logout</a>

当用户点击这个链接的时候,会发起对 “/logout” 的请求,这个请求会被 Spring Security 的 LogoutFilter 所处理。用户会退出应用,所有的 Remember-me token 都会被清除掉。在退出完成后,用户浏览器将会 重定向到 “/login?logout”,从而允许用户进行再次登录。 如果你希望用户被重定向到其他的页面,如应用的首页,那么可以在 configure() 中进行如下的配置:

@override
protected void configure(HttpSecurity http) throws Exception {
  http
    .formLogin()
    .loginPage("/login");
    .and()
    .logout()
    .logoutSuccessUrl("/")
    ...
}

在这里,和前面一样,通过 add() 连接起了对 logout() 的调 用。logout() 提供了配置退出行为的方法。在本例中,调用 logoutSuccessUrl() 表明在退出成功之后,浏览器需要重定向到 “/”。

除了 logoutSuccessUrl() 方法以外,你可能还希望重写默认的 LogoutFilter 拦截路径。我们可以通过调用 logoutUrl() 方法实现这一功能:

.logout()
.logoutSuccessUrl("/")
.logoutUrl("/signout");

到目前为止,我们已经看到了如何在发起请求的时候保护 Web 应用。这假设安全性主要涉及阻止用户访问没有权限的 URL。但是,如果我们能够不给用户显示其无权访问的连接,那么这也是一个很好的思路。接下来,我们将会看一下如何添加视图级别的安全性。

Last updated