Java-全局跨域处理

Posted 她是人间四月天

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java-全局跨域处理相关的知识,希望对你有一定的参考价值。

  这几天在开发中编写项目时需要前后端分离,刚好涉及到跨域这个问题,很早之前做项目时也用过,也是在网上找的列子,来源已经无处可寻了,若侵必删!

  

  跨域问题一般出现两者服务器不同或者不同的端口上访问资源时会存在的问题,本文章目前适用于SpringMVC上,其他框架暂时还没涉猎,等以后接触到后在补充。

 

  本次解决跨域的问题使用的是 filter.jar 包实现。

 

  若是项目使用的是maven,导入依赖包:

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

     (直接复制即可)

  

  然后找到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,OPTION</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>
        <init-param>
            <param-name>cors.maxAge</param-name>
            <param-value>3600</param-value>
        </init-param></filter>
    <filter-mapping>
        <filter-name>CORS</filter-name>
        <url-pattern>/*</url-pattern>
  </filter-mapping>

    这段配置代码就不作太多解释,直接复制即可使用。

 

    后面需要编写一个 filter 的实现类,凡是需要跨域的类或接口,直接继承即可实现跨域,如下:

import javax.servlet.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;


public class KuaY implements Filter {
    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
        HttpServletResponse response = (HttpServletResponse) res;
        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
        response.setHeader("Access-Control-Max-Age","3600");
        response.setHeader("Access-Control-Allow-Headers","x-requested-with, content-type");
        chain.doFilter(req, res);

    }
    @Override
    public void init(FilterConfig filterConfig) {}
    @Override
    public void destroy() {}
}

    

 

  以上方式不需要前端编写任何代码,直接后台全部搞定,使用方式就是继承 KuaY 这个实现类,所有前后端皆可跨域实现。原理可以自己去研究一下,路漫漫其修远兮,欢迎拍砖! 

   

  

 

 

        


以上是关于Java-全局跨域处理的主要内容,如果未能解决你的问题,请参考以下文章

SpringCloud 统一网关Gateway -- 全局过滤器 GlobalFilter@Order注解过滤器链执行顺序Gateway跨域问题处理

SpringCloud 统一网关Gateway -- 全局过滤器 GlobalFilter@Order注解过滤器链执行顺序Gateway跨域问题处理

Spring Boot 全局跨域配置

java 反射代码片段

跨域访问方法介绍--使用片段识别符传值

web跨域问题(java) 跨域请求