Spring xml配置式的拦截器
传统的xml配置式使用拦截器拦截请求。
一、Web.xml配置
在Web.xml 配置Spring核心控制器DispatcherServlet接收所有请求。
<servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping><servlet-name>springmvc</servlet-name><url-pattern>/</url-pattern>
</servlet-mapping>
二、不拦截静态资源
如果配置拦截类似于*.do格式的拦截规则,则对静态资源的访问是没有问题的,但是如果配置拦截了所有的请求(如我们上面配置的“/”),就会造成js文件、css文件、图片文件等静态资源无法访问。
拦截器的主要作用是是用于权限管理,拦截不合理的URL,所以不对静态资源进行拦截
主要过滤方式有以下几种:
方案一:使用mvc:resources/ (mapping:请求,location:映射地址,注意必须是webapp根目录下的路径。)
spring配置文件:applicationContext-mvc.xml
<mvc:resources mapping="/css/**" location="/css/"/>
<mvc:resources mapping="/images/**" location="/img/"/>
<mvc:resources mapping="/js/**" location="/js/"/>
方案二:激活 Tomcat 的 defaultServlet 来处理静态资源
web.xml
<servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>/js/*</url-pattern> <url-pattern>*.css</url-pattern> <url-pattern>/images/*</url-pattern> </servlet-mapping>
三、编写拦截器
SpringMVC的拦截器HandlerInterceptorAdapter对应提供了三个preHandle,postHandle,afterCompletion方法。
preHandle在业务处理器处理请求之前被调用。
postHandle在业务处理器处理请求执行完成后,生成视图之前执行。
afterCompletion在DispatcherServlet完全处理完请求后被调用,可用于清理资源等 。
所以要想实现自己的权限管理逻辑,需要继承HandlerInterceptorAdapter并重写其三个方法。
package com.smallpig.web.interceptor;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;import com.smallpig.entity.User;public class Login extends HandlerInterceptorAdapter{private static final String[] IGNORE_URL = {"/login.jsp", "/regedit.jsp"};@Overridepublic boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler) throws Exception {boolean flag = false;String url = request.getRequestURL().toString();//不拦截上面定义的路径for (String str : IGNORE_URL) {if (url.contains(str)) {flag = true;break;}}if (!flag) {User user = (User)request.getSession().getAttribute("users");if (user != null) flag = true;elseresponse.sendRedirect("/login.jsp"); return false;}return true;}@Overridepublic void postHandle(HttpServletRequest request,HttpServletResponse response, Object handler,ModelAndView modelAndView) throws Exception {}@Overridepublic void afterCompletion(HttpServletRequest request,HttpServletResponse response, Object handler, Exception ex)throws Exception {}
}
四、配置拦截器
在applicationContext-mvc.xml中加入自己定义的拦截器。
<!-- 拦截器 -->
<mvc:interceptors><mvc:interceptor> <!-- 匹配的是url路径, 如果不配置或/**,将拦截所有的Controller --><mvc:mapping path="/**" /><!-- 拦截器类 --> <bean class="com.smallpig.web.interceptor.LoginInterceptor"></bean></mvc:interceptor><!-- 当设置多个拦截器时,先按顺序调用preHandle方法,然后逆序调用每个拦截器的postHandle和afterCompletion方法 -->
</mvc:interceptors>
Spring xml配置式的拦截器相关推荐
- 【框架】[Spring]XML配置实现AOP拦截-切点:JdkRegexpMethodPointcut
转载请注明出处:http://blog.csdn.net/qq_26525215 本文源自[大学之旅_谙忆的博客] 如果你把此种纯Java方式实现AOP拦截读懂了,理解本篇博客会更容易. [框架][S ...
- spring xml 配置transactionManager事务管理器踩的坑
transaction-manager默认为transactionManager 我把DataSourceTransactionManager的bean的id写成了dataSourceTransact ...
- Spring Boot——自定义多个拦截器(HandlerInterceptor)配置方法与执行顺序
执行顺序 源代码 拦截器类 package com.jd.m.tg.interceptor;import org.slf4j.Logger; import org.slf4j.LoggerFactor ...
- Spring AOP 源码分析 - 拦截器链的执行过程
1.简介 本篇文章是 AOP 源码分析系列文章的最后一篇文章,在前面的两篇文章中,我分别介绍了 Spring AOP 是如何为目标 bean 筛选合适的通知器,以及如何创建代理对象的过程.现在我们的得 ...
- springboot _配置过滤器、拦截器、使用原生servlet
配置过滤器.拦截器.使用原生servlet 过滤器和拦截器的根本区别 过滤器是servlet规范规定的,只能用于web程序中,而拦截器是在spring容器中,它不依赖servlet容器. 拦截器属于S ...
- Spring Boot细节挖掘(拦截器)
拦截器的原理很简单,是 AOP 的一种实现,专门拦截对动态资源的后台请求,即拦截对控制层的请求.常见的使用场景包括判断用户是否有权限请求后台,再拔高一层的使用场景,比如拦截器可以结合 WebSocke ...
- Spring AOP源码解析-拦截器链的执行过程
一.简介 在前面的两篇文章中,分别介绍了 Spring AOP 是如何为目标 bean 筛选合适的通知器,以及如何创建代理对象的过程.现在得到了 bean 的代理对象,且通知也以合适的方式插在了目标方 ...
- Spring xml 配置使用外部config 文件
Spring xml 配置使用外部config 文件 当使用Spring framework后, 我们一般会把db connection的信息写在spring的bean config xml里面. 例 ...
- Vue配置axios响应拦截器
一个项目会发送很多请求到后端,每个请求都有如下的响应 不想每个请求都去判断里面的status,那么可以使用axios的响应拦截器,对服务端返回的一些相同点做统一的处理 比如说如果有报错,就统一弹出这么 ...
最新文章
- 单例模式的标准写法、注意事项、作用及测试
- 在项目中引入领域驱动设计的经验
- poi excel 隐藏标识_纳尼?Excel竟然自带项目管理模板
- 多播程序设计(基于UDP协议)
- 亲身体验Intellij Idea从卡顿到顺畅
- 智慧交通day02-车流量检测实现06:目标估计模型-卡尔曼滤波
- SPS2003升级到MOSS2007相关资料及问题总结
- Python-爬取我去图书馆座位编码
- fatal error: GL/glut.h: 没有那个文件或目录
- php如何无水印解析快手,快手短视频无水印解析过程及代码
- Android: eoeAndroid ~
- 房友系统服务器地址,房友系统的那些功能,你都知道吗?
- 后台管理系统开发缺陷日志
- 矩阵转置+矩阵相加(三元组)
- php抽奖的数字滚动器,JS数字抽奖游戏实现方法
- 高质量程序设计指南(笔记)
- 滴滴快车奖励政策,高峰奖励,翻倍奖励,按成交率,指派单数分级(10月17日~10月23日)...
- opencv学习笔记---如何看懂照片的直方图
- [习题]综合练习 -- SqlDataSource精灵就能完成,[山寨版] Dynamic Data WebSite
- 新购笔记本电脑验机方法(看是否是新机)