程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Acegi(七):LogoutFilter配置及幾個問題

Acegi(七):LogoutFilter配置及幾個問題

編輯:關於JAVA

這些天有點懶散, 想的也得振作一下吧. 從最好容易的部分下手, 這樣想到Acegi.前段時間的博客裡寫了acegi的最簡單配置, 以及圍繞這些簡單配置的一點點源碼層面的鑽研. 而實際項目中的配置光這些是不夠的, 比如說用戶信息及權限還有系統的訪問權限都是要放到數據庫裡的, 這樣在做用戶登錄與權限認證時就要hit數據庫了, 這方面的配置又怎樣呢?

不過這篇博客中打算寫與數據庫擴展相關的話題, 而是先從較為簡單的幾個Filter開刀.

先看LogoutFilter.

配置很簡單.

1, 先配置一個id為 logoutFilter的Bean, 如下所示:

<bean id="logoutFilter"        class="org.acegisecurity.ui.logout.LogoutFilter">
<constructor-arg value="/login.jsp" />
<constructor-arg>
<list>
<bean class="org.acegisecurity.ui.logout.SecurityContextLogoutHandler" />
</list>
</constructor-arg>
</bean>

2, 把配置好的 logoutFilter加到 filterInvocationDefinitionSource中去, 即改為 "/**=httpSessionContextIntegrationFilter,logoutFilter,authenticationProcessingFilter,exceptionTranslationFilter,filterInvocationInterceptor".

3, 在JSP中適當的位置加上 <a href="/myOwnAcegi/j_acegi_logout">退出</a>

幾點說明, 這個的配置很簡單的也多少要說有:

1, <constructor-arg value="/login.jsp" />的作用, 用來告訴Acegi當系統退出後跳轉到的鏈接.

2, LogoutFilter構造方法中的第二個參數的作用, 告訴Acegi系統退出後, 都有哪些跟退出相關的action要做.

3, j_acegi_logout的鏈接, 這個沒什麼, 跟登錄時的" j_acegi_security_check "類似, 都是Acegi自帶的, 大多情況下也沒什麼必要修改.

從追著源碼看了它的實現,沒什麼特殊的, 不過有如下幾個不太相關的問題:

1, 有沒有必要對這個退出單獨配置一個訪問時的filterChain, 即另加一個" /j_acegi_logout= httpSessionContextIntegrationFilter, logoutFilter "?如此配置的出發點是這樣的,上面配置2種的訪問鏈接在 logoutFilter之後還有三個filter要通過, 執行時間上有些浪費了, 通過這樣配置後, 當用戶點"退出"時acegi處理完 logoutFilter後就沒什麼filter要處理了.

再者說, 也不至於讓每一個請求都通過一次 logoutFilter,雖說 logoutFilter裡有這樣一個 requiresLogout判斷.

這樣的配置裡能不能不加 httpSessionContextIntegrationFilter? 為什麼要加呢? 不是很清楚.

後邊看到" sendRedirect(httpRequest, httpResponse, logoutSuccessUrl); "這樣的語句, 原來Acegi通過它就可以讓請求鏈接跳轉到

2, LogoutFilter的構造方法有兩個參數,String類型的 logoutSuccessUrl和 LogoutHandler[]類型的 handlers. 第一個參數沒啥可說的, 第一個參數, 人家要的類型是一個數組, 而Spring裡配置時是通過<list>標簽來的, Spring內部是怎麼轉化的? 這是個大話題, 先不再下鑽了.

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved