当前位置: 代码迷 >> java >> 对一个 API 端点的请求导致 500 响应; 其他 API 端点工作
  详细解决方案

对一个 API 端点的请求导致 500 响应; 其他 API 端点工作

热度:51   发布时间:2023-07-27 09:40:56.0

我想接受来源为并且我在 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');
        });

}

当我发送请求时,它说

在“访问的XMLHttpRequest ”从原点“ ”已被封锁的CORS政策:否请求的资源上存在“Access-Control-Allow-Origin”标头。

但是来自“ ”的所有其他请求都正常工作。

有人可以指导我解决这个问题吗?

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));
}

更多

  相关解决方案