错误现象:
spring-boot、spring-security,keycloak集成,调用get请求正常,调用post请求出错:
{
"timestamp": 1522722909520,
"status": 403,
"error": "Forbidden",
"message": "Invalid CSRF Token 'null' was found on the request parameter '_csrf' or header 'X-CSRF-TOKEN'.",
"path": "/app2/products-post"
}
解决办法(禁用csrf检查):
@Override
protected void configure(HttpSecurity http) throws Exception {
//访问控制内容。。。。。
http.csrf().disable();
}
更多参考:
https://docs.spring.io/spring-security/site/docs/current/reference/htmlsingle/#csrf
关于错误
错误指出,
请求中出现了不可用的CSRF令牌。
这是一个RESTful技术与CSRF(Cross-site request forgery跨站请求伪造)的冲突造成的
CSRF protection is enabled by default with Java Configuration.
spring security为了正确的区别合法的post/put/delete请求,采用了token的机制。
过程大致为:
先通过get请求从服务器端拿到一个token,
发送post请求时,这个token被当做header参数传递至服务器。
服务器通过区分这个token值是否合法来判定是否是正常的post/put/delete请求(而非第三方攻击)。