JFinal學習筆記(三) 過濾器實現用戶登錄驗證

之前由於本人沉迷星際不能自拔導致博客長期沒有更新,只能說玩物喪志啊。

這一篇文章按照之前的計劃將開始說明jfinal中過濾器的使用方法,並介紹如何通過過濾器來實現用戶登錄情況的驗證。

首先說明一下爲什麼要進行登錄驗證,以上一篇文章中的用戶登錄爲例,正常情況用戶應該是先訪問http://localhost:8080/jfinal_tomcat/如下圖所示。

在該頁面下輸入用戶名和密碼通過驗證後才能跳轉至http://localhost:8080/jfinal_tomcat/manage頁面,如下圖所示。


但是如果用戶已經知道了http://localhost:8080/jfinal_tomcat/manage的地址,在不登錄的情況下直接在地址欄中輸入這個地址並進行訪問會怎麼樣呢,在上一篇文章給出的例子中將會出現這樣的情況,如下圖所示。


從圖中可以看出用戶可以對http://localhost:8080/jfinal_tomcat/manage的地址對應的網頁進行訪問,只是因爲沒有登錄所以用戶名顯示爲null而已,這顯然是我們不希望看到的。爲了解決這個問題我們就需要通過自定義過濾器的方法來對進行訪問的用戶進行過濾。而在jfinal中開發者可以通過實現Interceptor接口的方法來快速的實現自定義過濾器的功能,具體步驟如下。

首先請按照前兩篇文章介紹的方法完成jfinal的基本配置和用戶登錄的實現,然後新建一個MyInterceptor類,該類需要實現jfinal框架中的Interceptor接口,並實現接口中的intercept方法。然後在intercept方法中實現具體的過濾條件。這裏通過檢查session中是否存儲的用的nickname來判斷當前用戶是否已登錄,因爲之前在login中當用戶登錄成功後會在session中保存用戶的nickname,具體參考第二篇文章中的代碼。如果當前session中有nickname的數據則判斷當前用戶是已登錄的,則允許繼續訪問,如果nickname爲空,則停止當前訪問,並跳轉至登錄頁面讓用戶登錄,具體代碼如下。

package Config;

import javax.servlet.http.HttpSession;

import com.jfinal.aop.Interceptor;
import com.jfinal.core.ActionInvocation;

public class MyInterceptor implements Interceptor {

	@Override
	public void intercept(ActionInvocation ai) {
		// TODO Auto-generated method stub
		HttpSession session = ai.getController().getSession();
		if(session == null){
			ai.getController().redirect("/");
		}
		else{
			String nickname = (String) session.getAttribute("nickname");
			if(nickname != null) {
				//System.out.println("hello");
			}
			else {
				ai.getController().redirect("/");
			}
		}
	}

}

其中ai.getController().redirect("/");語句是用來實現跳轉的,參數是相對於網站首頁地址的相對地址,因爲這裏的登錄頁及首頁所以直接打"/"就可以了,然後在對IndexController類進行修改,在manage方法前加上@Before(MyInterceptor.class),具體代碼如下。

@Before(MyInterceptor.class)
public void manage() {
	render("manage.jsp");
}

這樣就完成了用戶登錄驗證的設置,下面進行具體的測試。首先在不輸入用戶名密碼的情況下直接輸入登錄後的地址http://localhost:8080/jfinal_tomcat/manage,如下圖所示。


然後進行跳轉,結果頁面自動返回到了登錄頁面,如下圖所示。


這樣就實現了用戶登錄情況的驗證和過濾。其實過濾器不光可以實現對用戶登錄情況的驗證和過濾,在複雜的系統中還可以實現對用戶權限的過濾,通過在過濾方法中判斷當前用戶是否有進行該操作的權限來實現對用戶操作權限的驗證和過濾。

關於jfinal中的過濾器暫行就先講這些,如果後期有新的發現我會再進一步的進行說明,下一篇我會記錄一下我通過jfinal並結合uploadify插件來實現圖片上傳的具體方法。

PS:希望這幾天不要再沉迷星際了!!!

發佈了31 篇原創文章 · 獲贊 59 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章