在Java中实现跨域(Cross-Origin Resource Sharing, CORS)

发布时间 2023-11-15 16:26:25作者: 花花java大师

在Java中实现跨域(Cross-Origin Resource Sharing, CORS)主要涉及到在服务器端设置HTTP响应头,以允许来自不同源的客户端请求。下面是一些常用的方法来实现跨域:

1. Servlet过滤器

你可以创建一个过滤器(Filter)来添加必要的HTTP头。这种方法适用于所有基于Servlet的应用程序,如纯Servlet应用、Spring MVC等。

import javax.servlet.*;

import javax.servlet.http.HttpServletResponse;

import java.io.IOException;

 

public class CORSFilter implements Filter {

public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {

HttpServletResponse response = (HttpServletResponse) res;

response.setHeader("Access-Control-Allow-Origin", "*");

response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");

response.setHeader("Access-Control-Max-Age", "3600");

response.setHeader("Access-Control-Allow-Headers", "x-requested-with, authorization");

 

chain.doFilter(req, res);

}

 

public void init(FilterConfig filterConfig) {}

 

public void destroy() {}

}

 

2. Spring Boot

如果你使用Spring Boot,可以通过配置来启用CORS。

  • 全局配置:在@Configuration类中使用WebMvcConfigurer。
  • import org.springframework.context.annotation.Bean;
  • import org.springframework.context.annotation.Configuration;
  • import org.springframework.web.servlet.config.annotation.CorsRegistry;
  • import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
  • @Configuration
  • public class WebConfig {
  • @Bean
  • public WebMvcConfigurer corsConfigurer() {
  • return new WebMvcConfigurer() {
  • @Override
  • public void addCorsMappings(CorsRegistry registry) {
  • registry.addMapping("/**")
  • .allowedOrigins("*")
  • .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
  • .allowedHeaders("*")
  • .allowCredentials(true);
  • }
  • };
  • }
  • }
 
  • 方法级配置:在Spring MVC的控制器方法上使用@CrossOrigin。
  • import org.springframework.web.bind.annotation.CrossOrigin;
  • import org.springframework.web.bind.annotation.GetMapping;
  • import org.springframework.web.bind.annotation.RestController;
  • @RestController
  • public class MyController {
  • @CrossOrigin(origins = "*")
  • @GetMapping("/myEndpoint")
  • public String myMethod() {
  • return "Hello";
  • }
  • }
 

3. Java EE (JAX-RS)

在Java EE环境下,如果使用JAX-RS(如Jersey或Resteasy),你可以在你的资源类或方法上使用@Cors注解。

import javax.ws.rs.GET;

import javax.ws.rs.Path;

import javax.ws.rs.core.Response;

 

@Path("/myResource")

public class MyResource {

 

@GET

public Response myMethod() {

return Response

.ok("Hello")

.header("Access-Control-Allow-Origin", "*")

.header("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS")

.build();

}

}

 

以上方法中,可以根据实际需求调整允许的源(Access-Control-Allow-Origin)、方法(Access-Control-Allow-Methods)和头(Access-Control-Allow-Headers)等。

作者:http://www.xkrj5.com 转载保留版权!