CorsFilter 过滤器解决跨域的处理

 更新时间:2021年06月07日 11:15:33   作者:侯赛雷  
这篇文章主要介绍了CorsFilter 过滤器解决跨域的处理操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

CorsFilter 过滤器如何解决跨域

不多逼逼,直接贴代码,前端所有请求头都放在headers里面就行

@Component
public class CorsFilter {
    //这里是前端请求头,那个跨域就添加到这里就行了
    private static final String headers = "User-Agent,Cache-Control,Content-type,Date,Server,withCredentials," +
            "appversion";
    @Override
    public void init(FilterConfig filterConfig)
            throws ServletException {
    }
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        HttpServletResponse httpServletResponse = (HttpServletResponse) response;
        httpServletResponse.setHeader("Access-Control-Allow-Origin", "*");
        httpServletResponse.setHeader("Access-Control-Allow-Headers", headers);
        httpServletResponse.setHeader("Access-Control-Allow-Credentials", "true");
        httpServletResponse.setHeader("Access-Control-Allow-Methods",
                "GET, POST, PUT, DELETE, OPTIONS, HEAD");
        httpServletResponse.setHeader("Access-Control-Max-Age", "3600");
        httpServletResponse.setHeader("Access-Control-Expose-Headers", "usertoken");
        httpServletResponse.setHeader("Access-Control-Request-Headers", "usertoken");
        httpServletResponse.setHeader("Expires", "-1");
        httpServletResponse.setHeader("Cache-Control", "no-cache");
        httpServletResponse.setHeader("pragma", "no-cache");
        ServletRequest requestWrapper = null;
        if (request instanceof HttpServletRequest) {
            requestWrapper = new RequestWrapper((HttpServletRequest) request);
        }
        if (null == requestWrapper) {
            chain.doFilter(request, response);
        } else {
            chain.doFilter(requestWrapper, response);
        }
    }
    @Override
    public void destroy() {
    }
}

一个CORS实现跨域的过滤器

package com.grain.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class CORSFilter implements Filter {
 @Override
 public void init(FilterConfig arg0) throws ServletException {
  // TODO Auto-generated method stub
  
 }
 @Override
 public void destroy() {
  // TODO Auto-generated method stub
  
 }

 @Override
 public void doFilter(ServletRequest req, ServletResponse res, FilterChain filterChain)
   throws IOException, ServletException {
  HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) res;
  response.addHeader("Access-Control-Allow-Origin", "*");
        response.addHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");
        response.addHeader("Access-Control-Allow-Headers", "Content-Type");
        response.addHeader("Access-Control-Max-Age", "1800");//30 min
        filterChain.doFilter(request, response); 
 }
}

web.xml配置

<filter>
   <filter-name>CORSFilter</filter-name>
   <filter-class>com.grain.filter.CORSFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>CORSFilter</filter-name>
   <url-pattern>/*</url-pattern>
  </filter-mapping>

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Spring session整合到Redis过程解析

    Spring session整合到Redis过程解析

    这篇文章主要介绍了Spring session整合到Redis过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • java通过证书访问etcd的实现步骤

    java通过证书访问etcd的实现步骤

    Etcd提供了多种语言的客户端库,本文主要介绍了java通过证书访问etcd的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-05-05
  • 解决java连接虚拟机Hbase无反应的问题

    解决java连接虚拟机Hbase无反应的问题

    这篇文章主要介绍了解决java连接虚拟机Hbase无反应的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • Java输入流Scanner/BufferedReader使用方法示例

    Java输入流Scanner/BufferedReader使用方法示例

    这篇文章主要介绍了Java输入流Scanner/BufferedReader使用方法,大家看示例吧
    2013-11-11
  • Java基于正则表达式获取指定HTML标签指定属性值的方法

    Java基于正则表达式获取指定HTML标签指定属性值的方法

    这篇文章主要介绍了Java基于正则表达式获取指定HTML标签指定属性值的方法,涉及java基于正则的HTML元素匹配相关操作技巧,需要的朋友可以参考下
    2017-01-01
  • RSA加密的方式和解密方式实现方法(推荐)

    RSA加密的方式和解密方式实现方法(推荐)

    下面小编就为大家带来一篇RSA加密的方式和解密方式实现方法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • 你必须得会的SpringBoot全局统一处理异常详解

    你必须得会的SpringBoot全局统一处理异常详解

    程序在运行的过程中,不可避免会产生各种各样的错误,这个时候就需要进行异常处理,本文主要为大家介绍了SpringBoot实现全局统一处理异常的方法,需要的可以参考一下
    2023-06-06
  • java如何实现socket连接方法封装

    java如何实现socket连接方法封装

    这篇文章主要介绍了java实现socket连接方法封装教程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • Java之Spring整合Junit

    Java之Spring整合Junit

    Java Spring框架是一个轻量级的开源框架,具有很高的凝聚力和吸引力,本篇文章带你了解如何配置数据源、注解开发以及整合Junit
    2023-04-04
  • Java8通过Function获取字段名的步骤

    Java8通过Function获取字段名的步骤

    这篇文章主要介绍了Java8通过Function获取字段名,需要的朋友可以参考下
    2020-04-04

最新评论