java web服务端CORS跨域配置

字数 385阅读 2402

CORS介绍

CORS-CrossOrigin Resource Sharing,即跨域资源共享,它定义了一种服务器和浏览器的交互方式来确定是否允许跨域请求。CORS简单灵活,但有风险性,能实现ajax跨域访问。

CORS是一个由浏览器共同遵循的一套策略,通过http的header来进行交互。当浏览器识别到发送的请求是跨域请求的时候,会把Origin的Header加入到http请求一起发送到服务器。服务器会解析Header并判断是否允许跨域请求,如果允许,响应头中会有Access-Control-Allow-Origin这个属性。如果服务器允许所有跨域请求,将该属性设置为*即可,如果响应头没有改属性,则浏览器会拦截该请求。

以上是简单情况,CORS将规范分为两种类型的请求,一种是简单请求,另一种是携带预检的请求。预检机制是一种保护机制,防止资源被没有权限的请求修改。浏览器会在发送实际请求之前先发送一个OPTIONS的Http请求来判断服务器是否能接受跨域请求。如果不能接受,浏览器会直接取消后面的实际请求的发送。

java服务端配置方法

引入 cors-filter-1.7.jar和Java-property-utils-1.9.jar
在web.xml中配置:

<filter>  
    <filter-name>CORS</filter-name>  
    <filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>  
    <init-param>  
     <param-name>cors.allowOrigin</param-name>  
        <param-value>*</param-value>  
    </init-param>  
    <init-param>  
     <param-name>cors.supportedMethods</param-name>  
        <param-value>GET, POST, HEAD, PUT, DELETE</param-value>  
    </init-param>  
    <init-param>  
     <param-name>cors.supportedHeaders</param-name>  
        <param-value>Accept, Origin, X-Requested-With, Content-Type, Last-Modified</param-value>  
    </init-param>  
    <init-param>  
        <param-name>cors.exposedHeaders</param-name>  
        <param-value>Set-Cookie</param-value>  
    </init-param>  
    <init-param>  
        <param-name>cors.supportsCredentials</param-name>  
        <param-value>true</param-value>  
    </init-param>  
</filter>  
<filter-mapping>  
    <filter-name>CORS</filter-name>  
    <url-pattern>/*</url-pattern>  
</filter-mapping>  

推荐阅读更多精彩内容