相关疑难解决方法(0)

OPTIONS请求身份验证

我正在开发一个Web应用程序.它使用基本身份验证.它必须处理OPTIONS请求.这些是Web浏览器预检请求以及来自WebDAV客户端的功能支持请求.

据我所知,OPTIONS请求必须在不请求身份验证的情况下处理(即我的服务器不应该响应401 Unauthorized),它必须给出如下响应:

OPTIONS https://localhost:44305/path/file.ext HTTP/1.1
Connection: Keep-Alive
User-Agent: some app
Host: localhost:44305

HTTP/1.1 200 OK
Content-Length: 0
DAV: 1, 2, 3
Date: Fri, 27 Dec 2013 17:10:21 GMT
Run Code Online (Sandbox Code Playgroud)

我的问题是:我是否应该始终对OPTIONS请求提供相同的响应,无论URL是什么,还是应该依赖于URL.

例如,如果找不到上例中的file.ext,我应该回复'404 Not found'还是'200 OK'?

http file-not-found http-options-method preflight

11
推荐指数
1
解决办法
1万
查看次数

HTTP状态代码401,即使我正在发送授权请求标头

最近我在我的Springboot和基于Angualr2的应用程序中引入了JWT身份验证.在那里我尝试通过在我的Angualr代码中传递如下的JWT令牌来执行POST请求

save(jobId: number, taskId: number, note: Note) {

   return this.http.post(environment.APIENDPOINT + '/jobs/' + jobId + '/tasks/' + taskId + '/notes', note, this.setHeaders()).map((response: Response) => response.json());

}
Run Code Online (Sandbox Code Playgroud)

private setHeaders() {
        // create authorization header with jwt token
        let currentUser = JSON.parse(localStorage.getItem('currentUser'));
        console.log("Current token---"+ currentUser.token);
        if (currentUser && currentUser.token) {

  let headers = new Headers();
  headers.append('Content-Type', 'application/json');
  headers.append('authorization','Bearer '+ currentUser.token);
            
   let r = new RequestOptions({ headers: headers })
   return r;

        }
    }
Run Code Online (Sandbox Code Playgroud)

但是在服务器端它返回状态代码401.问题是在Springboot端它检查授权头如下,它返回null

String authToken = request.getHeader("authorization ");
Run Code Online (Sandbox Code Playgroud)

然后,我查看了请求标头,并在Access-Control-Request-Headers下具有授权标头,如下所示.但它对服务器端是不可见的.

在此输入图像描述

然后我进一步阅读并发现这可能是CORS配置的问题.所以我修改了我的CORS配置过滤器以使addExposedHeader如下所示

@Bean
public …
Run Code Online (Sandbox Code Playgroud)

javascript httprequest cors spring-boot angular

5
推荐指数
1
解决办法
6521
查看次数