概述
自定义的拦截器
-
Spring MVC也可以使用拦截器对请求进行拦截处理,用户可以自定义拦截器来实现特定的功能,自定义的拦截器必须实现HandlerInterceptor接口
-
preHandler():这个方法在业务处理器处理请求之前被调用,在该方法中对用户请求request进行处理。如果程序员决定该拦截器对请求进行拦截处理后还要调用其他的拦截器,或者是业务处理器对进行处理,则返回true;如果程序员决定不需要再调用其他的组件去处理请求,则返回false。
/** * 该方法在目标方法之前被调用。 * 若返回值为true,则继续调用后续的拦截器和目标方法 * 若返回值为false,则不会再调用后续的拦截器和目标方法 * * 可以考虑做权限。日志,事务等。 */
-
postHandler():这个方法在业务处理器处理完请求后,但是DispatcherServlet向客户端返回响应前被调用,在该方法中对用户请求request进行处理。
/** * 调用目标方法之后,但渲染视图之前。 * 可以对请求域中的属性或视图做出修改。 */
-
afterCompletion():这个方法在DispatcherServlet完全处理完请求后被调用,可以在该方法中进行一些资源清理的操作。
/** * 渲染视图之后被调用。释放资源。 */
-
举个例子:
第一步:创建一个包interceptor用来存放我们自定义的拦截器,并且创建一个FirstInterceptor拦截器类
FirstInterceptor.java
package com.springmvc.interceptors;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class FirstInterceptor implements HandlerInterceptor {
/**
* 该方法在目标方法之前被调用。
* 若返回值为true,则继续调用后续的拦截器和目标方法
* 若返回值为false,则不会再调用后续的拦截器和目标方法
*
* 可以考虑做权限。日志,事务等。
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("[FirstInterceptor] preHandle");
return true;
}
/**
* 调用目标方法之后,但渲染视图之前。
* 可以对请求域中的属性或视图做出修改。
*/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("[FirstInterceptor] postHandle");
}
/**
* 渲染视图之后被调用。释放资源。
*/
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("[FirstInterceptor] afterCompletion");
}
}
第二步:在Springmvc.xml配置这个拦截器
<mvc:interceptors>
<!--配置自定义的拦截器-->
<bean class="com.springmvc.interceptors.FirstInterceptor"></bean>
</mvc:interceptors>
第三步:直接运行之前的界面并且点击任意的< a>标签
tips:
拦截器的配置
1.首先我们在interceptor包中新建了一个拦截器SecondInterceptor
SecondInterceptor.java
package com.springmvc.interceptors;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class SecondInterceptor implements HandlerInterceptor {
/**
* 该方法在目标方法之前被调用。
* 若返回值为true,则继续调用后续的拦截器和目标方法
* 若返回值为false,则不会再调用后续的拦截器和目标方法
*
* 可以考虑做权限。日志,事务等。
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("[SecondInterceptor] preHandle");
return true;
}
/**
* 调用目标方法之后,但渲染视图之前。
* 可以对请求域中的属性或视图做出修改。
*/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("[SecondInterceptor] postHandle");
}
/**
* 渲染视图之后被调用。释放资源。
*/
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("[SecondInterceptor] afterCompletion");
}
}
2.我们想做的是SecondInterceptor只会拦截/emps这个handler方法那么需要这样配置
<!--配置LocaleChanceInterceptor-->
<mvc:interceptors>
<!--配置自定义的拦截器-->
<bean class="com.springmvc.interceptors.FirstInterceptor"></bean>
<!--配置拦截器(不)作用的路径-->
<!--这样配置就能使得SecondInterceptor定向拦截/emps请求-->
<mvc:interceptor>
<mvc:mapping path="/emps"/>
<bean class="com.springmvc.interceptors.SecondInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
3.点击一个有/emps的请求的< a>标签,这样会被FirstInterceptor和SecondInterceptor拦截
4.点击一个没有/emps的请求的< a>标签,这样只会被FirstInterceptor拦截
tips:
最后
以上就是感性墨镜为你收集整理的SpringMVC_23_自定义的拦截器以及拦截器的配置的全部内容,希望文章能够帮你解决SpringMVC_23_自定义的拦截器以及拦截器的配置所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复