java web服务器实现跨域访问

来源:互联网 发布:华容道java源代码 编辑:程序博客网 时间:2024/06/05 06:19

方法1:自己写的  filter类,自己在在业务项目中配置web.xml 中配置想要的xml 文件。

如:java类filter:

  1. public class CorsFilter implements Filter{  
  2.    
  3. @Override  
  4. public void init(FilterConfig filterConfig) throws ServletException {  
  5. // TODO Auto-generated method stub  
  6.    
  7. }  
  8.    
  9. @Override  
  10. public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,  
  11. ServletException {  
  12. // TODO Auto-generated method stub  
  13. HttpServletResponse res = (HttpServletResponse) response;  
  14. res.setContentType("text/html;charset=UTF-8");  
  15.    res.setHeader("Access-Control-Allow-Origin""*");  
  16.    res.setHeader("Access-Control-Allow-Methods""POST, GET, OPTIONS, DELETE");  
  17.    res.setHeader("Access-Control-Max-Age""0");  
  18.    res.setHeader("Access-Control-Allow-Headers""Origin, No-Cache, X-Requested-With, If-Modified-Since, Pragma, Last-Modified, Cache-Control, Expires, Content-Type, X-E4M-With,userId,token");  
  19.    res.setHeader("Access-Control-Allow-Credentials""true");  
  20.    res.setHeader("XDomainRequestAllowed","1");  
  21.    chain.doFilter(request, response);  
  22. }  
  23.    
  24. @Override  
  25. public void destroy() {  
  26. // TODO Auto-generated method stub  
  27.    
  28. }  
  29.    
  30. }  
  31. 1、nginx配置文件配置:

    [html] view plain copy
    1. server {    
    2.     location / {    
    3.         if ($request_method = 'OPTIONS') {    
    4.           add_header 'Access-Control-Allow-Origin' '*';    
    5.           add_header 'Access-Control-Allow-Credentials' 'true';    
    6.           add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';    
    7.           add_header 'Access-Control-Allow-Headers' 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';    
    8.          # add_header 'Access-Control-Max-Age' 3600;    
    9.           add_header 'Content-Type' 'text/plain charset=UTF-8';    
    10.           add_header 'Content-Length' 0;    
    11.           return 200;    
    12.         }    
    13. }    

location ^~/proxy/html/{
rewrite ^/proxy/html/(.*)$ /$1 break;
proxy_pass http://www.b.com/;
}


在整个服务器上支持跨域访问

在服务器上可以部署多个应用程序,如果在整个服务器的范围上支持跨域访问,那么在所有应用程序上都不用单独配置了,直接使用服务器的配置即可,这里通过tomcat来进行举例。在Tomcat7之后包括tomcat7才开始支持CORS,之前的版本是不支持的。配置CORS,首先配置Tomcat中的conf\web.xml,在其中添加一个Filter声明,如下:

<filter>    <filter-name>CORS</filter-name>    <filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class></filter><filter-mapping>    <filter-name>CORS</filter-name>    <url-pattern>/*</url-pattern></filter-mapping>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

这样就能应用到在该Tomcat中部署的所有的应用程序的接口上。然后在Tomcat的lib文件夹下加入两个jar包:cors-filter-2.5.jar和java-property-utils-1.9.jar,这两个jar包对应的maven依赖如下:

<dependency>    <groupId>com.thetransactioncompany</groupId>    <artifactId>cors-filter</artifactId>    <version>2.5</version></dependency>