注意:此文章是个人原创。希望有转载须要的朋友们标明文章出处。假设各位朋友们认为写的还好,就给个赞哈。你的鼓舞是我创作的最大动力,LinusZhu在此表示十分感谢,当然文章中如有纰漏,请联系linuszhu@163.com,敬请朋友们斧正,谢谢。
这部分主要解说SpringMVC的拦截器的部分。会带着大家完毕定义拦截器的两种方式的实例。不多说了。開始……
SpringMVC的拦截器主要是用于拦截用户的请求,而且进行对应的处理,如:权限验证、推断登录等。
定义拦截器的两种方式,例如以下:
1. 实现接口:
org.springframework.web.servlet.HandlerInterceptor
接口中有例如以下方法须要重写:
注意:參数中的Object handler是下一个拦截器。
a) public boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler) throws Exception
该方法在action运行前运行,能够实现对数据的预处理,比方:编码、安全控制等。
假设方法返回true,则继续运行action。
b) public void postHandle(HttpServletRequest request,HttpServletResponse response, Object handler,ModelAndView modelAndView) throws Exception
该方法在action运行后,生成视图前运行。
在这里,我们有机会改动视图层数据。
c) public void afterCompletion(HttpServletRequest request,HttpServletResponse response, Object handler, Exception ex)throws Exception
最后运行,通经常使用于释放资源,处理异常。我们能够依据ex是否为空。来进行相关的异常处理。由于我们在平时处理异常时。都是从底层向上抛出异常,最后到了spring框架从而到了这种方法中。
2. 继承适配器类:
org.springframework.web.servlet.handler.HandlerInterceptorAdapter
这个适配器实现了HandlerInterceptor接口。提供了这个接口中全部方法的空实现。
以下是我定义的两中实现拦截器的演示样例代码,仅供大家參考:
//方式1
package interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
public class MyInterceptor implements HandlerInterceptor {
@Override
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex)
throws Exception {
System.out.println("zxs-最后运行!
!!一般用于释放资源!!");
}
@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
System.out.println("zxs-Action运行之后。生成视图之前运行。!
");
}
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
System.out.println("zxs-action之前运行。!
。");
return true; // 继续运行action
}
}
//方式2
package interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
public class MyInterceptor2 extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
System.out.println("MyInterceptor2.preHandle()");
return true; // 继续运行action
}
}
3. springmvc-servlet.xml中怎样加入例如以下配置,使用拦截器:
<mvc:interceptors>
<!-- 拦截器1会拦截全部.do请求 -->
<bean class="interceptor.MyInterceptor"></bean>
<!-- 拦截器2会拦截user.do请求 -->
<mvc:interceptor>
<mvc:mapping path="/user.do" />
<bean class="interceptor.MyInterceptor2"></bean>
</mvc:interceptor>
</mvc:interceptors>
转载于:https://www.cnblogs.com/bhlsheji/p/5362191.html