Skip to content

Commit 94d3138

Browse files
committed
CROS实现跨域时授权问题
1 parent 4cb6d5e commit 94d3138

1 file changed

Lines changed: 7 additions & 7 deletions

File tree

CROS/README.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
##CROS实现跨域时授权问题
1+
## CROS实现跨域时授权问题
22

33
Response to preflight request doesn't pass access control check:
44
No 'Access-Control-Allow-Origin' header is present on the requested resource.
55
Origin 'null' is therefore not allowed access. The response had HTTP status code 403
66

7-
###问题的提出
7+
### 问题的提出
88
如果我们访问的资源是不需要授权的,也就是在HTTP请求头中不包含authentication头那么以上做法就足够了。但是如果该资源是需要权限验证的,那么这个时候跨域请求的预检测option请求,由于不会携带身份信息而被拒绝。浏览器会报出401错误。错误信息如下:
99

1010
Failed to load resource:
@@ -15,7 +15,7 @@
1515
既然知道了问题的原因,答案也就很容易得出:对需要进行跨域请求的资源(api),当服务端检测到是OPTONS请求时候统统放行,给出HTTP.OK(200)的状态和必要的响应头,哪怕它是不带身份信息的。
1616
这个问题既可以通过编写对应的后端代码实现,也可以通过设置服务器配置文件实现。也就是如何设置响应头和返回200状态码的办法了。
1717

18-
###Spring+Shrio的解决方案
18+
### Spring+Shrio的解决方案
1919
shiro中可以在自己实现的身份验证filter中加入以下代码:
2020

2121
```Java
@@ -24,7 +24,7 @@ shiro中可以在自己实现的身份验证filter中加入以下代码:
2424

2525
shiro中AccessControlFilter提供了访问控制的基础功能;比如是否允许访问/当访问拒绝时如何处理等,也是我们一般自定义权限验证时候的一个父类,我们通过重写他的onPreHandle方法判断是否是option请求,如果是则设置相应状态,(响应头已经在之前文章中通过filter配置过了)返回false表示该拦截器实例已经处理了,将直接返回即可。
2626

27-
###Tomcat配置
27+
### Tomcat配置
2828
需要修改tomcat的全局web.xml文件在CATALINA_HOME/conf下,加入以下配置。
2929

3030
```Xml
@@ -38,7 +38,7 @@ shiro中AccessControlFilter提供了访问控制的基础功能;比如是否
3838
</filter-mapping>
3939
```
4040

41-
###Nginx配置
41+
### Nginx配置
4242

4343
add_header 'Access-Control-Allow-Methods' 'GET,OPTIONS,PUT,DELETE' always;
4444
add_header 'Access-Control-Allow-Credentials' 'true' always;
@@ -50,7 +50,7 @@ shiro中AccessControlFilter提供了访问控制的基础功能;比如是否
5050
return 200;
5151
}
5252

53-
###Apache配置
53+
### Apache配置
5454

5555
Header always set Access-Control-Allow-Origin "http://waffle"
5656
Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS"
@@ -60,7 +60,7 @@ shiro中AccessControlFilter提供了访问控制的基础功能;比如是否
6060
RewriteCond %{REQUEST_METHOD} OPTIONS
6161
RewriteRule ^(.*)$ $1 [R=200,L]
6262

63-
###js请求示例
63+
### js请求示例
6464
请求时候需要加上Authorization和Content-Type头。
6565

6666
$http({

0 commit comments

Comments
 (0)