【问题标题】:Request to one API endpoint causes 500 response; other API endpoints work对一个 API 端点的请求会导致 500 响应;其他 API 端点工作
【发布时间】:2019-02-13 06:58:16
【问题描述】:

我想接受 http://192.168.1.35:4200 的来源,我在 springboot 中创建了这样的 CORSFilter:

@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
public class CORSFilter implements Filter {

public CORSFilter() {
}

@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
    HttpServletResponse response = (HttpServletResponse) res;
    HttpServletRequest request = (HttpServletRequest) req;
    response.setHeader("Access-Control-Allow-Origin", "http://192.168.1.35:4200");
    response.setHeader("Access-Control-Allow-Credentials", "true");
    response.setHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS, PATCH, DELETE");
    response.setHeader("Access-Control-Max-Age", "3600");
    response.setHeader("Access-Control-Allow-Headers", "X-Requested-With, Authorization, X-Auth-Token, Origin, Content-Type, Accept, Auth_Token");

    if ("OPTIONS".equalsIgnoreCase(request.getMethod())) {
        response.setStatus(HttpServletResponse.SC_OK);
    } else {
        chain.doFilter(req, res);
    }
}

@Override
public void init(FilterConfig filterConfig) {
}

@Override
public void destroy() {
}

}

我创建了这样的请求,从 angular 调用 spring rest api:

 getAllUsers(): void {
    this.accessToken = JSON.parse(window.sessionStorage.getItem('token')).access_token;
    this.httpClient.get<User[]>(`${BASE_URL}/fam-users/user?access_token=${this.accessToken}`, httpOptions).subscribe(data => {
        this.dataChange.next(data);
    },
        (err: ApiError) => {
            this.snackBar.openSnackBar(err.error.message, 'close', 'red-snackbar');
        });

}

当我发送请求时,它说

从源“http://192.168.1.35:4200”访问“http://192.168.1.35:8080/fam-users/user?access_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1NTAwNDMwODMsInVzZXJfbmFtZSI6ImFkbWluIiwiYXV0aG9yaXRpZXMiOlsiRkFfQU1FTkQiLCJGQV9ORVciXSwianRpIjoiOWViMzZjNzAtOGUwOS00YzViLWI0OWQtNDNmZTRhOTkzNDgzIiwiY2xpZW50X2lkIjoiY2xpZW50Iiwic2NvcGUiOlsicmVhZCIsIndyaXRlIiwidHJ1c3QiXX0.IETZOJE8tIqNc249HmTcJHuZpZFY1TP4PLcbqUOF3qc”处的 XMLHttpRequest 已被 CORS 策略阻止:请求的资源上不存在“Access-Control-Allow-Origin”标头。

但来自“http://192.168.1.35:4200”的所有其他请求都可以正常工作。

谁能指导我解决这个问题?

【问题讨论】:

  • 收到该错误消息时响应的 HTTP 状态代码是什么?
  • @sideshowbarker 是 500
  • 所以是的,500 错误是您需要解决的问题。发生了一些内部服务器故障。检查服务器日志以查看那里记录了哪些消息,导致服务器响应该 500。
  • @sideshowbarker 服务端没有失败,一切顺利完成。

标签: java spring-boot


【解决方案1】:

spring boo中有@CrossOrigin注解,例如:

@CrossOrigin(origins = "http://localhost:9000")
@GetMapping("/greeting")
public Greeting greeting(@RequestParam(required=false, defaultValue="World") String name) {
    System.out.println("==== in greeting ====");
    return new Greeting(counter.incrementAndGet(), String.format(template, name));
}

更多信息请联系look

【讨论】:

    猜你喜欢
    • 2020-06-04
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    • 1970-01-01
    • 2018-12-14
    • 2022-01-24
    • 2022-01-17
    • 2020-04-18
    相关资源
    最近更新 更多