CROS实现跨域时授权问题(401错误)的解决

更新时间:2023-06-22 06:49:18 阅读: 评论:0

CROS实现跨域时授权问题(401错误)的解决长隆海洋王国攻略
如果我们访问的资源是不需要授权的,也就是在HTTP请求头中不包含 authentication 头那么以上做法就⾜够了。但是如果该资源是需要权限验证的,那么这个时候跨域请求的预检测option 请求,由于不会携带⾝份信息⽽被拒绝。浏览器会报出401错误。
前⼏天的⽂章中提到了如何解决跨域问题的基本思路,解决了跨域请求时浏览器403错误。
Respon to preflight request doesn't pass access control check:
No 'Access-Control-Allow-Origin' header is prent on the requested resource.
Origin 'null' is therefore not allowed access.
The respon had HTTP status code 403
401错误信息如下:
Failed to load resource:
the rver responded with a status of 401 (Unauthorized)竞选副班长演讲稿
XMLHttpRequest cannot load localhost/api/test.
Respon for preflight has invalid HTTP status code 401
既然知道了问题的原因,答案也就很容易得出:对需要进⾏跨域请求的资源(api),当服务端检测到是 OPTONS 请求时候统统放⾏,给出HTTP.OK(200)的状态和必要的响应头,哪怕它是不带⾝份信息的。
这个问题既可以通过编写对应的后端代码实现,也可以通过设置服务器配置⽂件实现。也就是如何设置响应头和返回200状态码的办法了。
Spring+Shrio的解决⽅案幼儿园综合素质
shiro中可以在⾃⼰实现的⾝份验证filter中加⼊以下代码:
@Override
protected boolean preHandle(ServletRequest rvletRequest, ServletRespon rvletRespon) throws Exception {
HttpServletRequest request = (HttpServletRequest) rvletRequest;
HttpServletRespon respon = (HttpServletRespon) rvletRespon;
Method().equals(RequestMethod.OPTIONS.name()))
{
respon.tStatus(HttpStatus.OK.value());
return fal;
}
return super.preHandle(request, respon);
}
shiro中AccessControlFilter提供了访问控制的基础功能;⽐如是否允许访问/当访问拒绝时如何处理等,也是我们⼀般⾃定义权限验证时候的⼀个⽗类,我们通过重写他的 onPreHandle ⽅法判断是否是 option 请求,如果是则设置相应状态,(响应头已经在之前⽂章中通过filter配置过了)返回fal表⽰该拦截器实例已经处理了,将直接返回即可。
Tomcat配置
需要修改tomcat的全局l⽂件在 CATALINA_HOME/conf 下,加⼊以下配置。
<filter>
<filter-name>CorsFilter</filter-name>
<filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CorsFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Nginx配置
add_header 'Access-Control-Allow-Methods' 'GET,OPTIONS,PUT,DELETE' always;
add_header 'Access-Control-Allow-Credentials' 'true' always;
add_header 'Access-Control-Allow-Origin' '$http_origin' always;
add_header 'Access-Control-Allow-Headers' 'Authorization,DNT,Ur-Agent,Keep-Alive,Content-Type,accept,origin,X-Requested-With' always;
if ($request_method = OPTIONS ) {
return 200;
}
Apache配置
Header always t Access-Control-Allow-Origin "waffle"
Header always t Access-Control-Allow-Methods "POST, GET, OPTIONS"
老榕树
Header always t Access-Control-Allow-Credentials "true"
Header always t Access-Control-Allow-Headers "Authorization,DNT,Ur-Agent,Keep-Alive,Content-Type,accept,origin,X-Requested-With" RewriteCond %{REQUEST_METHOD} OPTIONS
RewriteRule ^(.*)$ $1 [R=200,L]登机行李箱尺寸
长痔疮怎么办js请求⽰例
请求时候需要加上 Authorization 和 Content-Type 头。
$http({
method: 'POST',获得成功的英语
url: scope.webdav.url,
withCredentials: true,
headers: {
Authorization: 'Basic ' + btoa(ur + ':' + password),
'Content-Type': 'le-earth.kml+xml; chart=utf-8'
},
data: getKml()
})
非常霸气的高三励志语

本文发布于:2023-06-22 06:49:18,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/1011589.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:请求   跨域   需要
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图