java - 關於Spring MVC登入系統的設計
天蓬老师
天蓬老师 2017-05-17 10:08:17
0
4
592

我現在的想法是定義一個User對象,其中包含uid, username, password, isLogined等。然後設定一個攔截器,在使用者第一次請求(session開始)的時候,從資料庫中根據user.isLogined判斷使用者是否登錄,如果登入了就在session級別上設定isLogined等於true,否則就重定向到登入頁面。

但是這樣的話在使用者第一次要求的時候,我該如何判斷使用者的身分?如果透過在cookie中設定uid的話,這個uid可以被其他人偽造,有潛在的安全風險。

請問對於這個問題,有什麼好的解決方案?

補充

我主要的問題就是如何判斷使用者登入身分的合法性,現在我的想法是將user id加密之後儲存到cookie當中,這把金鑰只有我一個人知道,這樣別人即使知道user id也沒有辦法,請問這樣是否合理。

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回覆(4)
滿天的星座

這個風險好大:uid修改為別人的,碰巧那人也登入了,那麼就以別人的身分登入了

沿著你的方案走:
1,cookie的uid設定為加密的,或是無意義的隨機串
2,用這個串和db裡比對,或者和cache裡的比對,同時校驗ip或user agent加強安全性
3,要考慮會話過期策略

我想大声告诉你

首先你的資料庫需要先儲存使用者信息,設定isLogined 默认为FALSE,每次登陆成功后更新为TRUE,退出后更新为FALSE;判断登陆成功的标志用userName userPass 匹配,还有isLogined 判断;最后设置判断级别,先isLogined用户密码

Ty80

建議登入狀態不要儲存在資料庫中,至少也別存在關係型資料庫中;可以在使用者登入校驗完成後,返回token,之後使用者的所有請求在headers的authorization欄位都帶上這個token;可以去了解一下jwt及相關實作

过去多啦不再A梦

就按你現在的方式,如果我一個匿名用戶,沒登錄,去請求你的某個接口,然後被攔截從數據庫中根據user.isLogined判斷用戶是否登錄,那麼問題來了。你user.isLogined中的這個user是誰呢?


建議直接登入後把使用者登入成功資訊放session裡,請求的時候攔截器去驗證session就好了,不要去存取資料庫,每次要求都有這一個存取資料庫操作很有消耗的。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板