spring-boot后端解决跨域问题

2023-11-12

代码

import cn.hutool.log.Log;
import cn.hutool.log.LogFactory;
import com.alibaba.fastjson.JSONObject;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

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

/**
 * Copyright (C), 2019-2019, 北京力盟亚有限公司
 * @Description: 过滤器
 * @Author: qianxi
 * @Date: 2019/10/28 17:47
 * @version:1.0
 */
//@WebFilter(value="/*",filterName = "aaaaaLoggingFilter" )
@Configuration
public class LoggingFilterConfig  implements Filter {
//    @Override
    public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
        log.info("接收Object报文:{} \n Exception={} " , o , e );
    }
    @Bean
    public FilterRegistrationBean registrationBean(){
        FilterRegistrationBean filter = new FilterRegistrationBean(new LoggingFilterConfig());
        filter.addUrlPatterns("/*");
        //多个过滤器时执行顺序
        // 最高级别。
        filter.setOrder(FilterRegistrationBean.HIGHEST_PRECEDENCE);
        return filter;
    }

    private final static Log log = LogFactory.get();

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse res,
                         FilterChain chain) throws IOException, ServletException {
        // TODO Auto-generated method stub
        request.setCharacterEncoding("UTF-8");
        res.setCharacterEncoding("UTF-8");

        HttpServletRequest req = (HttpServletRequest)request;
        Map<String, Object> map = new HashMap<String, Object>();

        // Get request URL.
        map.put("URL", req.getRequestURL());
        map.put("Method", req.getMethod());
        map.put("Protocol",req.getProtocol());
        // 获取header信息

        List<Map<String,String>> headerList = new ArrayList<>();
        Map<String,String> headerMaps = new HashMap<String,String>();
        for(Enumeration<String> enu = req.getHeaderNames(); enu.hasMoreElements();){
            String name = enu.nextElement();
            headerMaps.put(name,req.getHeader(name));
        }
        headerList.add(headerMaps);
        map.put("headers", headerList);
        //获取parameters信息

        List<Map<String,String>> parameterList = new ArrayList<>();
        Map<String,String> parameterMaps = new HashMap<String,String>();
        for(Enumeration<String> names = req.getParameterNames();names.hasMoreElements();){
            String name = names.nextElement();
            parameterMaps.put(name, req.getParameter(name));
        }
        parameterList.add(parameterMaps);
        map.put("parameters", parameterList);
        String line = "";
        // 获取请求体信息
//            if (req.getMethod().equalsIgnoreCase("POST")) {
//                int len = req.getContentLength();
//                char[] buf = new char[len];
//                int bufcount = requestWrapper.getReader().read(buf);
//                if (len > 0 && bufcount <= len) {
//                    line = String.copyValueOf(buf).substring(0, bufcount);
//                }
//            } else if (req.getMethod().equalsIgnoreCase("GET")) {
        int idx = req.getRequestURL().indexOf("?");
        if (idx != -1) {
            line = req.getRequestURL().substring(idx + 1);
        } else {
            line = null;
        }
//            }

        if (line != null) {
            map.put("Context", new String[] { line });
        }
        log.info("接收请求报文:\n"+ JSONObject.toJSONString(map));
        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");
        chain.doFilter(request, response);
        // 辞书
//      log.info("接收response报文:\n"+ response.getContentType());
    }

    @Override
    public void destroy() {

    }

}

参考资料

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

spring-boot后端解决跨域问题 的相关文章

