Java 解决端口跨域
时间: 2023-09-02 22:12:18 浏览: 137
Java 中解决端口跨域问题,可以通过配置 Filter 或者使用 Spring 框架提供的 @CrossOrigin 注解来实现。
一、使用 Filter
可以在 web.xml 文件中配置一个 Filter,该 Filter 可以对所有请求进行拦截,并在请求头中添加 Access-Control-Allow-Origin 字段,来解决跨域问题。
具体实现代码如下:
```java
public class CorsFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {}
@Override
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", "Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");
chain.doFilter(req, res);
}
@Override
public void destroy() {}
}
```
其中,Access-Control-Allow-Origin 字段表示允许跨域访问的域名,* 表示允许所有域名访问;Access-Control-Allow-Methods 字段表示允许的请求方法;Access-Control-Max-Age 字段表示预检请求的有效期;Access-Control-Allow-Headers 字段表示允许的请求头字段。
在 web.xml 文件中配置 Filter 如下:
```xml
<filter>
<filter-name>CorsFilter</filter-name>
<filter-class>com.example.CorsFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CorsFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
```
二、使用 Spring 框架提供的 @CrossOrigin 注解
对于使用 Spring 框架开发的项目,可以在 Controller 层的方法上使用 @CrossOrigin 注解来解决跨域问题。
具体实现代码如下:
```java
@RestController
@RequestMapping("/api")
@CrossOrigin(origins = "*", maxAge = 3600)
public class ApiController {
@GetMapping("/hello")
public String hello() {
return "Hello World!";
}
}
```
其中,@CrossOrigin 注解中的 origins 表示允许跨域访问的域名,* 表示允许所有域名访问;maxAge 表示预检请求的有效期。
阅读全文