Jsp中使用過濾器實現使用者許可權限制功能

2021-08-23 15:31:39 字數 2168 閱讀 3659

今天下午,臨下課的時候有個學生問了個關於過濾器的使用的問題,也不知道她從搞想到的,估計也是網上哪位達人的演示,她說原來那個功能有些侷限,自己擴張了一下,但老是達不到效果。於是就來找我了。

她的需求如下:

1、目標:限制登入使用者的訪問頁面,根據不同的許可權可以查詢相應的頁面。

2、場景:已有三個使用者admin、normal1、normal2,其中normal1只能訪問page/jsp1下的頁面,normal2只能訪問page/jsp2下的頁面;

根據她的描述,我開啟她的**一看,乙個字「亂」,兩個字「很亂」,完全看不到任何邏輯在裡面,於是憑著經驗大刀闊斧的給它來個修正,修正**如下:

if (session.getattribute("user") != null) 

if(((userinfo)session.getattribute("user")).getname().equals("normal2") && !uri.startswith("/page/jsp2"))

}else

}

經過這樣修改之後基本的邏輯功能就有了,即除了管理員登入其他人都要各自進各自「家」。但是事情完全沒有就這樣結束,我以為就這樣就完事了呢,誰知道人家一執行說不行,隨便登入乙個使用者什麼都能看到,乙個也沒有限制。靠,這可把我打擊了一把,心想老子也幹了好幾年,難道還有問題,於是乎我鑽到她的機器上去了。

接著就是按套路出牌,打斷點,啟動除錯,執行......執行了幾遍,果然和她說的一樣,什麼人都能進,另外就是死都不進斷點(晚上回家後終於進斷點了,汗...)。另外學生用的myeclipse,除錯起來老是進到另外乙個web站點的filter的斷點,鬱悶的我沒脾氣了。(說來奇怪,這個班一共八組人,其它七組都在用eclipsed的jee版的那個東東,就他們組在用myeclipse,這都全拜他們組長領導有方啊,其實我也不是說用myeclipse不好,但他們用的那個版本也太老土了,現在新版的eclipse功能比他強多了,人家喜歡用,咱也不能強迫啊,都是為人民服務的,人民願意,那咱還能咋的呢)

後來沒脾氣了,發到我自己機器上調了一下,偶然的機會看了下她的登入操作的處理,我傻眼了,她是這麼寫的:

string name = request.getparameter("name");

string password = request.getparameter("password");

if (name.equals("") || password.equals("")) else

我靠,大家看仔細了啊,這段**的意思只要輸入了使用者名稱和密碼,那麼你就能登入進來,好這個還不明顯的話,那麼請您再結合上面的過濾器一起來看,這就是說,除了normal1和normal2,其他所有的人都當作管理員來處理了,終於找到癥結了,心情豁然開朗,是在登入這個地方出了紕漏。一般我們做許可權顯示,所謂限制是限制指定的使用者,對與不限制的那就是boss,所以在登入這個地方又加了判斷,滿足上面的三個使用者的要求,防止出現一堆的boss,修改後如下:

string name = request.getparameter("name");

string password = request.getparameter("password");

if (name.equals("") || password.equals("")) else else

}

這樣就相當於對登入使用者做了限制,不是什麼人都能登入的,是吧,讓你登你才能登。 

另外還有一點需要注意的是,使用過濾器的時候預設的配置,在使用

request.getrequestdispatcher("/myjsp.jsp").forward(request, response);
時是不會重新進入過濾器的,若此時也希望過濾器起作用則需要在這麼配置web.xml檔案

filterstation

filterstation

com.filterstation

/page/*

error

request

forward

include

這樣當發生類似forward和include這些內部**都會被過濾。^_^

總結:通過上面過濾器的小例子,相信你也看出了,我們可以做乙個基於角色的許可權管理系統,不同角色的人可以使用不同的**功能,這也算我沒今天沒白折騰這幾小時吧,總得留下點什麼吧。唉,做技術真難啊!

使用過濾器

過濾器在資料從作用域傳遞到指令上時進行轉換,但並不改變源資料,這允許在檢視中顯示時能夠靈活地格式化或者轉換資料。angularjs具有兩種型別的內建過濾器 一類是對單個資料進行操作的,另一類是對資料集合進行操作的。用於單個資料的內建過濾器 currency 對貨幣值進行格式化,在過濾器名之後新增冒號...

過濾器Filter 實現 使用者登入的過濾

ps 因為這個過濾器的存在,在登陸之前所有的資源都不能訪問。所以在login.jsp上如果有,js和css,也不能夠正常顯示和工作。可以在過濾器上配置 比如驗證碼 public void dofilter servletrequest req,servletresponse res,filterch...

JSP使用過濾器防止Xss漏洞

在用j a進行web業務開發的時候,對於頁面上接收到的引數,除了極少數是步可預知的內容外,大量的引數名和引數值都是不會出現觸發xss漏洞的字元。而通常為了避免xss漏洞,都是開發人員各自在頁面輸出和資料入庫等地方加上各種各樣的encode方法來避免xss問題。而由於開發人員的水平不一,加上在編寫 的...