在GAE应用程序中未调用Spring Interceptor

时间:2016-01-23 15:54:23

标签: java spring google-app-engine spring-mvc

我正在构建一个在Google应用引擎上部署的应用程序。我有一个Spring拦截器定义为在'account / anything'下的所有请求上调用。我还有一个安全约束(在web.xml中定义),强制必须对用户进行身份验证才能访问/ account下的任何内容。

我注意到当我登录PRIOR尝试访问/ account下的任何内容时,当我导航到/ account / anything时,拦截器会按设计调用。

然而,当我来到应用程序时,没有登录,并尝试直接转到/ account /任何东西,我被提示登录(正如我所期望的那样,因为web中定义了安全性约束。 xml),但不调用拦截器。

有没有人在Google App Engine中看到过这种行为?

web.xml配置:

<security-constraint>
    <display-name>Account Security Constratint</display-name>
    <web-resource-collection>
        <url-pattern>/account/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>*</role-name>
    </auth-constraint>
</security-constraint>
<security-constraint>

Spring拦截器配置:

    <mvc:interceptor>
        <mvc:mapping path="/account/*" />
        <bean class="com.myapp.interceptors.AccountInterceptor" />
    </mvc:interceptor>

短期来说,我已经决定创建一堆实用方法来完成以前在拦截器中的工作,我只是在每个控制器方法的开头调用这些方法,并且它可以工作,但理想情况下我会喜欢能够依靠拦截器。

2 个答案:

答案 0 :(得分:0)

由于安全过滤器,您提示登录,特别是Spring Security Filter Chain

在Servlet之前处理过滤器。 MVC Interceptor在Dispatcher Servlet中运行。

由于在过滤阶段阻止了对安全资源的请求,因此不会调用Dispatcher Servlet也不会调用MVC拦截器。 enter image description here

答案 1 :(得分:0)

使用web.xml,您正在使用与Spring容器拦截器不同的使用容器管理的安全性。现在,在您成功从Web服务器容器登录后,请求将转到spring拦截器。