SpringMVC 拦截器
1 定义
java 里的拦截器是动态拦截 Action 调用的对象。它提供了一种机制可以使开发者可以定义在一个 action 执行的前后执行的代码,也可以在一个 action 执行前阻止其执行,同时也提供了一种可以提取 action 中可重用部分的方式。在 AOP(Aspect-OrientedProgramming) 中拦截器用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。SpringMVC 中的 Interceptor 拦截器的主要作用是拦截用户的请求并进行相应的处理。比如通过它来进行权限验证,或者是登录认证等。
2 自定义拦截器
这里详解通过实现 HandleInterceptor 接口的方法。新建一个 HandlerInterceptor 的实现类,代码如下,该实现类中包括三个方法:
1)preHandle 方法:该方法在 controller 执行前被调用,返回 true 表示继续执行,返回 false 表示终止执行。登录校验、权限拦截等可以写在此方法中。
2)postHandle 方法:该方法在 controller 执行后但未返回 ModelAndView 之前被调用。一些公用信息可以被写在此方法中方便页面显示。
3)afterCompletion 方法:该方法在 controller 执行完成后且已返回 ModelAndView 之后被调用。日志记录、异常返回等可写在此方法中。
- Public class HandlerInterceptorCustomimplements HandlerInterceptor {@OverridePublic boolean preHandle(HttpServletRequestrequest, HttpServletResponseresponse, Object handler) throws Exception { // TODO Auto-generated method stubReturn false;}@OverridePublic void postHandle(HttpServletRequestrequest,HttpServletResponseresponse, Object handler,ModelAndView modelAndView)throws Exception {// TODO Auto-generated method stub}@OverridePublic void afterCompletion(HttpServletRequestrequest,HttpServletResponseresponse, Object handler, Exception ex)throws Exception {// TODO Auto-generated method stub}}
3 拦截器配置
配置文件添加如下代码:
- "/**"/>"cn.itcast.springmvc.filter.HandlerInterceptorCustom">"/**"/>"cn.itcast.springmvc.filter.HandlerInterceptorCustom2">
4 登录认证拦截器代码
- public class LoginInterceptor implements HandlerInterceptor { //进入 Handler方法之前执行//用于身份认证、身份授权//比如身份认证,如果认证通过表示当前用户没有登陆,需要此方法拦截不再向下执行public boolean preHandle(HttpServletRequest request,HttpServletResponse response, Objecthandler)throws Exception {//获取请求的urlString url = request.getRequestURI();//判断url是否是公开地址(实际使用时将公开地址配置配置文件中)//这里公开地址是登陆提交的地址if(url.indexOf("login.action")>=0){//如果进行登陆提交,放行return true;}//判断sessionHttpSession session = request.getSession();//从session中取出用户身份信息String username = (String)session.getAttribute("username");if(username !=null){//身份存在,放行return true;}//执行这里表示用户身份需要认证,跳转登陆页面request.getRequestDispatcher("adminLogin.jsp").forward(request,response);//return false表示拦截,不向下执行//return true表示放行return false;}//进入Handler方法之后,返回modelAndView之前执行//应用场景从modelAndView出发:将公用的模型数据(比如菜单导航)在这里传到视图,也可以在这里统一指定视图public void postHandle(HttpServletRequest request,HttpServletResponse response, Objecthandler,ModelAndView modelAndView)throws Exception {}//执行Handler完成执行此方法//应用场景:统一异常处理,统一日志处理public void afterCompletion(HttpServletRequest request,HttpServletResponse response, Objecthandler, Exceptionex)throws Exception {}}
就爱阅读 www.92to.com 网友整理上传, 为您提供最全的知识大全, 期待您的分享,转载请注明出处。
来源: http://www.92to.com/bangong/2017/02-22/17395543.html