3 回答
TA贡献1890条经验 获得超9个赞
在SecurityContextLogoutHandler默认情况下添加,所以你并不需要实现自定义注销它。
如果你想添加其他LogoutHandler你可以在你的配置中做到:
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/cont/**").access("hasRole('USER')")
.and()
.formLogin()
.loginPage("/login")
.defaultSuccessUrl("/login-success", true)
.failureUrl("/failLogin.html")
.permitAll()
.and()
.logout().logoutUrl("/logout-custom")
.logoutSuccessUrl("/login")
.addLogoutHandler(new CustomLogoutHandler())
.permitAll()
.and()
.csrf()
.disable();
}
logoutSuccessUrl("/login")成功注销后,将用户重定向到登录。
更新:另外删除 th: 并使用纯 HTML 可以解决问题。
TA贡献2037条经验 获得超6个赞
自从我使用 spring 和 thymeleaf 已经有一段时间了,但我认为 RedirectView 必须指向一个 url。我自己试过你的例子,它确实没有用。然而,一些细微的变化使它起作用:
如果您的控制器中尚不存在 url 以登录:
@GetMapping("/loginForm")
public String loginForm() {
return "loginForm";
}
更改您的重定向视图:
return new RedirectView("/loginForm");
这是资源结构:
resources
-> templates
-> loginForm.html
-> logout.html
TA贡献1795条经验 获得超7个赞
为什么使用 .logout().logoutUrl("/logout").permitAll()
同时,使用@RequestMapping(value="/logout-custom", method = RequestMethod.POST),它们应该是相同的 URL
或者让它变得简单
<form th:action="@{/logout}" method="post">
<button type="submit">Sign Out</button>
</form>
并在安全配置上使用。
.logout().permitAll();
默认情况下,注销功能已经存在。
添加回答
举报