随机推荐

  • 《UNIX环境高级编程》笔记 第十三章-守护进程

    1 概念 守护进程 daemon 是生存期长的一种进程 它们常常在系统引导装入时启动 仅在系统关闭时才终止 因为它们没有控制终端 所以说它们是在后台运行的 Linux的大多数服务就是用守护进程实现的 这些守护进程名通常以d结尾 如inetd
  • ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; con

    作业背景 node mysql 附 想必各位点进来都是遇到了这个错误 我们都知道报错提示的是出问题的范围 而在范围内有着许多不确定的因素 抽象些来说就是导致脱发的原因不一定是熬夜 还有可能是压力大 焦虑 疾病等原因 问题描述 ER NOT
  • Centos离线手动安装gcc

    正常联网情况下 在Centos系统中 我们可以使用yum命令很方便的从网络自动下载和安装gcc编译器 但是 由于各种原因 在实际使用中 Centos系统系统不允许介入互联网 所以只能自己手动下载 上传至服务器 再自己安装编译器 网上可以找到
  • 云计算 第3章虚拟化技术(2)

    物理网络与虚拟网络 CPU虚拟化 CPU及指令集 CPU的操作由它所执行的指令确定 这些指令成为机器指令Machine Instruction 目前 X86服务器在企业中的部署与应用越来越广泛 X86是一个Intel通用计算机系列的编号 也
  • Sqoop使用汇总

    命令 查看数据库 sqoop list databases connect jdbc mysql 127 0 0 1 3306 username root password root 查看表 sqoop list tables connec
  • 巨详细,大电流线性电源(LDO)原理,看完你就明白了

    原文来自公众号 工程师看海 上一篇文章介绍了PMOS结构线性电源的基本工作原理 今天结合仿真介绍大电流LDO使用的NMOS 架构基本工作原理 以及其他一些重要的LDO参数 包括PSRR Dropout Voltage等 添加微信 chunh
  • 对于模式的思考

    一是确定那些知识是需要掌握的 第二则是如何掌握 Pattern无疑是需要学习的 但事实是它很容易被遗忘 却很难在实际工作中熟练地运用 方法就是将解决问题的模式与实际中某个重要的应用match起来 1 Structural Pattern D
  • 数据整理——大数据治理的关键技术

    摘要 数据是政府 企业和机构的重要资源 数据治理关注数据资源有效利用的众多方面 如数据资产确权 数据管理 数据开放共享 数据隐私保护等 从数据管理的角度 探讨了数据治理中的一项关键技术 数据整理 介绍了以数据拥有者和直接使用者 行业用户 为
  • 如何引导机器?如何面临人机结合?《​人工智能与人类未来》

    微信公众号 乐生活与爱 公众号曾转载过蔡恒进教授的奇文 意识如何演化 机器何时有自我意识 附着与隧通 心智的工作模式 值得反复也读 我上周听了由北京大学博古睿研究中心 中国人民大学哲学院 中国人民大学哲学与认知科学交叉平台 服务器艺术联合主
  • “孔乙己的长衫”:学历究竟成为敲门砖还是枷锁

    在社会上 学历是一个很重要的指标 学历不高的人 在工作中很难晋升到管理层 学历高的人 则可以获得更多的机会 但事实上 这只是一个表面现象 更多的是学历给人带来的附加值 我虽然知道这世界上有一个孔乙己 但我却并不知道他生活在哪个城市 如果可以
  • css文本超出2行显示...

    可以使用CSS的text overflow和ellipsis属性来实现文本超过2行时显示省略号 设置文本溢出隐藏 使用CSS的overflow属性来将文本溢出部分隐藏 同时使用white space属性来设置文本换行方式为normal或者n
  • 关于struts漏洞

    文章出处 阿里云社区 漏洞扫描 gt 技术运维问题 gt 技术分享 gt Struts2代码执行漏洞 Apache Struts s2 005 远程代码执行漏洞 CVE 2010 1870 受影响版本 Struts 2 0 0 Struts
  • Kconfig:'endmenu' in different file than 'menu'

    问题描述 heat ubuntu AM5728 update u boot 2017 01 g70d59ba v2 0 make ARCH arm menuconfig scripts kconfig mconf Kconfig drive
  • CGAL 点云随机下采样

    目录 一 概述 1 主要函数 二 代码实现 三 结果展示 一 概述 随机删除用户指定的输入点的一部分 1 主要函数 头文件 include
  • 解决PowerShell不显示conda虚拟环境的问题

    目录 1 指令正常执行和结果 2 指令执行异常以及解决办法 问题1 CommandNotFoundError No command conda conda 问题2 conda init powershell执行完毕后 重启PowerShel
  • 工作中经常使用shell脚本

    在工作中我们常用shell脚本处理一些问题 今天在来一些这里整理了一些工作中常用的简单shell脚本 1 更新脚本 bin bash apt get update DEBIAN FRONTEND noninteractive apt get
  • 【C语言】小游戏-扫雷(清屏+递归展开+标记)

    大家好 我是深鱼 目录 一 游戏介绍 二 文件分装 三 代码实现步骤 1 制作简易游戏菜单 2 初始化棋盘 11 11 3 打印棋盘 9 9 4 布置雷 5 计算 x y 周围8个坐标的和 6 排查雷 lt 1 gt 清屏后打印棋盘 lt
  • Python:赋值,浅拷贝(copy)和深拷贝(deepcopy)

    基础知识请查看之前博客 Python 对象 可变对象与不可变对象 赋值 浅拷贝和深拷贝的关键问题 修改一个变量 会不会导致另外拷贝出来的对象的改变 不可变对象 import copy a1 0 a2 a1 a3 copy copy a1 a
  • 使用https://mail.google.com/登录GMail

    原来使用gmail google com登录 登录可以进去 但查看邮件时 总是出现 Oop unable to reach Gmail Please check your internet connection and try again
  • spring-boot后端解决跨域问题

    代码 import cn hutool log Log import cn hutool log LogFactory import com alibaba fastjson JSONObject import org springfram