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 1099(数学)
			
Lottery Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Sub ...
 - Symmetric Tree(DFS,二叉树的构建以及测试代码)
			
基础有待加强啊,由该题引发出来一些问题,现在来总结下. 首先是二叉树的结构: struct TreeNode { EleType val; TreeNode *left; TreeNode *righ ...
 - InnoDB: Warning: a long semaphore wait 解决办法
			
http://blog.csdn.net/wulantian/article/details/37560849
 - eclipse项目java版本更改
			
然后.右键点击项目->properties->Java Compiler->....如图  最后,右键点击项目->properties->Project Facets ...
 - 实机桌面上给虚拟机安装系统(分区,恢复GHO)
			
在虚拟机里安装系统大家都会了.我这里介绍一种方法无须进入虚拟机里操作.全部在实机里完成对虚拟机安装系统(分区.恢复GHO).这里要使用到的工具如下1分区工具DISKGENIUS2虚拟光驱3Ghost镜 ...
 - Mondiran创建连接
			
曾经使用jdbc创建连接的时候使用的url是这种形式:jdbc:mysql://hostname:port/database?key1=value1&key2=value2,在URL须要以&q ...
 - php.ini的载入位置
			
php.ini文件找不到,载入WINDOS下的,但找不到,后来强制-c查找是OK的.思考,为什么载入window下的ini文件.1.可能是有一个默认路径.2.可能没有路径.默认载入. 问题解决:htt ...
 - odoo秘密入口
			
可以通过往 odoo进程 发送 "信号",让odoo干一些特定的工作 例如 kill -s SIGUSR1 pid , 将打印输出 cache统计 信号 作用 说明 ...
 - OS: 读者写者问题(写者优先+LINUX+多线程+互斥量+代码)(转)
			
一. 引子 最近想自己写个简单的 WEB SERVER ,为了先练练手,熟悉下在LINUX系统使用基本的进程.线程.互斥等,就拿以前学过的 OS 问题开开刀啦.记得当年学读者写者问题,尤其是写者优先的 ...
 - hihocoder 1032 manachar 求回文串O(n)
			
#include <cstdio> #include <iostream> #include <algorithm> #include <queue> ...