2010-10-17 54 views
5

我正在使用Spring Security 3.0和JSP。我創建了一個RequireVerificationFilter,將未驗證的用戶重定向到「驗證您的電子郵件」頁面。Spring Security 3.0:如何指定應用自定義過濾器的URL?

我加了過濾器彈簧安全過濾器堆棧中最後的地方,像這樣:

在我的應用程序-config.xml中

bean定義:

<bean id="requireVerificationFilter" class="com.ebisent.web.RequireVerificationFilter" /> 

過濾器添加到春季安全過濾列表我security-config.xml:

<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> 

我通過在春季安全機制的文檔「在自己的過濾器添加」讀,但沒有找到答案。

我的問題是,我如何指定我的過濾器適用於哪些URL?

UPDATE:

我通過指定網址,讓過濾器本身中得到了這個工作。這對我來說工作得很好,但如果有更好的/更「靈活」的方式來做到這一點,我會很高興聽到它。

回答

2

你必須這樣做實際的配置XML內(同一個地方,你必須沿着這些線路的<custom-filter ref="requireVerificationFilter" after="LAST" />

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

的東西,你可以指定你想要運行的過濾器的列表,並排除那些你不要(和「none」意味着沒有)。你不應該需要添加tyour過濾器到web.xml - 只與Spring Security過濾器鏈內聯。

+0

謝謝!我在我的安全配置中攔截了url標記,但我不知道你可以在那裏指定過濾器。 – outis 2010-10-18 16:21:44

+5

但[Spring Security Reference Documentation](http://static.springsource.org/spring-security/site/docs/3.1.x/reference/springsecurity-single.html#nsa-intercept-url-parents)表示: 'filters'屬性「只能取值」none「」。 – btpka3 2013-07-10 02:55:36

3

你應該使用org.springframework.security.web.FilterChainProxy。只有聯繫none

<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" /> 
+0

此解決方案適用於我,謝謝! – 2017-12-19 15:19:46

相關問題