没有合适的资源?快使用搜索试试~ 我知道了~
[] - 2023-01-07 SpringBoot 过滤器、拦截器、监听器对比及使用场景.pdf
需积分: 0 0 下载量 63 浏览量
2023-12-11
21:37:27
上传
评论
收藏 1.64MB PDF 举报
温馨提示
试读
17页
互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术,人工智能
资源推荐
资源详情
资源评论
SpringBoot 过滤器、拦截器、监听器对比及使用场景
图片
二、区别
1.过滤器
过滤器是在web应用启动的时候初始化一次, 在web应用停止的时候销毁
可以对请求的URL进行过滤, 对敏感词过滤
挡在拦截器的外层
实现的是 javax.servlet.Filter 接口,是 Servlet 规范的一部分
在请求进入容器后,但在进入servlet之前进行预处理,请求结束是在servl
et处理完以后
依赖Web容器
会多次执行
1.1HttpServletRequestWrapper
在 请 求 到 达 之 前 对 r e q u e s t 进 行 修 改
package com.dingwen.lir.filter;
import lombok.extern.slf4j.Slf4j;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import java.util.Arrays;
/**
* 在请求到达之前对 request 进行修改
*
* @author dingwen
*/
@Slf4j
public class RequestWrapper extends HttpServletRequestWrapper {
public RequestWrapper(HttpServletRequest request) {
super(request);
log.info("RequestWrapper");
}
@Override
public String getParameter(String name) {
// 可以对请求参数进行过滤
return super.getParameter(name);
}
@Override
public String[] getParameterValues(String name) {
// 对请求参数值进行过滤
// String[] values =super.getRequest().getParameterValues(name);
// return super.getParameterValues(name);
return "t e s t".split(" ");
}
}
1.2 OncePerRequestFilter
O n c e P e r R e q u e s t F i l t e r , 顾 名 思 义 , 它 能 够 确 保 在 一 次 请 求
中 只 通 过 一 次 f i l t e r
package com.dingwen.lir.filter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.filter.OncePerRequestFilter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Arrays;
/**
* 请求过滤器
* OncePerRequestFilter:
* OncePerRequestFilter,顾名思义,它能够确保在一次请求中只通过一次filter.
* 大家常识上都认为,一次请求本来就只filter一次,为什么还要由此特别限定呢,往往我们的
常识和实际的实现并不真的一样,经过一番资料的查阅,此方法是为了兼容不同的web container
,
* 也就是说并不是所有的container都入我们期望的只过滤一次,servlet版本不同,执行过程
也不同,
* 因此,为了兼容各种不同运行环境和版本,默认filter继承OncePerRequestFilter是一个
比较稳妥的选择。
*
* @author dingwen
*/
@Slf4j
public class RequestFilter extends OncePerRequestFilter {
@Override
public void destroy() {
super.destroy();
log.info("RequestFilter destroy");
}
/*
OncePerRequestFilter.doFilter方法中通过request.getAttribute判断当
前过滤器是否已执行
若未执行过,则调用doFilterInternal方法,交由其子类实现
*/
@Override
protected void doFilterInternal(HttpServletRequest httpServletRequest, H
ttpServletResponse httpServletResponse, FilterChain filterChain) throws Serv
letException, IOException {
try {
RequestWrapper requestWrapper = new RequestWrapper(httpServletRe
quest);
filterChain.doFilter(requestWrapper, httpServletResponse);
log.info("RequestFilter");
log.info(Arrays.toString(requestWrapper.getParameterValues("name
")));
} catch (Exception exception) {
httpServletResponse.setCharacterEncoding("utf-8");
httpServletResponse.setContentType("application/json; charset=ut
f-8");
PrintWriter writer = httpServletResponse.getWriter();
writer.write(exception.toString());
}
}
}
1.3 配置
package com.dingwen.lir.configuration;
剩余16页未读,继续阅读
资源评论
毕业小助手
- 粉丝: 2023
- 资源: 1712
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功