Servlets SpringSecurity3.0:如何指定应用自定义筛选器的URL?

Servlets SpringSecurity3.0:如何指定应用自定义筛选器的URL?,servlets,spring-security,servlet-filters,Servlets,Spring Security,Servlet Filters,我正在使用SpringSecurity3.0和JSP。我已经创建了一个RequireVerificationFilter,它将未经验证的用户重定向到“验证您的电子邮件”页面 我在最后一个位置将过滤器添加到spring security过滤器堆栈中,如下所示: my app-config.xml中的Bean定义: <bean id="requireVerificationFilter" class="com.ebisent.web.RequireVerificationFilter" /&g

我正在使用SpringSecurity3.0和JSP。我已经创建了一个RequireVerificationFilter,它将未经验证的用户重定向到“验证您的电子邮件”页面

我在最后一个位置将过滤器添加到spring security过滤器堆栈中,如下所示:

my app-config.xml中的Bean定义:

<bean id="requireVerificationFilter" class="com.ebisent.web.RequireVerificationFilter" />
<custom-filter ref="requireVerificationFilter" after="LAST" />

已将筛选器添加到my security-config.xml中的spring安全筛选器列表中:

<bean id="requireVerificationFilter" class="com.ebisent.web.RequireVerificationFilter" />
<custom-filter ref="requireVerificationFilter" after="LAST" />

过滤器工作,但它过滤自己的重定向URL。也就是说,筛选器将未验证的用户重定向到/access/verify,但该URL也被筛选器捕获,它会无限期地尝试重定向

我尝试使用
标记来限制这个新过滤器应用于的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>

要求混响滤波器
com.ebisent.web.requireRefrificationFilter
要求混响滤波器
/帐目/*
我通读了spring安全文档中的“添加您自己的过滤器”,但没有找到答案

我的问题是,如何指定我的筛选器应用于哪些URL

更新:


我通过在过滤器本身中指定允许的URL来实现这一点。这对我来说很好,但如果有更好/更“灵活”的方法,我会很高兴听到它。

您必须在实际的配置xml中执行此操作(与
相同的位置)

<http ...>
   <intercept-url pattern="/access" ... filters="..., requireVerificationFilter, ..." />
   <intercept-url pattern="/verify" ... filters="none" />
   ...
</http>

...

沿着这些思路,您可以指定要运行的筛选器列表,并排除不运行的筛选器(“无”表示无)。您不需要将您的筛选器添加到web.xml-仅与Spring安全筛选器链内联。

对此,您应该使用
org.springframework.Security.web.FilterChainProxy
。属性筛选器应仅包含

<http ...>
      <custom-filter ref="requireVerificationFilterChain" after="LAST" />
</http>

<b:bean id="requireVerificationFilterChain" class="org.springframework.security.web.FilterChainProxy">
        <filter-chain-map request-matcher="ant">
            <filter-chain pattern="/account/*" filters="requireVerificationFilter"/>
        </filter-chain-map>
</b:bean>
<b:bean id="requireVerificationFilter" class="com.ebisent.web.RequireVerificationFilter" />

谢谢!我的安全配置中有intercept url标记,但我不知道您可以在那里指定筛选器。但是说:
filters
attribute“只能接受值“none”。