struts2基於攔截器的登錄


基於SSH2框架Struts2攔截器的登錄驗證實現

原文鏈接:http://www.blogjava.net/bolo/archive/2010/08/28/330105.html

作者:菠蘿大象

博客:http://www.blogjava.net/bolo/

    通過之前的 Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解實例詳解系列文章,我們已經成功將這三種框架整合到了一起, 這次大象將在此基礎上用一個小實例來說明,怎么利用 Struts2 的攔截器特性實現登錄驗證,以及超時后的跳轉問題。
    大象在這里假設你已經弄清楚了Struts2攔截器的基本概念,可以進入實際運用了。那么我們在之前的基礎上只需要做下小小的改變,就可以使用Struts2的攔截器機制實現登錄的驗證。
    修改數據庫
    user表中增加password字段,將初始密碼都設為123,因為是示例所以采用明碼,實際開發中,當然不能這樣做,需要進行加密處理。再將name改為username,其實name字段可以不用改名,我這樣做是為了命名規范,請注意,如果字段改為usernameUser類中的對應屬性也要進行相應變化(如果你加注釋寫法可以不用改),還有TestTestHibernateDao中的getName()都要改為getUsername()
    修改index.jsp
    hello.action改為login!welcome.action
    增加登錄類
    web包下創建LoginAction類,在其中添加welcomelogin方法,前者為index.jsp的跳轉方法,它將轉向到login.jsp頁面。而后者則用來處理登錄事件,如果成功將進入到主頁面,失敗則返回到登錄頁面。最后面有源碼下載,這里省略。
    增加攔截器
    要實現登錄攔截的功能,最關鍵的就是要實現攔截類了,在common包下面再增加一個interceptor包,創建AuthorityInterceptor類,並繼承MethodFilterInterceptor,為什么繼承它呢?因為它是對方法進行攔截,而在這個應用中,我們是對絕大部分的方法進行攔截,而對個別例外的方法排除。
    
    session中取得當前登錄用戶,如果存在,就繼續執行后面的攔截器;否則,就跳轉到登錄頁面。所以這樣實現了代碼后,還要在struts.xml中進行相應的設置。
    增加攔截器配置
   
    做好這一步之后,那么登錄驗證攔截器將會對除了welcomelogin之外的所有方法進行攔截了。另外我想說下,攔截器的實現還有一種注解的方式,它不需要實現攔截器類,只需要指定一個注解類型和一個攔截方法就可以了,具體的請自己去查相關資料。這里我沒采取注解方式是因為它只能應用到方法級別,不能進行代碼復用,如果有多個Action都需要執行攔截操作,那么就得把同樣的注解方法復制到不同的Action中,這無疑是很糟糕的。而使用攔截器類就簡單多了,只需要在配置文件中指定它,並引用它,就可以在任意的Action中生效,也沒有侵入式代碼,這就是常說的AOP切面,struts2的攔截器就是AOP的一個具體實現。
    增加全局轉向配置
   
    還記得攔截器里面的return Action.LOGIN 這句吧,當程序執行完這一行后,就會到struts.xml文件中去找namelogin全局轉向配置,因此這里我設置為一個jsp頁面,而沒有定義成/login!welcome.action就是因為如果按這樣做了,那么轉向后,登錄頁面將顯示在iframe框架中,這肯定不是我們希望看到的。解決這個問題,網上有很多方法,我查了一下,再結合實際,其實沒那么復雜,一句話就可以搞定。如果使用frameset這種做法也有效,大象同樣測試過,只不過例子中的代碼沒有這樣寫而已。
    增加jump.jsp
   
    增加login.jsp
    登錄頁面,輸入用戶名與密碼,因為是例子,所以我沒加驗證碼,在正式開發中應該加上。
   
    增加login-index.jsp
    這是登錄成功后轉向的頁面,在這里,我用iframe框架來顯示內容。
   
    到這里,所有工作都已經完成,已經可以登錄登出了,並且攔截器也可以正常工作,超時登出也沒問題,大家下載例子運行看看吧!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM