`
tinkingdzj
  • 浏览: 33830 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

对spring中的Controller做拦截

阅读更多
spring中对自己的Controller有专门的拦截器,如果你用spring的AOP进行拦截的话,是不能拦截的。下面是利用spring的HandlerInterceptorAdapter类来做的拦截。
1.拦截器的代码:
public class BlockControllAdvice extends HandlerInterceptorAdapter  {
    private static final Logger log = Logger.getLogger(BlockControllAdvice.class);

    /** 权限验证方法,
     *
     * @param request,response,handler
     * @return boolen
     * @auther kaungyujian
     */
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        
        log.debug("into controller advice........");
        
        MultiActionController maControl = (MultiActionController) handler;
        ParameterMethodNameResolver pmrResolver = (ParameterMethodNameResolver) maControl.getMethodNameResolver();
        String methodName = pmrResolver.getHandlerMethodName(request);
        String className = handler.getClass().getName();
        String path = request.getRequestURI();   //获得请求的路径    }
}

2.配置拦截器:
 <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="interceptors">
            <list>
                <ref bean="beforeBlock"/>
            </list>
        </property>
        <property name="mappings">
            <props>
                <prop key="/test.do">testController</prop>
            </props>
        </property>
    </bean>

    <bean id="beforeBlock" class="com.juraglobal.softguard.common.web.action.BlockControllAdvice"/>

3.拦截器如果要中断运行,这里的方法只能抛出异常:
 <bean id="exception" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
        <property name="exceptionMappings">
            <props>
                <prop key="com.juraglobal.softguard.common.web.action.RightPassException">noRight</prop>
            </props>
        </property>
    </bean>
分享到:
评论
3 楼 郑智睿 2015-03-05  
郑智睿 写道
对实现了接口的Controller是可以使用AOP拦截的,比如implements Controller{//...},如果不是,可能不能拦截(我暂时还没找到原因),比如extends MutilActionController{//...}


--------------------------------------------------------------------
如果去掉继承,改用委托的形式,仍旧可以拦截
2 楼 郑智睿 2015-03-05  
对实现了接口的Controller是可以使用AOP拦截的,比如implements Controller{//...},如果不是,可能不能拦截(我暂时还没找到原因),比如extends MutilActionController{//...}
1 楼 Eric.Yan 2012-07-16  
"spring中对自己的Controller有专门的拦截器,如果你用spring的AOP进行拦截的话,是不能拦截的"
是这样的么?如果真是这样,那就解开我的困惑了,谢谢

相关推荐

Global site tag (gtag.js) - Google Analytics