SpringBoot-(4)-Filter的使用
一,Filter
Filter功能,它使用户可以改变一个 request和修改一个response. Filter 不是一个servlet,它不能产生一个response,它能够在一个request到达servlet之前预处理request,也可以在离开 servlet时处理response.换种说法,filter其实是一个”servlet chaining”(servlet 链).
一个Filter包括:
在servlet被调用之前截获;
在servlet被调用之前检查servlet request;
根据需要修改request头和request数据;
根据需要修改response头和response数据;
在servlet被调用之后截获.
二,SpringBoot实现Filter
1,实现Filter接口
package com.example.demo.filters; import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component; import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException; /**
* Created by zhang_guang_yang on 2018/11/21.
*/ /*
* Order表示过滤顺序,值越小,越优先过滤*/
@Order(1)
@WebFilter(filterName = "registerFilter", urlPatterns = "/register")
public class RegisterFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException { } @Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) servletRequest;
String token = req.getHeader("token");
String userAgent = req.getHeader("User-Agent"); System.out.println("token: " + token);
System.out.println("user-agent: " + userAgent); filterChain.doFilter(servletRequest, servletResponse);
} @Override
public void destroy() { }
}
@Order:过滤顺序,值越小,越优先过滤。
@WebFilter:过滤接口配置
2 ,添加ServletComponentScan注解
@ServletComponentScan(basePackages = {"com.example.demo.filters"} )
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
@ServletComponentScan:扫描配置。
3 ,运行效果:

三,也可以都在Filter中配置,不在MainApplication中添加任何注解
package com.example.demo.filters; import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.stereotype.Component; import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException; /**
* Created by zhang_guang_yang on 2018/11/21.
*/ @Component
@ServletComponentScan
@WebFilter(urlPatterns = "/register")
public class RegisterFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException { } @Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) servletRequest;
String token = req.getHeader("token");
String userAgent = req.getHeader("User-Agent"); System.out.println("token: " + token);
System.out.println("user-agent: " + userAgent); filterChain.doFilter(servletRequest, servletResponse);
} @Override
public void destroy() { }
}
SpringBoot-(4)-Filter的使用的更多相关文章
- Springboot添加filter方法
在springboot添加filter有两种方式: (1).通过创建FilterRegistrationBean的方式(建议使用此种方式,统一管理,且通过注解的方式若不是本地调试,如果在filter中 ...
- Springboot使用Filter以及踩过的坑
Springboot使用Filter以及踩过的坑 在Springboot中使用Filter有两种方式,注解方式,注册bean方式 一.注解@WebFilter 1.实现Filter接口(javax.s ...
- 02-02:springboot 整合filter
1.通过注解扫描完成Filter组件的注册 1.1编写filter (添加拦截的servlet) //@WebFilter(filterName = "FirstFilter",u ...
- SpringBoot自定义Filter
SpringBoot自定义Filter SpringBoot自动添加了OrderedCharacterEncodingFilter和HiddenHttpMethodFilter,当然我们可以自定 义F ...
- 【使用篇二】SpringBoot整合Filter(2)
两种方式: 通过注解扫描完成 Filter 组件的注册 通过方法完成 Filter 组件的注册 一.通过注解扫描完成 Filter 组件的注册 1. 编写Filter类 /** * SpringBoo ...
- springboot整合filter
新建一个项目 新建Firstfilter类 Firstfliter.java package com.example.filter; import java.io.IOException; impor ...
- 【SpringBoot】04.SpringBoot整合Filter的两种方式
SpringBoot整合Filter过滤器的两种方式: 1.通过扫描注解完成Filter组件注册 创建一个类,实现Filter接口,实现doFilter()方法 在该类使用注解@WebFilter,设 ...
- springboot之filter/listener/servlet
简介 SpringBoot可以简化开发流程,但是在其中如何使用传统的J2EE servlet/listener/filter呢 @Bean配置 在Configuration类中加入filter和ser ...
- SpringBoot使用Filter过滤器处理是否登录的过滤时,用response.sendRedirect()转发报错
1.使用response.sendRedirect("/login")时报错,控制台报错如下: Cannot call sendError() after the response ...
- SpringBoot(8) SpringBoot过滤器Filter
1.SpringBoot启动默认加载的Filter characterEncodingFilter hiddenHttpMethodFilter httpPutFormContentFilter re ...
随机推荐
- hdu 5438(类似拓扑排序)
Ponds Time Limit: 1500/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Sub ...
- python--导入就方便实现你需要的功能(模块)
模块让你能够有逻辑地组织你的Python代码段. 把相关的代码分配到一个 模块里能让你的代码更好用,更易懂. 模块也是Python对象,具有随机的名字属性用来绑定或引用. 简单地说,模块就是一个保存了 ...
- AC日记——让我们异或吧 洛谷 P2420
题目描述 异或是一种神奇的运算,大部分人把它总结成不进位加法. 在生活中…xor运算也很常见.比如,对于一个问题的回答,是为1,否为0.那么: (A是否是男生 )xor( B是否是男生)=A和B是否能 ...
- 001为什么Linux使用~作为家目录?为什么vim用hjkl作为方向键?
- mac 下删除xcode后使用git
1. http://blog.bobbyallen.me/2014/03/07/how-to-install-git-without-having-to-install-xcode-on-macosx ...
- HDOJ 5360 Hiking 优先队列+贪心
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=5360 题意: 大概的意思就是每个人有个人数接受范围$[l_i,r_i]$,现在你每次能从还未被选取的人 ...
- CodeForces - 393E Yet Another Number Sequence
Discription Everyone knows what the Fibonacci sequence is. This sequence can be defined by the recur ...
- Atcoder Grand Contest 024
A 略 B 略 C 略 D(构造分形) 题意: 给出一个由n个点的组成的树,你可以加一些点形成一个更大的树.对于新树中的两个点i和j,如果以i为根的树与以j为根的树是同构的那么i和j颜色可以相同.问最 ...
- Ubuntu 16.04下使用Wine安装文件内容搜索工具Search and Replace
说明: 1.使用的Wine版本是深度出品(Deepin),已经精简了很多没用的配置,使启动能非常快,占用资源小. 2.关于没有.wine文件夹的解决方法:在命令行上运行winecfg: 下载: (链接 ...
- Mac item2 配色,大小写敏感及常用快捷键
http://blog.csdn.net/lainegates/article/details/38313559 目录(?)[-] 配色 大小写敏感 快捷揵 item2是mac下非常好用的一款终端 ...