前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >深度学习springMVC(六)一篇文章讲清楚 SpringMVC的拦截器(看不懂你打我)

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

作者头像
一写代码就开心
发布2021-07-08 15:24:19
3960
发布2021-07-08 15:24:19
举报
文章被收录于专栏:java和pythonjava和python

目录

回顾过滤器

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>

拦截器参数

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-07-04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目录
  • 回顾过滤器
  • SpringMVC拦截器的介绍
    • 问题:
      • 拦截器执行位置
        • 解决方案:
          • 拦截器的执行时机:
            • 拦截器的作用:
              • 拦截器的使用:
                • 代码实现
                  • 拦截器参数
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档