freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內容

java實現(xiàn)單點登錄,圖例及相關代碼(編輯修改稿)

2025-07-22 06:59 本頁面
 

【文章內容簡介】 if (gotoURL != null) {PrintWriter out = ()。(gotoURL)。()。}} }handlerFromLogin()。它的邏輯很簡單:將用戶輸入的用戶名和密碼與預先設定好的用戶集合(存放在accounts中)相比較,如果用戶名或密碼不匹配的話,則返回登錄失敗的頁面(),如果登錄成功的話,需要為用戶當前的session創(chuàng)建一個新的ID,并將這個ID和用戶名的映射關系存放到SSOIDs中,最后還要將這個ID設置為瀏覽器能夠保存的cookie值。登錄成功后,瀏覽器會到哪個頁面呢?那我們回顧一下我們是如何使用身份認證服務的。一般來說我們不會直接訪問身份服務的任何URL。身份服務是用來保護其他應用服務的,用戶一般在訪問一個受SSOAuth保護的Web應用的某個URL時,當前這個應用會發(fā)現(xiàn)當前的用戶還沒有登錄,讓用戶登錄。如果登錄成功后,應該自動的將用戶的瀏覽器指向用戶最初想訪問的那個URL。在handlerFromLogin()這個方法中,我們通過接收“goto”這個參數(shù)來保存用戶最初訪問的URL,成功后便重新定向到這個頁面中。另外一個要說明的是,在設置cookie的時候,我使用了一個setMaxAge(6000)的方法。這個方法是用來設置cookie的有效期,單位是秒。如果不使用這個方法或者參數(shù)為負數(shù)的話,當瀏覽器關閉的時候,這個cookie就失效了。在這里我給了很大的值(1000分鐘),導致的行為是:當你關閉瀏覽器(或者關機),下次再打開瀏覽器訪問剛才的應用,只要在1000分鐘之內,就不需要再登錄了。我這樣做是下面要介紹的桌面SSO中所需要的功能。其他的方法更加簡單,這里就不多解釋了。要實現(xiàn)WEBSSO的功能,只有身份認證服務是不夠的。這點很顯然,要想使多個應用具有單點登錄的功能,還需要每個應用本身的配合:將自己的身份認證的服務交給一個統(tǒng)一的身份認證服務-SSOAuth。SSOAuth服務中提供的各個方法就是供每個加入SSO的Web應用來調用的。一般來說,Web應用需要SSO的功能,應該通過以下的交互過程來調用身份認證服務的提供的認證服務: Web應用中每一個需要安全保護的URL在訪問以前,都需要進行安全檢查,如果發(fā)現(xiàn)沒有登錄(沒有發(fā)現(xiàn)認證之后所帶的cookie)。 登錄成功后,系統(tǒng)會自動給你的瀏覽器設置cookie,證明你已經登錄過了。 當你再訪問這個應用的需要保護的URL的時候,系統(tǒng)還是要進行安全檢查的,但是這次系統(tǒng)能夠發(fā)現(xiàn)相應的cookie。 有了這個cookie,還不能證明你就一定有權限訪問。因為有可能你已經logout,或者cookie已經過期了,或者身份認證服務重起過,這些情況下,你的cookie都可能無效。應用系統(tǒng)拿到這個cookie,還需要調用身份認證的服務,來判斷cookie時候真的有效,以及當前的cookie對應的用戶是誰。 如果cookie效驗成功,就允許用戶訪問當前請求的資源。以上這些功能,可以用很多方法來實現(xiàn): 在每個被訪問的資源中(JSP或Servlet)中都加入身份認證的服務,來獲得cookie,并且判斷當前用戶是否登錄過。不過這個笨方法沒有人會用:)。 可以通過一個controller,將所有的功能都寫到一個servlet中,然后在URL映射的時候,映射到所有需要保護的URL集合中(例如*.jsp,/security/*等)。這個方法可以使用,不過,它的缺點是不能重用。在每個應用中都要部署一個相同的servlet。 Filter是比較好的方法。(Filter的使用可以參考JavaWolrd的文章)Filter是一個具有很好的模塊化,可重用的編程API,用在SSO正合適不過。本樣例就是使用一個filter來完成以上的功能。package SSO。import .*。import .*。import .*。import .*。import .*。import .*。import .*。import .*。import 。public class SSOFilter implements Filter {private FilterConfig filterConfig = null。private String cookieName=WangYuDesktopSSOID。private String SSOServiceURL= :8080/SSOAuth/SSOAuth。private String SSOLoginPage= :8080/SSOAuth/。public void init(FilterConfig filterConfig) { = filterConfig。if (filterConfig != null) {if (debug) {log(SSOFilter:Initializing filter)。}} cookieName = (cookieName)。SSOServiceURL = (SSOServiceURL)。SSOLoginPage = (SSOLoginPage)。} ..........}以上的初始化的源代碼有兩點需要說明:一是有兩個需要配置的參數(shù)SSOServiceURL和SSOLoginPage。因為當前的Web應用很可能和身份認證服務(SSOAuth)不在同一臺機器上,所以需要讓這個filter知道身份認證服務部署的URL,這樣才能去調用它的服務。另外一點就是由于身份認證的服務調用是要通過協(xié)議來調用的(在本樣例中是這樣設計的,讀者完全可以設計自己的身份服務,使用別的調用協(xié)議,如RMI或SOAP等等),所有筆者引用了apache的mons工具包(詳細信息情訪問apache 的網站),其中的“client”可以大大簡化調用的編程。下面看看filter的主體方法doFilter():public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {if (debug) log(SSOFilter:doFilter())。HttpServletRequest request = (HttpServletRequest) req。HttpServletResponse response = (HttpServletResponse) res。String result=failed。String url = ().toString()。String qstring = ()。if (qstring == null) qstring =。//檢查請求的head是否有需要的cookieString cookieValue =。[] diskCookies = ()。if (diskCookies != null) {for (int i = 0。 i 。 i++) {if(diskCookies[i].getName().equals(cookieName)){cookieValue = diskCookies[i].getValue()。//如果找到了相應的cookie則效驗其有效性result = SSOService(cookieValue)。if (debug) log(found cookies!)。}}}if ((failed)) { //效驗失敗或沒有找到cookie,則需要登錄(SSOLoginPage+?goto=+url)。} else if ((logout) 1) {//logout服務if (debug) log(logout action!)。logoutService(cookieValue)。(SSOLoginPage+?goto=+url)。} else {//效驗成功(SSOUser,result)。Throwable problem = null。try {(req, res)。} catch(Throwable t) {problem = t。()。} if (problem != null) {if (problem instanceof ServletException) throw (ServletException)problem。if (problem instanceof IOException) throw (IOException)problem。sendProcessingError(problem, res)。}} }doFilter()方法的邏輯也是非常簡單的,在接收到請求的時候,先去查找是否存在期望的cookie值,如果找到了,就會調用SSOService(cookieValue)去效驗這個cookie的有效性。如果cookie效驗不成功或者cookie根本不存在,就會直接轉到登錄界面讓用戶登錄;如果cookie效驗成功,就不會做任何阻攔,讓此請求進行下去。在配置文件中,有下面的一個節(jié)點表示了此filter的URL映射關系:只攔截所有的jsp請求。filtermapping filternameSSOFilter/filtername urlpattern*.jsp/urlpattern /filtermapping下面還有幾個主要的函數(shù)需要說明:private String SSOService(String cookievalue) throws IOException {String authAction = ?action=authcookieamp。cookiename=。
點擊復制文檔內容
公司管理相關推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1