1. 无法退出用户
- 问题:使用 Spring Security 自带的退出功能时,点击"/logout"链接后,浏览器报错"There was an unexpected error (type=Not Found, status=404).",Idea 控制台中显示"o.s.web.servlet.PageNotFound : No mapping for GET /logout"。
- 原因:从 Spring Security 3.2 开始,默认启用了 CSRF 防护。在启用了 CSRF 防护的 Spring 程序中退出用户,必须发起 POST 请求。
- 解法:在配置退出功能时,加入logoutRequestMatcher配置,退出功能配置如下:
.logout().logoutRequestMatcher(new AntPathRequestMatcher("/logout", "GET"))
。
2. Thymeleaf 中的链接如何拼接变量
- 问题:在使用 Thymeleaf 中的链接表达式 @{…} 时,有时需要拼接变量,比如将查询参数或路径参数设置为某变量值。
- 解法:将查询参数设置为变量值时,如下设置
@{/details(queryVar=${queryVar})}
,得到的相对 URL 为/details?queryVar=${queryVar}
;将路径参数设置为变量值时,如下设置@{/details/{queryVar}(queryVar=${queryVar})}
,得到的相对 URL 为/details/${queryVar}
。