Springboot通过过滤器实现对请求头的修改
那么对于这个问题我们可以直接修改AOP,在里面增加获取URL参数的实现,但是这样做修改改了原有代码,我们本身初衷是给用户一个过渡的阶段,一旦用户对自己的服务做了修改,那么我们也就不需要在支持以前的形式了,所以我们可以写一个过滤器重写请求头的获取的实现,就可以解决这个问题了,当用户自己的服务都修改好之后,我们只需要删掉过滤器就可以了。
import org.apache.commons.lang3.StringUtils;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper; import java.io.IOException;
/**
* Created by yangy-r on 2019/3/1. */
@WebFilter
public class AuthHeaderSettingFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException { }
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
{
HttpServletRequestWrapper requestWrapper = new
HttpServletRequestWrapper((HttpServletRequest) request) {
/**
* 当调用request.getHeader("token")时,则获取请求参数中token值并当做Header的值返回 * @param name
* @return
*/
@Override
public String getHeader(String name) {
// 先从原本的Request中获取头,如果为空且名字为token,则从参数中查找并返回
String superHeader = super.getHeader(name);
if("Authorization".equals(name) && StringUtils.isEmpty(superHeader)){
String token = request.getParameter("token");
if (StringUtils.isNotEmpty(token)) {
return token ;
}
}
return superHeader;
}
};
chain.doFilter(requestWrapper,response);
}
@Override
public void destroy() { }
}
1、先获取指定的header;
@Configuration
public class FilterConfig {
@Bean
public FilterRegistrationBean modifyParametersFilter() {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(new AuthHeaderSettingFilter());
registration.addUrlPatterns("/*");
registration.setName("authHeaderSettingFilter");
registration.setOrder(1);
return registration;
}
}
Springboot通过过滤器实现对请求头的修改的更多相关文章
- SpringBoot整合Rabbitmq设置消息请求头
String str = "{\"origin\":\"BBC\",\"origin_coupon_id\":51,\" ...
- Http 请求头中的 Proxy-Connection
平时用 Chrome 开发者工具抓包时,经常会见到 Proxy-Connection 这个请求头.之前一直没去了解什么情况下会产生它,也没去了解它有什么含义.最近看完<HTTP 权威指南> ...
- angular学习笔记(二十四)-$http(2)-设置http请求头
1. angular默认的请求头: 其中,Accept 和 X-Requested-With是$http自带的默认配置 Accept:application/json,text/plain ...
- SpringBoot图文教程17—上手就会 RestTemplate 使用指南「Get Post」「设置请求头」
有天上飞的概念,就要有落地的实现 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例都敲一遍 先赞后看,养成习惯 SpringBoot 图文教程系列文章目录 SpringBoot图文教程1-Spr ...
- SpringBoot整合knife4j框架(可生成离线接口文档),并设置接口请求头token默认值
功能和swagger类似 官网地址:https://doc.xiaominfo.com/knife4j/ 这个框架可以设置返回字段的描述 引入依赖 <dependency> <gro ...
- SpringBoot整合Swagger框架 ,并设置接口请求头token默认值
引入maven依赖 <!-- swagger2--> <dependency> <groupId>io.springfox</groupId> &l ...
- 【跨域】SpringBoot跨域,拦截器中,第一次获取的请求头为NULL,发送两次请求的处理方式
背景: 在做前后端分离时,牵扯到跨域,但是已经设置了跨域 前端设置了允许携带Cookie axios.defaults.withCredentials = true; 后端也配置了跨域 浏览器端查看发 ...
- springBoot(6)---过滤器,监听器,拦截器
过滤器,监听器,拦截器 一.理解它们 看里十几篇博客,总算有点小明白,总的来讲,两张图可以让我看明白点. 通过两幅图我们可以理解拦截器和过滤器的特点 1.过滤器 过滤器是在请求进入tomcat容器后, ...
- Spring Cloud系列之客户端请求带“Authorization”请求头,经过zuul转发后丢失了
先摆解决方案: 方法一: 方法二: zuul.routes.<routeName>.sensitive-headers= zuul.routes.<routeName>.cus ...
随机推荐
- jd一面面经
1.讲一下hashmap原理. 2.concurrentHashMap的原理.concurrentHashMap和hashmap有什么不同? 3.synchnized底层实现?讲讲AQS 4.sync ...
- MySQL进阶:主主复制+Keepalived高可用
Blog:博客园 个人 概述 mysql主主复制 所谓主主复制,即双主备份,或者叫互作主从复制,每台master既是master,又是slave.这种方案,既做到了访问量的压力分流,同时也解决了单点故 ...
- java学习笔记1(入门级)
Java包括三大块 JavaSE (Java标准版) JavaEE(Java企业版) JavaME(Java微型版) Java语言特性 简单性:例如C++支持多继承, ...
- Perm 排列计数
题目描述 称一个1,2,...,N的排列P1,P2...,Pn是Magic的,当且仅当2<=i<=N时,Pi>Pi/2. 计算1,2,...N的排列中有多少是Magic的,答案可能很 ...
- pipenv管理模块和包
pipenv安装 1. 在终端输入:pip install pipenv进行安装 用pipenv创建虚拟环境:pipenv install,在哪个文件下运行这个命令,就是给哪个文件创建虚拟环境 这 ...
- 关于基于Nexus3和Docker搭建私有Nuget服务的探索
背景简介 NuGet是Microsoft开发平台的程序集包管理器,它由客户端工具和服务端站点组成,客户端工具提供给用户管理和安装/卸载软件程序包,以及打包和发布程序包到NuGet服务端站点等功能,服务 ...
- 11、mysql索引详解
1.索引介绍: 2.建立索引的方法: 注意:索引名称不要相同: (1)在建表的时候,可以增加主键索引的语句如下: 1)例一: create table student1 ( id int(4) not ...
- 使用curl断点续传下载文件
办公网络网速不是很好,使用Chrome下载一些软件时不时会中断,恶心的是Chrome居然不支持断点续传下载(为什么chrome的下载不支持断点续传呢?),迅雷自然是不能装的,那怎么办?还好我有大名鼎鼎 ...
- Kafka:Springboot整合Kafka消息队列
本文主要分享下Spring Boot和Spring Kafka如何配置整合,实现发送和接收来自Spring Kafka的消息. 项目结构 pom依赖包 <?xml version="1 ...
- Leetcode No.136 Single Number(c++实现)
1. 题目 1.1 英文题目 Given a non-empty array of integers nums, every element appears twice except for one. ...