欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

@Marked-CORS跨域请求:前后端分离 博客分类: JavaWeb 跨域 

程序员文章站 2024-02-24 12:15:35
...

1. 请求过滤器:

/**
 *	OncePerRequestFilter保证在任何Servlet容器中都是一个请求只执行一次的过滤器。
*/
public class CorsFilter extends OncePerRequestFilter {

    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {

        Properties props = PropertiesLoaderUtils.loadAllProperties("cors.properties");
        //允许的 客户端域名
        response.addHeader("Access-Control-Allow-Origin", props.getProperty("cors.allowed-origins"));
        //允许的 方法名
        response.addHeader("Access-Control-Allow-Methods", props.getProperty("cors.allowed-methods"));
        //允许服务端访问的客户端请求头,多个请求头用逗号分割,例如:Content-Type
        response.addHeader("Access-Control-Allow-Headers", "Content-Type,X-Requested-With,token");
        //预检验请求时间
        response.addHeader("Access-Control-Max-Age", props.getProperty("cors.max-age"));//30 min
        response.addHeader("Access-Control-Allow-Credentials", "true");

        filterChain.doFilter(request, response);
    }

}

 

2. web.xml中配置跨域过滤器:

 

<!--配置跨域请求的过滤器-->
	<filter>
		<filter-name>cors</filter-name>
		<filter-class>com.jd.dashboard.cors.CrossFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>cors</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

 

 

3. 过滤器中的属性配置如下:

 

属性配置文件如下:cors.properties

#跨域请求CORS全局配置属性值

	#允许访问的客户端域名,例如:http://web.xxx.com
	cors.allowed-origins=http://front.xx.com

	#允许访问的方法名
	cors.allowed-methods=POST, GET, OPTIONS, DELETE

	#允许服务端访问的客户端请求头,多个请求头用逗号分割,例如:Content-Type
	cors.allowed-headers=Content-Type

	#允许客户端访问的服务端响应头
	cors.exposed-headers=

	#是否允许请求带有验证信息,若要获取客户端域下的cookie时,需要将其设置为true
	cors.allow-credentials=true

	cors.max-age=1800

 

 

由于jsonp只支持GET方式的请求,所以这种方式比较推荐。

相关标签: 跨域