【问题标题】:spring 3.0.5 <mvc:interceptor> not workingspring 3.0.5 <mvc:interceptor> 不工作
【发布时间】:2012-05-30 18:55:11
【问题描述】:

我正在尝试创建一个拦截器以在调用控制器之前记录 http 请求的详细信息。我的 spring xml 是

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:tx="http://www.springframework.org/schema/tx"

xsi:schemaLocation="
    http://www.springframework.org/schema/beans     
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/mvc 
    http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-3.0.xsd
                http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"
    >

<context:component-scan base-package="com.xxx.controller" />

<mvc:interceptors>
    <mvc:interceptor>
    <mvc:mapping path="/**" />
    <bean class="com.xxx.interceptor.LogBillingInterceptor">
</bean>
</mvc:interceptor>
</mvc:interceptors>

我的拦截器类

public class LogBillingInterceptor extends HandlerInterceptorAdapter{

@Override
public boolean preHandle(HttpServletRequest request,
        HttpServletResponse response, Object handler) throws Exception {
    System.out.println("sdfsdfdsfd");
    return super.preHandle(request, response, handler);
}

@Override
public void postHandle(HttpServletRequest request,
        HttpServletResponse response, Object handler,
        ModelAndView modelAndView) throws Exception {
    System.out.println("aaaaaaaasdfsdfdsfd");
    super.postHandle(request, response, handler, modelAndView);
}

@Override
public void afterCompletion(HttpServletRequest request,
        HttpServletResponse response, Object handler, Exception ex)
        throws Exception {
    System.out.println("qqqqqqqqqqsdfsdfdsfd");
    super.afterCompletion(request, response, handler, ex);

}

}

但它似乎不起作用。我正在使用 spring 3.0.5

我刚刚看到我们正在使用 spring-oauth2 并使用以下内容。

<http access-denied-page="/error" access-decision-manager-ref="accessDecisionManager"  entry-point-ref="loginUrlAuthenticationEntryPoint" xmlns="http://www.springframework.org/schema/security">

    <intercept-url pattern="/oauth/token" access="IS_AUTHENTICATED_ANONYMOUSLY" />
    <intercept-url pattern="/oauth/**" access="ROLE_USER" />

    <intercept-url pattern="/store/**" access="ROLE_USER" />
    <intercept-url pattern="/balance/**" access="ROLE_USER" />
    <intercept-url pattern="/api/**" access="ROLE_USER" />
    <intercept-url pattern="/tapjoy" access="IS_AUTHENTICATED_ANONYMOUSLY" />

    <intercept-url pattern="/verify_credentials" access="ROLE_USER" />

    <intercept-url pattern="/welcome/**" access="ROLE_USER" />
    <intercept-url pattern="/logout/**" access="ROLE_USER" />

    <intercept-url pattern="/login" access="IS_AUTHENTICATED_ANONYMOUSLY" />
    <intercept-url pattern="/loginfailed" access="IS_AUTHENTICATED_ANONYMOUSLY" />

    <intercept-url pattern="/request_token_authorized.jsp" access="ROLE_USER,DENY_OAUTH" />

        <custom-filter position="FORM_LOGIN_FILTER" ref="tpAuthenticationFilter" />
</http>

我们可以添加带有 Spring 安全性的拦截器吗..

【问题讨论】:

  • 怀疑它是否可能是 Spring Security @harshit,Spring Security 在 DispatcherServlet 通过过滤器获取请求之前拦截,并且拦截器在调用控制器之前处理请求。

标签: java spring spring-mvc interceptor


【解决方案1】:

这很可能是因为mvc:annotation-driven创建的handlerMapping,我见过的最好的建议是删除mvc:annotation-driven,替换为适当的HandlerAdapter的显式bean定义(3.0中的AnnotationMethodHandlerAdapter),并显式指定 handlerMapping 作为属性,并在其中定义拦截器。

How to register handler interceptors with spring mvc 3.0?

【讨论】:

  • 我猜这对 spring 3.1 有效,我正在使用 3.0.5 并且 xml 显示错误。
  • 是的,这是真的@harshit,它也对 3.1 无效 - 这个链接有更好的答案 - stackoverflow.com/q/3230633/204788
猜你喜欢
  • 1970-01-01
  • 2011-08-05
  • 2011-06-08
  • 1970-01-01
  • 2012-01-28
  • 1970-01-01
  • 2015-06-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多