Invalid CSRF Token 'null' was found on the request parameter '_csrf' or header '

 

错误现象:

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请求(而非第三方攻击)。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

猜你喜欢

转载自huangqiqing123.iteye.com/blog/2415355