有的网页允许游客访问,但是当游客要去 回复一些评论,评论一些文章的时候,会将请求拦截下来并进行判断,判断是否登录。
1.先编写拦截器
1.先编辑拦截器 public class MyInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception { System.out.println("preHandle"); return true; } @Override public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3) throws Exception { System.out.println("postHandle"); } @Override public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3) throws Exception { System.out.println("afterCompletion"); } }
2 在springmvc.xml中配置拦截器
3.2.1 拦截全部控制器
<!-- 拦截器 --> <mvc:interceptors> <bean class="com.bjsxt.interceptor.MyInterceptor"></bean> </mvc:interceptors>3.2.2 拦截某几个控制器
3.2.2.1 <mvc:mapping/> path表示url被HandlerMapping解析后结果 <!-- 拦截器 --> <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/demo"/> <mvc:mapping path="/demo1"/> <mvc:mapping path="/demo2"/> <bean class="com.bjsxt.interceptor.MyInterceptor"></bean> </mvc:interceptor> </mvc:interceptors>
2. preHandler()
4.1 返回值是否放行.true放行,false阻止.如果阻止还可以利用 重定向或请求转发到其他页面 4.2 第三个参数: 4.2.1 实际类型HandlerMethod 4.2.2 获取到拦截器的方法所有信息
boolean preHandle(HttpServletRequest req, HttpServletResponse resp, Object arg2) HandlerMethod hm = (HandlerMethod)arg2; Method method = hm.getMethod(); System.out.println(method.getName());获取方法名 if(method.getName().equals("demo")){ System.out.println("拦截的是demo"); }else{ System.out.println("不是demo"); }
5.1 第三个参数:HandlerMethod 5.2 第四个参数:ModelAndView 5.2.1 取到跳转到哪个视图 5.2.2 对作用域内值修改
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3){ // 1.获得视图名称 System.out.println("视图名称:"+arg3.getViewName()); //视图名称:index // 2.获得作用域 Map<String,Object> map = arg3.getModel(); // 3.重新设置作用域 map.put("msg", map.get("msg").toString().replace("中国", "**")); }
4. afterCompletion( )
6.1 无论是否出现异常都执行. 6.1.2 出现异常会跳过postHandle()方法,和jsp的解析class文件的过程 6.2 第三个参数:HandlerMethod 6.3 第四个参数:Exception,如果控制器中出现异常,参数不为null 6.4 此方法常用在日志记录功能
if(arg3!=null){ Logger logger = Logger.getLogger(MyInterceptor.class); logger.error(arg3.getMessage());// 获得异常信息 }7. 添加控制器后执行顺序