深度学习springMVC(六)一篇文章讲清楚 SpringMVC的拦截器(看不懂你打我)

2021-07-08 15:24:19 浏览数 (1)

目录

  • 回顾过滤器
  • SpringMVC拦截器的介绍
    • 问题:
    • 拦截器执行位置
    • 解决方案:
    • 拦截器的执行时机:
    • 拦截器的作用:
    • 拦截器的使用:
    • 代码实现
    • 拦截器参数

回顾过滤器

javaee的OA项目(六)过滤器的使用,解决中文乱码的过滤器和使用过滤器实现拦截判断

SpringMVC拦截器的介绍

问题:

在之前学习Servlet的时候,我们学习了过滤器的知识。过滤器的作用是保护

请求的服务器资源,在请求资源被执行之前,如果请求地址符合拦截范围,则

会先执行过滤器。过滤器的执行时机,是在Servlet之前执行的。但是在使用 了SpringMVC后,Servlet只有一个了,也就是DisptcherServlet。那么,如果我 们仍然使用过滤器来完成请求的拦截,因为过滤器是在Servlet之前执行的, 就会造成,过滤器会拦截DispatcherServlet所有的请求。那么,如果我们有

部分请求不想被拦截,怎么办?

拦截器执行位置

解决方案:

使用拦截器。

拦截器的执行时机:

在DispatcherServlet之后,单元方法之前。

拦截器的作用:

对单元方法的请求进行过滤或者其他操作。

拦截器的使用:

①创建实现了指定接口的java类

②在拦截器类中声明对应的功能代码

在springMVC的配置文件中配置拦截器的bean及其拦截范围

代码实现

①创建实现了HandlerInterceptor接口的java类,并复写方法。

代码语言:javascript复制
public class MyInterceptor implements HandlerInterceptor {
    @Autowired
    private MyController myController;




    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println(handler instanceof HandlerMethod);
        //反射调用单元方法
            /*HandlerMethod hm= (HandlerMethod) handler;
            Method method = hm.getMethod();
            method.invoke(myController,null);*/

        System.out.println("MyInterceptor.preHandle");

        return true;
    }




    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        //重新设定要跳转的资源路径
            //modelAndView.setViewName("forward:/bb.jsp");
       //对Model对象中流转的数据进行处理,和谐敏感词汇
            Map<String, Object> model = modelAndView.getModel();
        //获取流转的数据
            String str = (String) model.get("str");
         //判断是否有敏感词汇,有则和谐
            if(str.contains("中国")){
                str = str.replaceAll("中国", "**");
            }
            model.put("str",str);
        System.out.println("MyInterceptor.postHandle");
    }





    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        if(ex!=null){
            System.out.println("----" ex.getMessage());
        }
        System.out.println("MyInterceptor.afterCompletion");
    }
}
代码语言:javascript复制
    <!--配置拦截器-->
        <mvc:interceptors>
            <mvc:interceptor>
                <mvc:mapping path="/demo"/>
                <bean id="my" class="com.interceptor.MyInterceptor"></bean>
            </mvc:interceptor>
        </mvc:interceptors>

拦截器参数

0 人点赞