SpringMvc拦截器

目录

一、拦截器的介绍

二、拦截器的使用       

 (1)控制器

(2)创建拦截器类

(3)jsp页面

(4)在SpringMvc核心配置文件中配置拦截器

三、全局拦截器

 四、拦截器案例


一、拦截器的介绍

SpringMVC的拦截器(Interceptor)也是AOP思想的一种实现方式。它与Servlet的过滤器(Filter)功能类似,主要用于拦截用户的请求并做相应的处理,通常应用在权限验证、记录请求信息的日志、判断用户是否登录等功能上。

拦截器和过滤器的区别

  • 拦截器是SpringMVC组件,而过滤器是Servlet组件。
  • 拦截器不依赖Web容器,过滤器依赖Web容器。
  • 拦截器只能对控制器请求起作用,而过滤器则可以对所有的请求起作用。
  • 拦截器可以直接获取IOC容器中的对象,而过滤器就不太方便获取。

二、拦截器的使用       

 (1)控制器

(2)创建拦截器类

该类实现HandlerInterceptor接口,需要重写三个方法:

  • preHandle:请求到达Controller前执行的方法,返回值为true通过拦截器,返回值为false被拦截器拦截。
  • postHandle:跳转到JSP前执行的方法
  • afterCompletion:跳转到JSP后执行的方法
  • public class Interceptor1 implements HandlerInterceptor {
    //请求到达controller前执行
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
           System.out.println("到达controller前");
    //返回值是false无法到达controller
           return true;
        }
    
    //跳转到jsp前执行,此时可以向request域请求数据
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
           System.out.println("跳转到jsp前");
           request.setAttribute("name","opopopop");
        }
    
    //跳转到jsp后执行,此时不可向request域添加数据
        @Override
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
           System.out.println("跳转到jsp后");
           request.setAttribute("age","9090");
        }
    }
    

(3)jsp页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h3>name=${requestScope.name}</h3>
<h3>age=${requestScope.age}</h3>


</body>
</html>

 

(4)在SpringMvc核心配置文件中配置拦截器

 <!-- 配置拦截器-->
    <mvc:interceptors>
        <mvc:interceptor>
            <!-- 配置拦截器的作用路径-->
            <mvc:mapping path="/**"/>
            <!-- 拦截器对象 -->
            <bean class="com.gq.MyInterceptor.Interceptor1"/>
        </mvc:interceptor>
    </mvc:interceptors>

三、全局拦截器

全局拦截器可以拦截所有控制器处理的URL,作用等于/**,其实就跟上面的一样,只不过这个写的更简单吧,配置方式如下:

<!-- 配置拦截器 -->
<mvc:interceptors>  
  <!-- 全局拦截器 -->  
  <bean class="com.itbaizhan.interceptor.MyInterceptor">
  </bean>
</mvc:interceptors>

 四、拦截器案例

将敏感词换成***

// 敏感词拦截器
public class SensitiveWordInterceptor implements HandlerInterceptor {
  @Override
  public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
    return true;
   }


  @Override
  public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
    // 敏感词列表
    String[] sensitiveWords = {"坏人","暴力","笨蛋"};
    // 获取model中所有数据
    Map<String, Object> model = modelAndView.getModel();
    Set<Map.Entry<String, Object>> entries = model.entrySet();


    // 遍历model
    for (Map.Entry<String, Object> entry : entries) {
      String key = entry.getKey();
      String value = entry.getValue().toString();
      // 将model值和敏感词列表遍历比对
      for (String sensitiveWord : sensitiveWords) {
        // 如果model值包含敏感词,则替换
        if(value.contains(sensitiveWord)){
          String newStr = value.replaceAll(sensitiveWord, "***");
          model.put(key, newStr);
         }
       }
     }
   }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜到极致就是渣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值