【问题标题】:spring interceptor is never called弹簧拦截器永远不会被调用
【发布时间】:2013-05-14 16:11:17
【问题描述】:

我有以下拦截器:

@Component
public class ExternalLinkInterceptor extends HandlerInterceptorAdapter {

    private static final Logger logger = Logger.getLogger(ExternalLinkInterceptor.class);

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        logger.info("preHandle ~ invoked");
}
}

它应该在以下控制器方法的请求句柄之前拦截:

@Controller
@PreAuthorize("isAuthenticated()")
@RequestMapping("/assay/process")
public class VariantPrioritizationsController extends AssayBaseController{

    private static final Logger logger = Logger.getLogger(VariantPrioritizationsController.class);
@RequestMapping("/openAnalyticalProjectForAssay")
    public ModelAndView openAnalyticalProjectForAssay(HttpSession session,@RequestParam(value = "analyticalProjId", required=true)String projectId) throws PanDaApplicationException{
    //code 
     }
}

这是 spring-servlet.xml 中的拦截器声明:

<mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/assay/process/openAnalyticalProjectForAssay*"/>
            <beans:bean class="com.syngenta.panda.web.mvc.interceptor.ExternalLinkInterceptor"/>
        </mvc:interceptor>
    </mvc:interceptors>

现在我的拦截器从未被调用,我不知道为什么?!任何帮助

【问题讨论】:

    标签: java spring spring-mvc interceptor


    【解决方案1】:

    请尝试将 mvc:mapping 路径更新为:

    <mvc:mapping path="/assay/process/**" />
    

    【讨论】:

    • 但这会使拦截器拦截对这个控制器的任何请求而不是特定方法
    • 如果这行得通,我们至少知道您的拦截器正在工作并且您指定的路径不正确。
    • 好吧,它起作用了,现在调用了拦截器 preHandle 我只需要在我的方法而不是控制器的范围内执行此操作
    • 请告诉我们,您指的是什么网址?由此,我可以弄清楚映射应该是什么:路径。
    • 我有一个指向我的应用程序的链接,如下所示 {host}/panda/assay/process/openAnalyticalProjectForAssay.htm?attr=12 拦截器用于拦截此请求,将特定对象放入会话中并让请求由控制器处理
    【解决方案2】:

    mvc:interceptor 的配置对我来说看起来不正确。我之前在 Spring 中使用过语言环境更改拦截器,它们的配置非常简单:

    <mvc:interceptors>
        <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" p:paramName="language"/>
    </mvc:interceptors>
    

    这个拦截器只是在 URL 上寻找一个参数来改变用户选择的语言环境。

    本视频介绍了包括语言环境拦截器在内的所有设置:

    http://pluralsight.com/training/Courses/TableOfContents/springmvc-intro

    【讨论】:

    • 感谢视频,但我真的不明白答案:-)
    • 好吧,不太清楚为什么我对此投了反对票。您的拦截器配置看起来不正确就是我对您的帖子所说的。我希望会有一些关于你想要做什么的对话,就像你对上面的问题所做的那样。我在想你可以尝试最简单的工作,比如 LocaleChangeInterceptor,然后让它工作,然后在你去的时候添加步骤。
    • 哦,不用担心,有人这样做了。没什么大不了。我只是好奇而已。 :)
    猜你喜欢
    • 1970-01-01
    • 2012-07-27
    • 1970-01-01
    • 2014-11-02
    • 1970-01-01
    • 2012-10-27
    • 2013-10-12
    • 2012-03-27
    • 2013-08-29
    相关资源
    最近更新 更多