使用spring aop實現URL地址參數權限控制

我們傳統的權限控制,一般是通過給角色分配一個URL,從而控制不同角色訪問不同URL地址,但這往往只能控制到整個URL的訪問權限,並未能根據URL中的參數的變化而動態控制訪問的權限。

比如訪問個人信息的鏈接通常爲:http://192.168.1.110/web/sys/user.do?userId=1101,在做權限分配時,我們通常都是直接將 http://192.168.1.110/web/sys/user.do 的訪問權分配給所有角色,以方便用戶可以查看自己的個人信息,但這樣會造成的問題顯而易見,如果我知道了其他用戶的userId,或者我直接就隨便改個userId,我就可以訪問到對應的用戶信息了,這樣很不安全。

解決的思路可以是這樣:開發一個URL攔截功能,可以配置需要攔截的URL地址以及需要攔截的參數,再編寫一個groovy腳本,結合攔截到的參數去判斷當前用戶是否有權訪問此URL,結合spring 提供的AOP特性,我們可以攔截所有的控制層訪問,在訪問前檢查是否需要攔截,如果需要攔截,則將URL中的參數取出來,結合groovy腳本進行權限的判斷。

示例:

URL:http://192.168.1.110/web/sys/user.do

參數:userId

腳本:Object userId = map.get("userId"); // map是在AOP中構建的參數鍵值對

   if(BeanUtils.isEmpty(userId)) return false;// 沒有權限

   // 如果當前登陸用戶與參數中的用戶ID一致,則有權訪問

  return userId.equals(CurrentUserUtil.getCurrentUserId());


在這裏只是舉了一個簡單的例子說明此功能的作用,我們還可以將其他運用到其他場景,比如說表單的訪問權限,我們可以根據表單分類,給不同角色分配訪問權限,然後在在訪問表單詳細頁面的時候,我們可以攔截表單的ID,獲取表單分類,再去查看當前用戶是否有權限可以訪問該表單分類等等……   

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章