我正在构建一个在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>
短期来说,我已经决定创建一堆实用方法来完成以前在拦截器中的工作,我只是在每个控制器方法的开头调用这些方法,并且它可以工作,但理想情况下我会喜欢能够依靠拦截器。
答案 0 :(得分:0)
由于安全过滤器,您提示登录,特别是Spring Security Filter Chain。
在Servlet之前处理过滤器。 MVC Interceptor在Dispatcher Servlet中运行。
答案 1 :(得分:0)
使用web.xml,您正在使用与Spring容器拦截器不同的使用容器管理的安全性。现在,在您成功从Web服务器容器登录后,请求将转到spring拦截器。