【发布时间】:2021-02-01 13:52:59
【问题描述】:
我用 java 和 spring boot 创建了一个 Rest API。
使用javax.servlet.annotation.WebFilter 来检查身份验证。它工作正常,但面临
Access to XMLHttpRequest at 'http://localhost:8080/api/' from origin 'null' has been blocked by CORS policy
问题所以我在我的@RestController class 中使用@CrossOrigin(origins = "*")
当我尝试从我的前端应用程序访问我的 rest api 时,它在浏览器控制台中显示 CROS policy 错误并在服务器控制台中显示 401 错误。
当我删除 @WebFilter 注释时,CROS 原点工作正常。
我该如何解决这个问题。
我的代码
春季启动版
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.2.5.RELEASE</version>
</dependency>
Controller.java
@RestController
@CrossOrigin(origins = "*")
@RequestMapping(value = "api")
public class Controller {
}
Application.java
@SpringBootApplication
@ServletComponentScan
public class Application extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
}
LoginHandleFilter.java
@WebFilter(description = "登录和编码过滤器", urlPatterns = {"/api/*"}) 公共类 LoginHandleFilter 实现过滤器 {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
String token = request.getHeader("Authorization");
if(isAuthenticate(token)){
chain.doFilter(request, response);
}else{
response.sendError(401);
}
}
@Override
public void destroy() {
}
private boolean isAuthenticate(String token){
return token.equals("Mytoken");
}
}
javascript
var http = new XMLHttpRequest():
http.open("GET", "http://localhost:8080/api/", true);
http.setRequestHeader("Authorization", "TOKEN");
http.onreadystatechange = function(){
}
http.send();
我错过了什么吗?
【问题讨论】:
-
我相信这个问题已经得到解答。你可以在这里查看stackoverflow.com/questions/56946280/…
-
@kulsin 谢谢你,但还是没用。
-
在这个答案中检查我的配置:stackoverflow.com/a/63292799/13039704
标签: java spring-boot