java后端通过Filter过滤器解决跨域问题


此方案只需服务端的代码修改

因为现在要前后端分离开发,那必不可免的会出现跨域问题,以下是自己实际测试过的有效代码:

步骤:

一、在 web.xml文件中添加

<!-- 2019-01-15   解决跨域问题 -->
    <filter>
        <filter-name>crossFilter</filter-name>
        <filter-class>com.sx.test.controller.CorsFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>crossFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

二、在自己的项目中创建 CorsFilter.java文件

package com.sx.test.controller; import org.springframework.context.annotation.Configuration; import org.springframework.core.annotation.Order; import javax.servlet.Filter; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebFilter(filterName = "CORSFilter", urlPatterns = {"/*"}) @Order(value = 1) @Configuration public class CorsFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)throws IOException, ServletException { System.out.println("Filter 过滤器 执行 了"); HttpServletRequest request = (HttpServletRequest) servletRequest; HttpServletResponse response = (HttpServletResponse) servletResponse; // 响应标头指定 指定可以访问资源的URI路径 response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin")); //响应标头指定响应访问所述资源到时允许的一种或多种方法 response.setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, OPTIONS, DELETE"); //设置 缓存可以生存的最大秒数 response.setHeader("Access-Control-Max-Age", "3600"); //设置 受支持请求标头 response.setHeader("Access-Control-Allow-Headers", "x-requested-with"); // 指示的请求的响应是否可以暴露于该页面。当true值返回时它可以被暴露 response.setHeader("Access-Control-Allow-Credentials","true"); filterChain.doFilter(servletRequest, servletResponse); } @Override public void destroy() { } } 

注:

      上面代码中的注解作用:

  @WebFilter 用于将一个类声明为过滤器,该注解将会在部署时被容器处理,容器将根据具体的属性配置将相应的类部署为过滤器。@WebFilter常用属性:

 @Order 注解主要用来控制配置类的加载顺序,其value正整数,值越小优先度越高

 @Configuration 从Spring3.0,@Configuration用于定义配置类

 

对于setHeader() 响应头相关的API 详解: https://cloud.tencent.com/developer/section/1189894 

如果对你有帮助的话给评论个 1 对我鼓励下,如果有更好的方法或资源请不吝赐教


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM