根据官方示例(Secure Web Content),我必须使用表单和按钮,目的是使用Spring Security执行注销。 有没有办法使用Thymeleaf的链接而不是按钮?
答案 0 :(得分:19)
您必须使用表单进行注销。如果您真的想要一个链接,可以使用JavaScript让链接在隐藏表单上执行POST。
<a href="javascript: document.logoutForm.submit()" role="menuitem"> Logout</a>
<form name="logoutForm" th:action="@{/logout}" method="post" th:hidden="true">
<input hidden type="submit" value="Sign Out"/>
</form>
答案 1 :(得分:15)
我已成功使用<a th:href="@{/logout}">Logout</a>
我使用的相关Spring Security配置是
http
.formLogin()
.loginPage("/login")
.permitAll()
.and()
.logout()
.logoutUrl("/logout")
.logoutSuccessUrl("/login");
答案 2 :(得分:8)
关于这个问题的上下文,我认为vdenotaris想要一个链接而不是注销功能的提交按钮。好吧,我认为你能做的就是创建一个这样的超链接:
<a href="#" th:href="@{/logout}">Log Out</a>
现在创建一个带有以下映射的控制器:
@RequestMapping(value="/logout", method = RequestMethod.GET)
public String logoutPage (HttpServletRequest request, HttpServletResponse response) {
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
if (auth != null){
new SecurityContextLogoutHandler().logout(request, response, auth);
}
return "redirect:/login?logout";
}
答案 3 :(得分:7)
解决方案(已弃用!)是:
.logout()
.logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
.logoutSuccessUrl("/login");
如上所述,建议使用POST而不是GET请求来保证安全性。
答案 4 :(得分:6)
这是正确的答案。
<form th:action="@{/logout}" method="post">
<input type="submit">POST LOGOUT</input>
</form>
答案 5 :(得分:2)
“为了帮助防止CSRF攻击,默认情况下,Spring Security Xml配置注销需要:
Hello Spring Security Xml Config
IActionResult