目录
- 回顾过滤器
- SpringMVC拦截器的介绍
-
- 问题:
- 拦截器执行位置
- 解决方案:
- 拦截器的执行时机:
- 拦截器的作用:
- 拦截器的使用:
- 代码实现
- 拦截器参数
回顾过滤器
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>