gpt4 book ai didi

spring - CORS 预检请求 - header 中的自定义身份验证 token - Spring 和 Angular 4

转载 作者:行者123 更新时间:2023-12-04 03:08:11 24 4
gpt4 key购买 nike

我在本地服务器上使用 token 作为 header 请求简单的 GET 时遇到问题。我的浏览器不断根据简单的 GET 请求发送预检请求。

我尝试使用 postman/curl,但没有任何问题。

这是实际的代码:服务器( Spring ):

@Override
public void doFilter(final ServletRequest req, final ServletResponse res,
final FilterChain chain) throws IOException, ServletException {
final HttpServletResponse response = (HttpServletResponse) res;
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods",
"POST, GET, PUT, OPTIONS, DELETE, PATCH");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "x-requested-with, x-auth-token, Content-Type");
response.setHeader("Access-Control-Expose-Headers", "x-auth-token");
response.setHeader("Access-Control-Allow-Credentials", "true");

final HttpServletRequest request = (HttpServletRequest) req;

if (request.getMethod().equals("OPTIONS")) {
try {
response.getWriter().print("OK");
response.getWriter().flush();
} catch (IOException e) {
e.printStackTrace();
}
} else {
chain.doFilter(request, response);
}
}

所以我的 x-auth-token 是一个类似 jwt 的 token 。

在我的 Angular 代码中,我只是将我的 token 添加为 x-auth-token,如下所示:

getAll() {
return this.http.get('http://127.0.0.1:8080/module', this.jwt()).map((response: Response) => response.json());
}

private jwt() {
// create authorization header with jwt token
let token = localStorage.getItem('user');
let obj = JSON.parse(token)
console.log(obj.token.token)
if (obj.token) {
let headers = new Headers({
'x-auth-token': obj.token.token,
'Content-Type': "application/json"
});
return new RequestOptions({ headers: headers });
}
}

请注意,我的身份验证/注册路由工作正常,我只是在将我的 x-auth-token header 传送到我的 Spring 服务器时遇到了问题。

我的两个网络服务器都在本地运行:8080 上的 Spring 和 8000 上的 Angular。

如有任何帮助,我们将不胜感激

谢谢,

最佳答案

首先,postman 和 curl 不是测试 CORS 的好方法,因为它们不像标准浏览器那样强制执行同源策略。即使在浏览器中失败的情况下,它们也能正常工作。

其次,您的请求被浏览器预检的原因是它不是 simple request。 ,因为 x-auth-token header 和 application/json Content-Type。只有 application/x-www-form-urlencoded简单请求中允许使用 multipart/form-datatext/plain 内容类型。

我假设问题出在 OPTION 响应中。确保它包含所有相关的 header 。它可能会失败,或者您丢失了添加的 header ,因为您处理它的方式与其他响应不同。

关于spring - CORS 预检请求 - header 中的自定义身份验证 token - Spring 和 Angular 4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47227540/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com