我正在使用Spring框架构建的Web应用程序。我收到Invalid CSRF Token
错误。我只在Chrome浏览器中看到此行为。以下是以下步骤:
Invalid CSRF Token 'd82dfa89-81b1-449e-9ef5-cdd32957e7f3' was found on the request parameter '_csrf' or header 'X-CSRF-TOKEN'.
Spring安全配置:
http.
addFilter(headerAdminFilter).
authorizeRequests().
regexMatchers("/login.*").permitAll().
regexMatchers("/api.*").fullyAuthenticated().
regexMatchers("/jolokia.*").hasRole(ADMINISTRATOR).
regexMatchers("/appadmin.*").hasRole(ADMINISTRATOR).
regexMatchers(".*").fullyAuthenticated().
and().
formLogin().loginPage("/login").successHandler(new RedirectingAuthenticationSuccessHandler()).
and().
exceptionHandling().authenticationEntryPoint(new RestAwareAuthenticationEntryPoint("/login"));
退出按钮的HTML代码:
<a id="logout-button" ng-click="ac.logout()" href="/login">Log Out</a>
用于退出功能的AngularJS代码:
this.logout = function () {
$http.post("/logout");
}
答案 0 :(得分:0)
以下javascript代码段修复过时的CSRF令牌。当用户尝试提交登录表单并在表单实际提交之前更新表单中的CSRF值时,我们的想法是获取一个新的令牌。
$(document).ready(function() {
$("form[method=post]").submit(function(event) {
var form = this;
$.get("csrf-token", function(content) {
$(form).find("input[name=_csrf]").val(content);
form.submit();
});
event.preventDefault();
});
});
您需要在服务器端使用/csrf-token
映射来返回当前的CSRF令牌。