2012-12-25 33 views
1

在Spring MVC Web應用程序中,除了家庭,關於,服務條款等以外,只有當用戶登錄時才能查看每個頁面,哪裏是進行身份驗證的最佳位置?在過濾器級別,控制器級別還是兩者?在哪裏做webapp的用戶認證?

我問這是因爲現在我正在寫我的控制器,我已經重複了很多代碼,如:

if (currentUser.isAuthenticated()) // and possibly currentUser.hasPermission("some") 
    // do logic and return proper page 
else 
    // return to home or login page 

它會更好把所有的下需要身份驗證的頁面一些URL模式和保護(捕獲和重定向,如果用戶未驗證)他們與過濾器?通過這種方式,控制器更清潔,並且簡單地返回請求的頁面

在這種情況下什麼是適當的設計?

+0

一般來說,認證越早,效果越好。由於這是一個web應用程序,你不能在web.xml級別注入「登錄/未登錄」嗎?我不使用Spring,因此我不知道它在這種情況下是如何工作的... – fge

+0

我相信你可以做到這一點(但我不知道如何),但是我希望對它有更多的編程控制,如記錄請求。 –

回答

1

你需要一個攔截器。幾年前,我對於身份驗證和會話處理 [Spring MVC 3 Global Request Mapping]提出了類似的問題。這是我如何解決和實施它 [Github source for authentication session handling using interceptor]

+0

攔截器看起來不錯,但我不喜歡你這樣做。我不想將用戶的密碼存儲在cookie中,並且我不想在任何不是視圖的HTML中使用html,因爲我有不同的返回樣式,json,xml或jsps。 –

+0

密碼在cookie中加密,這就是您通常如何處理cookie認證的方式。至於我在postHandler中的html,這是我用來處理全局html的一種方式,但我相信你可以折射並使它看起來更好。 – Infinity

0

最好用彈簧安全保護彈簧應用。 您在xml中配置您的安全性,併爲您的應用程序創建servlet過濾器。