我正在将 Spring Security 3.0 与 JSP 结合使用。我创建了一个 RequireVerificationFilter ,它将未经验证的用户重定向到“验证您的电子邮件”页面。
我将过滤器添加到了 Spring Security 过滤器堆栈的最后位置,如下所示:
我的 app-config.xml 中的 Bean 定义:
<bean id="requireVerificationFilter" class="com.ebisent.web.RequireVerificationFilter" />
过滤器添加到我的 security-config.xml 中的 spring security 过滤器列表中:
<custom-filter ref="requireVerificationFilter" after="LAST" />
过滤器可以工作,但它会过滤自己的重定向 URL。也就是说,过滤器将未经验证的用户重定向到 /access/verify,但该 URL 也会被过滤器捕获,并无限期地尝试重定向。
我尝试使用<filter-mapping>
标签来限制这个新过滤器适用的 URL,但这似乎并不像我想象的那样工作。这是我添加的 web.xml 条目:
<filter>
<filter-name>requireVerificationFilter</filter-name>
<filter-class>com.ebisent.web.RequireVerificationFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>requireVerificationFilter</filter-name>
<url-pattern>/account/*</url-pattern>
</filter-mapping>
我通读了 Spring Security 文档中的“添加自己的过滤器”,但没有找到答案。
我的问题是,如何指定我的过滤器适用于哪些 URL?
UPDATE:
我通过指定过滤器本身允许的 URL 来实现此目的。这对我来说效果很好,但如果有更好/更“有弹性”的方法来做到这一点,我会很高兴听到它。