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