首页 > 其他分享 >Spring @WebFilter 注解定义过滤器

Spring @WebFilter 注解定义过滤器

时间:2022-12-03 23:36:47浏览次数:62  
标签:info log author Spring request 过滤器 WebFilter response


@Slf4j
@Order(1)
@WebFilter(filterName = "myFilter", urlPatterns = {"/asyncResultGet/*"}, initParams = {@WebInitParam(name = "author", value = "Jaemon")})
public class MyFilter implements Filter {
@Override
public void init(FilterConfig filterConfig)
throws ServletException {
// 得到过滤器的名字
log.info("过滤器初始化={}", filterConfig.getFilterName());

// 得到在web.xml文件中配置的初始化参数
String author = filterConfig.getInitParameter("author");
log.info("author={}", author);

// 返回过滤器的所有初始化参数的名字的枚举集合。
Enumeration<String> initParameterNames = filterConfig.getInitParameterNames();
log.info("是否存在初始化参数集={}", initParameterNames.hasMoreElements());
while (initParameterNames.hasMoreElements()) {
String paramName = initParameterNames.nextElement();
log.info("paramName={}", paramName);
}
}

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain)
throws IOException, ServletException {
// 对 request 和 response 进行一些预处理
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");

log.info("execute before");
// 让目标资源执行,放行
filterChain.doFilter(request, response);
log.info("execute after");
}

@Override
public void destroy() {
log.info("过滤器销毁");
}
}
  • @Order注解表示执行过滤顺序,值越小,越先执行
  • filterName: 指定过滤器的 name 属性
  • urlPatterns: 指定过滤的地址(不包含上下文)
  • initParams: 指定过滤器初始化参数

注意: Application 入口中需要加入 ​​@ServletComponentScan​​ 注解

 

通过继承 Spring 的​​org.springframework.web.filter.OncePerRequestFilter​​来实现过滤器

@Slf4j
@Component
public class MyFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
logger.info("过滤器执行");

filterChain.doFilter(request, response);
}
}


标签:info,log,author,Spring,request,过滤器,WebFilter,response
From: https://blog.51cto.com/u_15891990/5908787

相关文章

  • SpringBoot集成DingTalk钉钉机器人实现消息同步/异步预警推送1.0版本
    V2.0版本新增支持以下功能新增Dinger层对消息对象配置指定钉钉机器人新增Dinger层统一管理消息对象,​​仅支持text和markdown格式​​支持xml方式配置支持注解方式配置新增......
  • Dinger(叮鸽),基于springboot实现的群机器人消息发送中间件入门使用
     一、Dinger是什么Dinger(叮鸽)是一个以SpringBoot框架为基础开发的消息发送中间件,对现有两大移动办公系统​​钉钉​​​和​​企业微信​​的群机器人API做了一层封装......
  • SpringBoot集成Redisson实现分布式锁单机版
    SpringBoot集成Redisson实战案例maven依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></d......
  • SpringBoot使用注解方式集成Redis缓存
    SpringBoot中Redis缓存注解Spring框架中所有的注解都是通过AOP的原理实现的,即Spring框架为我们创建代理对象,代理对象去实现注解的功能。所以当一个支持缓存的方法,在对象内部......
  • Spring ioc的底层实现和特性
    首先,介绍一下spring,spring因为很好用,所以成为了java的行业标准,它在持久成,业务层都有自己的框架(SpringMVC等等。。),同时也可以兼容其他框架(Statu2Mybatis等等)然后就是spr......
  • Spring源码-01-调试代码
    Spring源码-01-调试代码Spring源码工程下新建模块用于调试源码一新建模块名称以spring为前缀二引入依赖plugins{id'java'}group'org.springframework'......
  • SpringBoot整合Mybatis多数据源
    Mybatis中如何配置多数据源一什么情况下会用到多数据库?场景1:一个商城网站,一个游戏网站,商城网站已经做好,游戏网站正在开发,游戏网站上的很多道具需要用到商城网站的产品数据,......
  • SpringBoot整合Mybatis多数据源
    Mybatis中如何配置多数据源一什么情况下会用到多数据库?场景1:一个商城网站,一个游戏网站,商城网站已经做好,游戏网站正在开发,游戏网站上的很多道具需要用到商城网站......
  • Spring Cloud GateWay基于nacos如何去做灰度发布
    如果想直接查看修改部分请跳转动手-点击跳转本文基于ReactiveLoadBalancerClientFilter使用RoundRobinLoadBalancer灰度发布灰度发布,又称为金丝雀发布,是一种新旧版本......
  • 布隆过滤器
    布隆过滤器介绍布隆过滤器(BloomFilter)是1970年由布隆提出的它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中......