分享

拦截器(HandlerInterceptor)

 旭龙 2011-12-19
如果你想拦截Controller里面方法的执行,你必须写一个权限控制的类,实现handlerIntercepter接口,通过实现接口里面的方法,来实现对Controller中方法的拦截。

例如,我想在Controller里面方法执行之前,判断你是否有权限执行。执行你就必须在方法执行之前拦截。


  1. public boolean preHandle(HttpServletRequest request, HttpServletResponse response,  
  2.             Object handler)  
  3.   
  4. 该方法会在Controller的方法执行前会被调用,可以使用这个方法来中断或者继续执行链的处理,当返回true时,处理执行链会继续,当返回false时,则不会去执行Controller的方法。(验证用户是否登陆就是使用preHandleAction方法的最好例子)  

  1. public void afterCompletion(HttpServletRequest request, HttpServletResponse response,  
  2.             Object handler, Exception ex) throws Exception {  
  3.   
  4.     }  
  5.   
  6. public void postHandle(HttpServletRequest request, HttpServletResponse response,  
  7.             Object handler, ModelAndView mav) throws Exception {  
  8.     }  
  9.   
  10. 3个方法会在在controller的方法执行之后,在DispatcherServlet类导向到view进行render之前依次执行。最有用的是使用postHandleRender方法,因为它有ModelAndView 传进来,那么我们就可以在render view之前往view中添加额外的model对象,或者对view的去处进行修改  
下面介绍一个自己做的项目中用到的方法。

首先,你必须在spring-servlet中配置自己的拦截器,例如我配置的是:


  1. <bean id="securtyHandler" class="com.xmetc.interceptor.SecurtyHandler"></bean>  
其次,我们应该在配置处理器映射中加入拦截器的配置,

  1. <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">  
  2.         <property name="mappings">  
  3.             <props>  
  4.                 <prop key="menu.do">menu</prop>  
  5.                 <prop key="employeeinfo.do">empInfo</prop>  
  6.                 <prop key="certificate.do">certificateController</prop>  
  7.                 <prop key="position.do">positionController</prop>  
  8.                 <prop key="retireAchieves.do">retireAchievesController</prop>  
  9.   
  10.                 <prop key="deptChange.do">deptChangeController</prop>  
  11.                 <prop key="personChange.do">personChangeController</prop>  
  12.                 <prop key="student.do">student</prop>  
  13.                 <prop key="train.do">train</prop>  
  14.                 <prop key="record.do">record</prop>  
  15.                 <prop key="subject.do">subject</prop>  
  16.   
  17.                 <prop key="dept.do">dept</prop>  
  18.                 <prop key="role.do">role</prop>  
  19.   
  20.                 <prop key="resume.do">resume</prop>  
  21.                 <prop key="contract.do">contract</prop>  
  22.                 <prop key="archives.do">archives</prop>  
  23.                 <prop key="rewardPunishment.do">rewardPunishment</prop>  
  24.   
  25.                 <prop key="login.do">login</prop>  
  26.   
  27.                 <prop key="export.do">export</prop>  
  28.             </props>  
  29.         </property>  
  30.         <!-- 配置spring拦截器 -->  
  31.         <property name="interceptors">  
  32.             <list>  
  33.                 <ref bean="securtyHandler" />  
  34.             </list>  
  35.         </property>  
  36.     </bean>  
最后,在com.xmetc.interceptor.SecurtyHandler类中控制方法的执行。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多