Spring Servlet 拦截器 过滤器
Spring MVC Handler拦截器用例
Spring MVC HandlerInterceptor Example
Spring HandlerInterceptor 与 Servlet 过滤器类似, Servlet 过滤器更强大些, 不过它只能在 web.xml 中配置( 正如对 DispatcherServlet 的配置一样, 译者注 ), 而 HandlerInterceptor 可通过 Spring 应用上下文 xml 文件和 Java 代码配置, HandlerInterceptor 可以用来避免重复的处理程序代码, 比如用作认证检测, 区域检查等不同用途.
在 Java 中, 我们可以重写 WebMvcConfigurerAdapter#addInterceptors( InterceptorRegistry ) 方法, 该回调方法在参数中提供了一个 InterceptorRegistry 对象,
使用 InterceptorRegistry#addInterceptor( HandlerInterceptor ) 方法可以向 Spring 注入 HandlerInterceptor 接口, 该接口有适配器 HandlerInterceptorAdapter.
InterceptorRegistry#addInterceptor( HandlerInterceptor ) 方法返回一个 InterceptorRegistration,允许您进一步配置已注册的拦截器,例如添加应该应用的URL模式。
HandlerInterceptor 接口有三个方法:
preHandle(): It is executed before actual handler is executed. 在实际处理之前执行, 返回值是布尔类型, false 取消处理
postHandle(): It is executed after handler is executed. 在实际处理之后执行
afterCompletion(): It is executed after the complete request is finished. 在完成请求后执行
import ...@EnableMvc
@ComponetScan(basePackageClasses = { Index.class })
public final class MyWebAppInitializer extends WebConfigAdapter {@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor( new HandlerInterceptorAdapter() {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {return true; // 继续处理}}).addPathPatterns("/*", "/*.jpg");//}...
}
如果不调用 addPathPatterns( String... ) , 则会匹配所有 RequestMapping
Spring 过滤器用例
javax.servlet
Interface Filter
All Known Implementing Classes:
GenericFilter, HttpFilter
default void destroy()
//Called by the web container to indicate to a filter that it is being taken out of service.void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
//The doFilter method of the Filter is called by the container each time a request/response pair is passed through the chain due to a client request for a resource at the end of the chain.default void init(FilterConfig filterConfig)
//Called by the web container to indicate to a filter that it is being placed into service.
实现效果:
package club.init;import java.io.IOException;
import java.util.Enumeration;import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class StaticResourceFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {}@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {intercept((HttpServletRequest)request, (HttpServletResponse)response, chain);}public void intercept(HttpServletRequest request, HttpServletResponse response, FilterChain chain) {// 添加服务器名try {response.addHeader("Server", "Fast Tomcat");} catch (Exception e) {e.printStackTrace();}// 获取 referEnumeration<String> headers = request.getHeaderNames();String refer = null;String content = "GET " + request.getRequestURI() + "\n";while (headers.hasMoreElements()) {String header = headers.nextElement();content += String.format("%s : %s\n", header, request.getHeader(header));if ("referer".equals(header)) {refer = request.getHeader(header);break;}}Log.d(content);if (request.getRequestURI().matches(".*\\..+")) {// 静态资源if (refer == null || !refer.matches("https?://abc.com/.*")) {response.setStatus(404);response.addHeader("Error", "You can't use this resource without abc.com");return;}response.addHeader("Content-Disposition", String.format("attachment; filename*=UTF-8''%s", request.getRequestURI().replaceAll(".*/", "")));}try {chain.doFilter(request, response);} catch (IOException | ServletException e) {e.printStackTrace();}}}
最好使用 HttpFilter 这个类
这里有一个使用过滤器的项目: https://github.com/develon2015/Spring-filter
转载于:https://www.cnblogs.com/develon/p/11503814.html
Spring Servlet 拦截器 过滤器相关推荐
- spring boot拦截器 过滤器
1.拦截器 登录拦截 自定义拦截路径 //全局配置继承WebMvcConfigurer接口 @Configuration public class MyHandler implements WebMv ...
- spring拦截器-过滤器的区别
1. 理解 拦截器 :是在面向切面编程的时候,在你的 service 或者一个方法前调用一个方法,或者在方法后调用一个方法:比如动态代理就是拦截器的简单实现,在你调用方法前打印出字符串(或者做其它业 ...
- Spring MVC拦截器~~~登陆验证拦截
[ 30 分 钟 轻 松 入 门 Spring MVC][web 三 大 组 件 之 ~ ~ Filter 过 滤 器] Interceptor 拦截器学习: 1.了解spring mvc拦截器的概念 ...
- java过滤器原理,拦截器,过滤器,监听器 区别及执行顺序
本文引用该作者(花开半夏)著作内容,觉得写的很好,记录一下便于回看防止失踪,更多详情请查看原作者. 同时还搜罗了其他便于理解的博文感兴趣的可以看看促进理解 拦截器,过滤器,监听器执行顺序(被拦截个人过 ...
- 使用session监听+spring MVC拦截器禁止用户重复登录
在许多web项目中,需要禁止用户重复登录.一般来说有两种做法: 一是在用户表中维护一个字段isOnLine(是否在线),用户登录时,设定值为true,用户退出时设定为false,在重复登录时,检索到该 ...
- Spring Boot拦截器(WebMvcConfigurerAdapter)
直接按我的步骤走都没有问题: 1 配置自定义的拦截器: package com.configs;import org.slf4j.Logger; import org.slf4j.LoggerFact ...
- 【Java Web开发学习】Spring MVC 拦截器HandlerInterceptor
[Java Web开发学习]Spring MVC 拦截器HandlerInterceptor 转载:https://www.cnblogs.com/yangchongxing/p/9324119.ht ...
- 从零开始学 Java - Spring AOP 拦截器的基本实现
一个程序猿在梦中解决的 Bug 没有人是不做梦的,在所有梦的排行中,白日梦最令人伤感.不知道身为程序猿的大家,有没有睡了一觉,然后在梦中把睡之前代码中怎么也搞不定的 Bug 给解决的经历?反正我是有过 ...
- Java Spring MVC框架 VIII 之 Spring MVC拦截器
Java Spring MVC框架 VIII 之 Spring MVC拦截器 Spring MVC拦截器 1.拦截器简介 拦截器是SpringMvc框架提供的功能 它可以在控制器方法运行之前或运行之后 ...
- spring mvc 拦截器拦截jsp页面
spring mvc 拦截器怎么拦截jsp页面 你这个 是拦截带 /jsp 的 .do请求 解决方案 用spring 的拦截器 去拦截 所有的 .do 请求, 然后写一个 过滤器去拦截 所有的.jsp ...
最新文章
- 粒子滤波在图像跟踪领域的实践
- javascript读取txt_JavaScript编程语言学习笔记——编程
- java 使用jasper_使用Jasper Reports以Java创建报告
- ZJU期末考试记录(研究生)——数据挖掘
- “双十一”即将来临,先来看看快递物流企业的大数据
- 算法导论-堆排序习题解
- 微软自带报ocienvcreate失败_微软推出的免费神器,治好了我的拖延症!
- 时尚高端电商网页设计素材
- 设计软件哪里找?图片素材哪里找?
- 计划任务文件 linux,Linux计划任务Crontab学习笔记(3):配置文件
- MySQL数据库修改密码忘记密码
- 如何用EasyRecovery找回删除的文档(附注册机下载地址)
- syn重发_TCP/IP中SYN,FIN的缩写意思
- win7网络里计算机登录失败,Win7访问网上邻居提示“登陆失败”原因及解决方法...
- 华为云上传docker镜像
- ACA云原生3阿里云容器产品体系
- static变量和普通变量的区别
- eBay 大数据平台的 HDFS 性能优化实践
- 城固一中2021高考成绩查询,汉中市各高中2020年高考喜报成绩一览
- 18山东省夏令营游记
热门文章
- 数据库 备份 压缩
- Affinity Designer 查询面板渐变颜色
- SpringBoot+JSON+AJAX+ECharts+Fiddler实现前后端分离开发可视化(进阶篇)
- 帮你轻松理解Commonjs、AMD、CMD、ES6的区别
- ExecutorService中submit和execute、Runnable和Callable
- C++17特性一览(转载)
- vba自动生成html,动态生成嵌入在VBA电子邮件生成中的HTML表
- Vmware使用net模式共享虚拟机linux IP
- (day 15 - 双指针)剑指 Offer 18. 删除链表的节点
- 计算机集群用什么网络,什么是计算机系统集群?