你不需要自定義LogoutFilter
,你需要插件以下爲標準過濾器之一:
請注意,LogoutHandler
s在LogoutSuccessHandler
之前被調用,但後者被允許拋出異常,其中a前者是不應該的。
還要注意的是,如果你使用自定義LogoutHandler
情況下,它們需要被賦予/在LogoutFilter
和注射ConcurrentSessionFilter
(如果使用)。
如果您使用的XML配置安全命名空間(即xmlns="http://www.springframework.org/schema/security"
),則很容易通過
<http>
...
<logout success-handler-ref="yourBeanId"/>
</http>
不知道如何使用命名空間插件定製LogoutHandler
s到添加自定義LogoutSuccessHandler
。
否則,它會是這個樣子:
<bean id="logoutFilter" class="org.springframework.security.web.authentication.logout.LogoutFilter">
<constructor-arg ref="logoutSuccessHandler"/>
<constructor-arg ref="logoutHandlers"/>
...
</bean>
<bean id="logoutSuccessHandler" class="your.custom.LogoutSuccessHandler"/>
<bean id="logoutHandlers" class="java.util.Arrays" factory-method="asList">
<constructor-arg>
<array>
<bean class="your.custom.LogoutHandler"/>
...
</array>
</constructor-arg>
</bean>
創建自己的過濾器沒有意義。當你註銷時,它應該被通知給Spring安全篩選器鏈。如果你需要一個自定義註銷過濾器,那麼爲什麼你不使用' '?另外,如果你在註銷之前執行一些代碼邏輯,那麼Spring提供了一個合適的處理程序。你可以使用它。 –
Lion
我很困惑的問題 - 爲什麼不只是有你的註銷鏈接/按鈕/無論首先按你的要求做,然後重定向到或調用實際的註銷過程?正如獅子指出的那樣,這裏不需要重新發明輪子。 – cabbagery