Emm*_*las 5 java ajax spring-security cors
我按照本指南来实现带有 spring-security 的 api。它在本地运行良好,但是当我将它部署在远程服务器上时,由于 cors 策略(服务器:80 尝试访问服务器:8080),无法访问登录端点。
我添加了 cors 过滤器来处理它,但似乎登录方法(可能还有受保护的方法,因为我无法登录而无法对其进行测试)没有使用我的自定义过滤器。未登录用户可用的端点运行良好
请求已预检,但服务器未在远程服务器上添加正确的标头。
首先,这是在到达公共端点之前对预检请求的请求和响应
要求:
Host: 01.02.03.04:8080
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Access-Control-Request-Method: GET
Access-Control-Request-Headers: x-requested-with
Origin: http://01.02.03.04
Connection: keep-alive
Cache-Control: max-age=0
Run Code Online (Sandbox Code Playgroud)
回复:
Access-Control-Allow-Methods: GET,HEAD,POST
Access-Control-Allow-Origin: http://01.02.03.04
Access-Control-Max-Age: 1800
Allow: GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS, PATCH
Content-Length: 0
Date: Mon, 10 Jul 2017 10:40:32 GMT
Vary: Origin
access-control-allow-credentials: true
access-control-allow-headers: x-requested-with
Run Code Online (Sandbox Code Playgroud)
这是到达登录端点之前预检请求的请求和响应:
要求 :
Host: 01.02.03.04:8080
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Access-Control-Request-Method: POST
Access-Control-Request-Headers: content-type,x-requested-with
Origin: http://01.02.03.04
Connection: keep-alive
Run Code Online (Sandbox Code Playgroud)
回复 :
Allow: GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS, PATCH
Content-Length: 20
Date: Mon, 10 Jul 2017 11:18:40 GMT
Run Code Online (Sandbox Code Playgroud)
我们很容易看到,当尝试访问 /login 时,服务器没有正确回答。
这是访问 /login 的 ajax 测试:
Host: 01.02.03.04:8080
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Access-Control-Request-Method: GET
Access-Control-Request-Headers: x-requested-with
Origin: http://01.02.03.04
Connection: keep-alive
Cache-Control: max-age=0
Run Code Online (Sandbox Code Playgroud)
这是 WebSecurityConfigurerAdapter 配置方法:
Access-Control-Allow-Methods: GET,HEAD,POST
Access-Control-Allow-Origin: http://01.02.03.04
Access-Control-Max-Age: 1800
Allow: GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS, PATCH
Content-Length: 0
Date: Mon, 10 Jul 2017 10:40:32 GMT
Vary: Origin
access-control-allow-credentials: true
access-control-allow-headers: x-requested-with
Run Code Online (Sandbox Code Playgroud)
这是自定义 cors 过滤器:
Host: 01.02.03.04:8080
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Access-Control-Request-Method: POST
Access-Control-Request-Headers: content-type,x-requested-with
Origin: http://01.02.03.04
Connection: keep-alive
Run Code Online (Sandbox Code Playgroud)
谢谢您的回答,
伊曼纽尔
| 归档时间: |
|
| 查看次数: |
564 次 |
| 最近记录: |