Java的登陆验证问题
java中的登陸驗證問題可以有多種方式進行驗證,通過攔截器功能完成,可以通過過濾器功能完成,也可以簡單的代碼在JSP頁面中單獨完成,其中都 涉及到一個關鍵的驗證步驟,這個驗證原理ASP,PHP,JAVA等語言都大致相同,但具體到不同語言實現時有些差別;同時驗證還涉及另外一個獨立的問題 是驗證到什么程度的問題,下面我就以我的認識講解一下;
一,驗證原理
下面看看JAVA中的驗證關鍵步驟,一般我們用session變量來保存用戶成功登錄后的密碼,為了防止用戶把URL復制下來然后直接在瀏覽器地址 欄中輸入試圖登錄,即非登錄訪問,這個時候我們首先需要進行驗證工作,主要是檢測保存密碼 session?是否存在,或者其是否等于預先設定的密碼;session 變量時保存在服務器端,可以在前后有關聯的跨頁面間存在,在 session 不超時的情況下,可通過判斷服務器端該變量是否存在來判斷是否已經登錄,存在則已經登錄,不存在則沒有登錄;
這里先了解一個輔助問題:null 和空值的問題,這不同語言處理不完全相同;
(1)Java中,null我這里的指的是沒有定義的,即根本就不存在,沒有分配內存空間的情況,只是預先知道其數據類型,如 String a=null;
(2)而空值則是有數據類型的,實際存在的,分配了內存空間的,只不過內容為空而已,如:String a="";
那Java中如果用戶沒有成功登陸,那在服務器端指定名稱的session變量是不存在的,所以這個時候指定名稱的session變量需要跟null比較來進行判斷是否已經登錄了,
能不能跟字符型的空值進行比較判斷是否已經登錄了呢?不能, 為什么呢?原因是java中當試圖查找一個不存在的session變量,返回的null,即不存在,沒定義,沒有分配內存的,(java中)當強制轉換為 String型時,不存在的null變成實際存在的String類型且內容為null的結果,也就不等于String類型的空值,如果設計不為空判定為已 經登錄,那因為這個原因,就出現沒有登錄的也可以訪問了,顯然不是我們想要的;
那能不能跟字符型的null來進行比較判斷是否已經登錄了呢?可以,但過程變得麻煩,不推薦使用;
通過空值方式比較是否登錄我們知道,不存在的 session 變量通過String強制轉換后變成實際存在的字符型的 null ,那我們可以設計等于字符型的null的判定為未登錄,但會出現一個情況就是用戶的密碼正好為字符型的null時反而不能通過驗證了,當然可以做其它的處 理來解決這個問題,但邏輯和代碼變復雜了,我不希望這樣,簡單比較方便;
?
二,驗證的細度
上面的驗證方式,只能判斷是否已經登錄了,但是很多的站點,是允許多用戶的情況,各個不同用戶只能對各自自己的資源進行管理,所以進行資源管理時, 首先要登錄,登錄了還需要進一步區別驗證是否是自己本人,即不能出現在同一個站點中,自己登錄了,同時可以修改另一個用戶的資料的情況;
通過上面我們知道通過判斷服務器端session變量的是否存在可以判定是否登錄,但這個對一個站點來說,這僅能判斷是否已經登錄到了本站點,在多用戶用 戶的情況下,如果一個用戶登錄后,使用適當的URL即可訪問另一個用戶的資料,這個是不希望出現(可能管理員除外),所以這個時候,驗證不能是判斷否為 空,而是通過session變量是否等于用戶本身設置的某個密碼,來判斷是否是自己本人登錄,這就使登錄驗證細到用戶級別,同一個站點的多個用戶各自只能 管理自己的資料;
可能還有其他的方式來驗證,如果有其它的方式,給我留言一下,我參考參考...
注:轉載 http://blog.csdn.net/shenzhennba/article/details/8100853
轉載于:https://www.cnblogs.com/wcyBlog/p/3820403.html
總結
以上是生活随笔為你收集整理的Java的登陆验证问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微信之父张小龙:产品经理的必备书单(转)
- 下一篇: 俄罗斯方块:win32api开发