如果你想拦截Controller里面方法的执行,你必须写一个权限控制的类,实现handlerIntercepter接口,通过实现接口里面的方法,来实现对Controller中方法的拦截。
例如,我想在Controller里面方法执行之前,判断你是否有权限执行。执行你就必须在方法执行之前拦截。
- public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
- Object handler)
-
- 该方法会在Controller的方法执行前会被调用,可以使用这个方法来中断或者继续执行链的处理,当返回true时,处理执行链会继续,当返回false时,则不会去执行Controller的方法。(验证用户是否登陆就是使用preHandleAction方法的最好例子)
- public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
- Object handler, Exception ex) throws Exception {
-
- }
-
- public void postHandle(HttpServletRequest request, HttpServletResponse response,
- Object handler, ModelAndView mav) throws Exception {
- }
-
- 这3个方法会在在controller的方法执行之后,在DispatcherServlet类导向到view进行render之前依次执行。最有用的是使用postHandleRender方法,因为它有ModelAndView 传进来,那么我们就可以在render view之前往view中添加额外的model对象,或者对view的去处进行修改
下面介绍一个自己做的项目中用到的方法。
首先,你必须在spring-servlet中配置自己的拦截器,例如我配置的是: - <bean id="securtyHandler" class="com.xmetc.interceptor.SecurtyHandler"></bean>
其次,我们应该在配置处理器映射中加入拦截器的配置,- <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
- <property name="mappings">
- <props>
- <prop key="menu.do">menu</prop>
- <prop key="employeeinfo.do">empInfo</prop>
- <prop key="certificate.do">certificateController</prop>
- <prop key="position.do">positionController</prop>
- <prop key="retireAchieves.do">retireAchievesController</prop>
-
- <prop key="deptChange.do">deptChangeController</prop>
- <prop key="personChange.do">personChangeController</prop>
- <prop key="student.do">student</prop>
- <prop key="train.do">train</prop>
- <prop key="record.do">record</prop>
- <prop key="subject.do">subject</prop>
-
- <prop key="dept.do">dept</prop>
- <prop key="role.do">role</prop>
-
- <prop key="resume.do">resume</prop>
- <prop key="contract.do">contract</prop>
- <prop key="archives.do">archives</prop>
- <prop key="rewardPunishment.do">rewardPunishment</prop>
-
- <prop key="login.do">login</prop>
-
- <prop key="export.do">export</prop>
- </props>
- </property>
-
- <property name="interceptors">
- <list>
- <ref bean="securtyHandler" />
- </list>
- </property>
- </bean>
最后,在com.xmetc.interceptor.SecurtyHandler类中控制方法的执行。
|