023 SpringMVC拦截器

时间:2023-03-09 19:35:12
023 SpringMVC拦截器

一:拦截器的HelloWorld

1.首先自定义拦截器

  只要实现接口就行。

 package com.spring.it.interceptors;

 import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView; public class FirstInterceptor implements HandlerInterceptor{ @Override
public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
throws Exception {
System.out.println("afterCompletion"); } @Override
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
throws Exception {
System.out.println("postHandle"); } @Override
public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
System.out.println("preHandle");
return true;
}
}

2.自定义拦截器

 <mvc:interceptors>
<!-- 配置自定义拦截器 -->
<bean class="com.spring.it.interceptors.FirstInterceptor"></bean> <!-- 配置LocaleChangeInterceter拦截器 -->
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"></bean>
</mvc:interceptors>

3.效果

  重启,然后随便点一个链接

  023 SpringMVC拦截器

4.说明

  preHandler:如果返回true,则继续调用后续的拦截器和目标方法

        如果返回false,则不再进行调用后续的拦截器和目标方法

        可以考虑做权限,日志,事务

  postHandler:调用目标方法之后,但是在渲染视图之前

        可以对请求域中的属性或者视图做出修改。

  dftercompletion:渲染视图之后被调用

          释放资源。

5.调用顺序

  023 SpringMVC拦截器

二:拦截器的配置

1.配置拦截器的作用路径

    <mvc:interceptors>
<!-- 配置自定义拦截器 -->
<bean class="com.spring.it.interceptors.FirstInterceptor"></bean>
<!-- 配置拦截器的作用路径 -->
<mvc:interceptor>
<mvc:mapping path="/emps"/>
<bean class="com.spring.it.interceptors.SecondInterceptor"></bean>
</mvc:interceptor> <!-- 配置LocaleChangeInterceter拦截器 -->
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"></bean>
</mvc:interceptors>

2.效果

  023 SpringMVC拦截器

三:拦截器的执行顺序

1.图说明

  023 SpringMVC拦截器

2.注意点

  如果second中的preHandler中返回false。

  虚线中的都不再执行。

  023 SpringMVC拦截器