java允许跨域的代码
时间: 2025-03-31 16:13:00 浏览: 22
<think>好的,我现在需要帮助用户找到Java中实现跨域请求的代码示例,特别是关于CORS的。首先,我要回忆一下用户提到的引用内容。用户提供了四个引用,其中引用1和2提到了设置响应头信息,比如Access-Control-Allow-Origin。引用3和4则提到了使用CORS过滤器或Spring的@CrossOrigin注解,特别是在方法上添加注解的例子。
接下来,我需要确定用户的需求。他们想要具体的代码示例来实现CORS。根据引用,有两种主要方法:一种是手动设置响应头,另一种是使用框架提供的注解或过滤器。对于手动设置,可能需要用到过滤器或者拦截器,在每次请求时添加必要的头信息。而使用Spring框架的话,@CrossOrigin注解或者全局配置会更方便。
然后,我需要确保提供的代码示例正确,并且符合Java的最佳实践。比如,在Spring Boot中,使用@CrossOrigin注解在控制器类或方法上,或者通过WebMvcConfigurer配置全局CORS设置。另外,如果用户使用的是Servlet过滤器,可能需要编写一个自定义的Filter类,并在web.xml或通过注解注册它。
还要注意安全性问题,比如不要将Access-Control-Allow-Origin设置为“*”在生产环境中,而是指定具体的域名。同时,其他相关的头信息如Access-Control-Allow-Methods和Access-Control-Allow-Headers也需要正确设置,以允许特定的HTTP方法和头部。
最后,根据用户提供的引用,特别是引用4中的例子,使用@CrossOrigin注解是一个直接的方法,所以应该优先展示这个方法。同时,全局配置和过滤器的示例也需要包括,以满足不同场景的需求。确保代码示例正确,并解释每个部分的作用,帮助用户理解如何实现。</think>在Java中实现跨域请求(CORS)的代码示例如下,根据具体场景可选择不同方式:
---
### 1. **使用`@CrossOrigin`注解(Spring框架)**
在控制器类或方法上直接添加注解,指定允许跨域的来源:
```java
@RestController
public class DemoController {
@CrossOrigin(origins = "http://example.com") // 允许指定来源
@GetMapping("/hello")
public String hello() {
return "Hello, CORS!";
}
}
```
此方式适用于方法级或类级粒度的跨域控制[^4]。
---
### 2. **全局配置(Spring Boot)**
通过实现`WebMvcConfigurer`接口配置全局跨域规则:
```java
@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("http://example.com", "http://localhost:8080")
.allowedMethods("GET", "POST", "PUT", "DELETE")
.allowedHeaders("*")
.allowCredentials(true)
.maxAge(3600);
}
}
```
此配置对所有接口生效,支持多域名、指定方法和头部[^3]。
---
### 3. **手动设置响应头(Servlet过滤器)**
通过自定义过滤器添加CORS头信息:
```java
@WebFilter("/*")
public class CorsFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
HttpServletResponse httpResponse = (HttpServletResponse) response;
httpResponse.setHeader("Access-Control-Allow-Origin", "http://example.com");
httpResponse.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");
httpResponse.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization");
httpResponse.setHeader("Access-Control-Max-Age", "3600");
chain.doFilter(request, response);
}
}
```
此方式适用于非Spring项目或需要更灵活控制的场景[^1][^2]。
---
### 关键HTTP响应头说明
- `Access-Control-Allow-Origin`: 允许访问的来源(域名)
- `Access-Control-Allow-Methods`: 允许的HTTP方法
- `Access-Control-Allow-Headers`: 允许的请求头
- `Access-Control-Max-Age`: 预检请求缓存时间(秒)
---
阅读全文
相关推荐



















