Java MVC 跨域配置

1. 概述

跨域资源共享(Cross-Origin Resource Sharing,简称CORS)是一种机制,它使用额外的HTTP头来告诉浏览器,当前请求的网页是否允许其他域的访问。在开发Java MVC应用程序时,我们经常需要配置跨域访问,以允许不同域的客户端请求访问服务器端的资源。

下面是实现Java MVC跨域配置的步骤:

步骤 操作
1 创建一个Filter用于处理跨域请求
2 配置Filter的映射和初始化参数
3 在Web.xml中注册Filter
4 测试跨域请求

2. 创建Filter

首先,我们需要创建一个名为CorsFilter的Filter,用于处理跨域请求。该Filter需要实现javax.servlet.Filter接口,并实现其doFilter方法。

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class CorsFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        // 初始化方法,可以在这里设置一些参数
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
            throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;

        // 允许的跨域请求来源
        response.setHeader("Access-Control-Allow-Origin", "*");
        // 允许的跨域请求方法
        response.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");
        // 允许的跨域请求头
        response.setHeader("Access-Control-Allow-Headers", "Content-Type");

        filterChain.doFilter(request, response);
    }

    @Override
    public void destroy() {
        // 销毁方法,可以在这里释放资源
    }
}

3. 配置Filter映射和初始化参数

在Filter中,我们需要配置一些初始化参数来自定义跨域请求的行为。为了方便配置和修改,可以将这些参数配置在web.xml文件中。

在web.xml文件中添加以下配置:

<filter>
    <filter-name>CorsFilter</filter-name>
    <filter-class>com.example.CorsFilter</filter-class>
    <init-param>
        <param-name>allowedOrigins</param-name>
        <param-value>*</param-value>
    </init-param>
    <init-param>
        <param-name>allowedMethods</param-name>
        <param-value>GET, POST, PUT, DELETE</param-value>
    </init-param>
    <init-param>
        <param-name>allowedHeaders</param-name>
        <param-value>Content-Type</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>CorsFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

上述配置中,我们使用<init-param>标签定义了三个初始化参数:allowedOriginsallowedMethodsallowedHeaders,分别用于配置允许的跨域请求来源、请求方法和请求头。

4. 注册Filter

最后一步是在web.xml中注册Filter,以便它能够在应用程序启动时被正确加载。

在web.xml文件中添加以下配置:

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
</context-param>

5. 测试跨域请求

现在,我们已经完成了Java MVC跨域配置的所有步骤。接下来,我们可以进行一些跨域请求的测试。

在客户端发起的请求中,可以通过设置Origin头来指定允许的跨域请求来源,如下所示:

var xhr = new XMLHttpRequest();
xhr.open('GET', '
xhr.setRequestHeader('Origin', '
xhr.send();

在服务端接收到跨域请求时,将返回以下响应头:

Access-Control-Allow-Origin: 
Access-Control-Allow-Methods