Spring学习(2)Spring mvc拦截器


一、Spring提供的拦截器接口和拦截适配器

Spring中提供了拦截器接口HandlerInterceptor和拦截适配器HandlerInterceptorAdapter,可以通过实现接口或者继承自适配器来自定义拦截器。

 

二、拦截器中的方法

以HandlerInterceptor接口为例,有三个方法。

Ø  preHandler方法在action之前调用。(权限控制)

Ø  postHandler方法在生成视图之前调用。

Ø  afterCompletion方法最后执行。(资源释放、异常日志处理)

 

三、自定义拦截器

public classSecurityInteceptor implements HandlerInterceptor {

   @Override

   public booleanpreHandle(HttpServletRequest request, HttpServletResponse response, Objecthandler) throwsException {

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

        return true;

   }

   @Override

   public voidpostHandle(HttpServletRequest request, HttpServletResponse response, Objecthandler,

            ModelAndView modelAndView) throws Exception {

        System.out.println("postHandle start..........");

   }

   @Override

   public voidafterCompletion(HttpServletRequest request, HttpServletResponse response,Object handler, Exception ex)

            throws Exception {

        System.out.println("afterCompletion start.........");

   }

}

 

四、拦截器的配置

Spring拦截器的配置有三种方案:

Ø  拦截所有url

    <mvc:interceptors>

        <bean class="com.sohu.spaces.grap.inteceptor.SecurityInteceptor"/>

    </mvc:interceptors>

 

Ø  根据url匹配拦截

    <mvc:interceptors>

        <mvc:interceptor>

           <mvc:mapping path="/user/*"/>

           <bean class="com.sohu.spaces.grap.inteceptor.SecurityInteceptor"/>

        </mvc:interceptor>

        <mvc:interceptor>

           <mvc:mapping path="/sitemap/*"/>

           <bean class="com.sohu.spaces.grap.inteceptor.SecurityInteceptor"/>

        </mvc:interceptor>

    </mvc:interceptors>

 

Ø  在HandlerMapping上拦截

    <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">      

         <property name="interceptors">      

            <list>      

                <bean class="com.sohu.spaces.grap.inteceptor.SecurityInteceptor"></bean>     

            </list>      

         </property>      

    </bean>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring MVC拦截是一种应用于请求和响应过程中的过滤,可以用于对请求进行预处理、对响应进行后处理,以及在请求到达处理程序之前或处理程序返回响应之后执行某些操作。 在Spring MVC中,拦截是通过实现HandlerInterceptor接口来实现的。该接口定义了三个方法,分别是preHandle()、postHandle()和afterCompletion()。 - preHandle()方法在请求到达处理程序之前执行,可以用于进行身份验证、权限校验等操作,如果该方法返回false,则请求将被拦截并不会到达处理程序。 - postHandle()方法在处理程序完成请求处理后但尚未返回响应时执行,可以用于修改响应或添加一些额外的信息。 - afterCompletion()方法在请求处理完成后执行,无论成功或失败都会执行,可以用于进行资源清理等操作。 要使用拦截,需要在Spring配置文件中进行配置,并将其注册到DispatcherServlet中。 下面是一个简单的拦截示例,用于记录请求处理时间: ```java public class TimeInterceptor implements HandlerInterceptor { private static final Logger LOGGER = LoggerFactory.getLogger(TimeInterceptor.class); @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { request.setAttribute("startTime", System.currentTimeMillis()); return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { long startTime = (long) request.getAttribute("startTime"); long endTime = System.currentTimeMillis(); LOGGER.info("Request URL: {} , Time: {}ms", request.getRequestURL(), endTime - startTime); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { // do nothing } } ``` 在Spring配置文件中进行配置: ```xml <mvc:interceptors> <bean class="com.example.TimeInterceptor" /> </mvc:interceptors> ``` 这样,每次请求处理完成后,日志中就会打印该请求的处理时间,以便进行性能优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值