跨域请求系列之(二) ---------- tomcat实现服务端cors

1、介绍

tomcat实现cors的基础类是:org.apache.catalina.filters.CorsFilter,具体的类容请查看官网。使用tomcat实现跨域资源共享需要在web.xml文件中配置一个filter,这个filter是tomcat容器中的一个类,不需要导入任何的依赖,前提是你使用的servlet容器是tomcat。

filter的工作原理是:在HttpServletResponse中添加需要的Access-Control-*头,来实现跨域资源共享,这是符合W3C规范的,这个filter也能保护HTTP响应分裂。

具体配置如下,这是一个完整的配置:

	<filter>
		<filter-name>CorsFilter</filter-name>
		<filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
		<init-param>
			<param-name>cors.allowed.origins</param-name>
			<param-value>*</param-value>
		</init-param>
		<init-param>
			<param-name>cors.allowed.methods</param-name>
			<param-value>GET,POST,HEAD,OPTIONS,PUT</param-value>
		</init-param>
		<init-param>
			<param-name>cors.allowed.headers</param-name>
			<param-value>Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers</param-value>
		</init-param>
		<init-param>
			<param-name>cors.exposed.headers</param-name>
			<param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentials</param-value>
		</init-param>
		<init-param>
			<param-name>cors.preflight.maxage</param-name>
			<param-value>100</param-value>
		</init-param>
		<init-param>
			<param-name>cors.support.credentials</param-name>
			<param-value>true</param-value>
		</init-param>
		<init-param>
			<param-name>cors.request.decorate</param-name>
			<param-value>true</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>CorsFilter</filter-name>
		<url-pattern>/do/*</url-pattern>
	</filter-mapping>

2、初始化参数

一个没有任何的初始化参数的CorsFilter实例是没有任何意义的,所以,在初始化CorsFilter的时候,需要根据你的具体需要提供额外的初始化参数。CorsFilter一共有7个初始化参数,下面是每一个参数的作用。

cors.allowed.origins设置cors允许的源,可以用 * 设置所有允许所有源,也可以用一个源的集合设置白名单。源之间用逗号分隔。
cors.allowed.methods设置cors允许的方法,设置的内容会在预检的响应中作为Access-Control-Allow-Methods响应头的一部分返回。
cors.allowed.headers

设置请求头,设置的内容会在预检的响应中作为Access-Control-Allow-Headers响应头的一部分返回。

cors.exposed.headers设置browser被允许访问的头,这个头信息会在预检响应中作为Access-Control-Expose-Headers响应头的一部分被返回。
cors.preflight.maxage设置允许browser缓存预检请求结果的秒钟数,该值会在预检响应中作为Access-Control-Max-Age响应头的一部分被返回。
cors.support.credentials设置是否支持用户认证,该值会在预检响应头中作为Access-Control-Allow-Credentials响应头的一部分被返回,以帮助browser确定一个请求是否能够被用于用户认证。
cors.request.decorate设置以上的所有属性是否能够被添加到请求头中。

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值