传统的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配置式的拦截器相关推荐

  1. 【框架】[Spring]XML配置实现AOP拦截-切点:JdkRegexpMethodPointcut

    转载请注明出处:http://blog.csdn.net/qq_26525215 本文源自[大学之旅_谙忆的博客] 如果你把此种纯Java方式实现AOP拦截读懂了,理解本篇博客会更容易. [框架][S ...

  2. spring xml 配置transactionManager事务管理器踩的坑

    transaction-manager默认为transactionManager 我把DataSourceTransactionManager的bean的id写成了dataSourceTransact ...

  3. Spring Boot——自定义多个拦截器(HandlerInterceptor)配置方法与执行顺序

    执行顺序 源代码 拦截器类 package com.jd.m.tg.interceptor;import org.slf4j.Logger; import org.slf4j.LoggerFactor ...

  4. Spring AOP 源码分析 - 拦截器链的执行过程

    1.简介 本篇文章是 AOP 源码分析系列文章的最后一篇文章,在前面的两篇文章中,我分别介绍了 Spring AOP 是如何为目标 bean 筛选合适的通知器,以及如何创建代理对象的过程.现在我们的得 ...

  5. springboot _配置过滤器、拦截器、使用原生servlet

    配置过滤器.拦截器.使用原生servlet 过滤器和拦截器的根本区别 过滤器是servlet规范规定的,只能用于web程序中,而拦截器是在spring容器中,它不依赖servlet容器. 拦截器属于S ...

  6. Spring Boot细节挖掘(拦截器)

    拦截器的原理很简单,是 AOP 的一种实现,专门拦截对动态资源的后台请求,即拦截对控制层的请求.常见的使用场景包括判断用户是否有权限请求后台,再拔高一层的使用场景,比如拦截器可以结合 WebSocke ...

  7. Spring AOP源码解析-拦截器链的执行过程

    一.简介 在前面的两篇文章中,分别介绍了 Spring AOP 是如何为目标 bean 筛选合适的通知器,以及如何创建代理对象的过程.现在得到了 bean 的代理对象,且通知也以合适的方式插在了目标方 ...

  8. Spring xml 配置使用外部config 文件

    Spring xml 配置使用外部config 文件 当使用Spring framework后, 我们一般会把db connection的信息写在spring的bean config xml里面. 例 ...

  9. Vue配置axios响应拦截器

    一个项目会发送很多请求到后端,每个请求都有如下的响应 不想每个请求都去判断里面的status,那么可以使用axios的响应拦截器,对服务端返回的一些相同点做统一的处理 比如说如果有报错,就统一弹出这么 ...

最新文章

  1. 单例模式的标准写法、注意事项、作用及测试
  2. 在项目中引入领域驱动设计的经验
  3. poi excel 隐藏标识_纳尼?Excel竟然自带项目管理模板
  4. 多播程序设计(基于UDP协议)
  5. 亲身体验Intellij Idea从卡顿到顺畅
  6. 智慧交通day02-车流量检测实现06:目标估计模型-卡尔曼滤波
  7. SPS2003升级到MOSS2007相关资料及问题总结
  8. Python-爬取我去图书馆座位编码
  9. fatal error: GL/glut.h: 没有那个文件或目录
  10. php如何无水印解析快手,快手短视频无水印解析过程及代码
  11. Android: eoeAndroid ~
  12. 房友系统服务器地址,房友系统的那些功能,你都知道吗?
  13. 后台管理系统开发缺陷日志
  14. 矩阵转置+矩阵相加(三元组)
  15. php抽奖的数字滚动器,JS数字抽奖游戏实现方法
  16. 高质量程序设计指南(笔记)
  17. 滴滴快车奖励政策,高峰奖励,翻倍奖励,按成交率,指派单数分级(10月17日~10月23日)...
  18. opencv学习笔记---如何看懂照片的直方图
  19. [习题]综合练习 -- SqlDataSource精灵就能完成,[山寨版] Dynamic Data WebSite
  20. 新购笔记本电脑验机方法(看是否是新机)

热门文章

  1. 一分钟快速利用ChatGPT生成PPT
  2. 计算机病毒原理与防治技术
  3. Shopee ClickHouse 冷热数据分离存储架构与实践
  4. 漂流瓶系统的设计与实现
  5. jsp图片上传提交前,图片显示在页面上
  6. Git 项目迁移yyl
  7. 莫西莫西是错的?你不知道的日语电话姿势
  8. 中建五局协同设置服务器无响应,体系管理信息系统
  9. apple 组织者开发者账号申请 2022 4月
  10. 我的书单(持续更新)