基於SpringMVC的註解式許可權控制

2021-10-02 16:50:45 字數 2566 閱讀 5505

1. 開發目標

在shiro的許可權分配中,存在@requirespermissions註解進行許可權的控制,該註解規定了所進行了註解的方法,只能被具有某些許可權的人進行訪問,且許可權之間為&的關係。這個許可權控制是不符合我們所需要的許可權控制需求的。(我們所需要的是具有某些許可權之一的使用者可以訪問,同時具有這些許可權的子許可權也可以訪問與具有這些許可權本身和其父許可權才能進行訪問的這兩種情況區分開)。

我們在該部落格中所描述的許可權控制,是一種類似於shiro的註解式許可權控制。做到使用@existpermissions和@haspermissions來進行許可權控制的目的。

2. 配置***配置

配置乙個類為springmvc的***時,只需要在springmvc.xml中新增如下**即可:

其中介面prehandle中的**會在訪問到controller層界面前執行,而aftercompletion與posthandle介面則是在controller層執行完畢後,才會執行**。因此我們在進行許可權處理時,要將許可權控制**寫在prehandle方法中。在上述xml配置中,將securityfilter 類作為***進行了處理。這個***需要先實現介面handlerinterceptor 。在該介面中有三個方法,分別為aftercompletion,posthandle,prehandle。

3. 註解配置

在這裡我們還需要定義兩個註解@existpermissions和@haspermissions。

/***

/***

4. prehandle方法

在方法prehandle 中有三個引數,request,response,handler。前兩個引數大家都是十分熟悉的,不做描述,重點在於第三個引數handler。

handler物件是乙個object物件,因此,我們需要先通過 handler.getclass()方法來檢視這個方法的具體型別。

經過system.out.println(handler.getclass());

可以發現這個物件本身的型別是

org.springframework.web.method.handlermethod

那麼此時,我們對這個物件進行強制轉換,將其強轉為它本身的型別。

我們所需要使用的部分為註解部分的內容。從handlermethod中獲取我們所需要的@haspermissions 註解,然後從註解中獲得所我們要進行驗證的許可權的字串。

haspermissions haspermissions = handlermethod.getmethodannotation(haspermissions.class);

for(string permission : haspermissions.permissions())

set permissions = user.getpermissions();

//獲取相應許可權註解資訊

handlermethod handlermethod = (handlermethod) handler;

//驗證使用者是否持有其中乙個許可權

haspermissions haspermissions = handlermethod.getmethodannotation(haspermissions.class);

boolean hasper = false;

if(haspermissions != null)

}}else

//驗證使用者是否持有其中乙個許可權,或者其中乙個許可權的子許可權

existpermissions existpermissions = handlermethod.getmethodannotation(existpermissions.class);

boolean existper = false;

if(existpermissions != null)

} }else

if(hasper && existper)else

}

/**

* 驗證使用者是否持有乙個許可權,或者乙個許可權的子許可權

* @param permissions

* @param permission

* @return

/public boolean haspermission(set permissions, string permission)

}return false;}/*

* 驗證使用者是否持有乙個許可權

* @param permissions

* @param permission

* @return

*/public boolean existpermission(set permissions, string permission)else if(permission.substring(0, userpermission.length()).equals(userpermission))

}return false;

SpringMVC註解式開發

controller 標註為乙個控制器 萬用字元 xx 已xx結尾的url xx 已xx開頭的url xx xx前可有0到n個目錄 xx xx前必須有1個目錄 請求 如果設定請求則只能當前請求可以訪問 使用註解式開發 controller 用於標註為乙個控制器 public class firstc...

Spring MVC註解式開發

前面介紹了springmvc框架作為我們spring框架的一部分,最核心的功能就是幫助我們強化註解的使用,主要是幫助我們來管理控制層的。一 springmvc的使用 其中必須介紹的就是 註冊元件掃瞄器 那麼我們只需要在web inf的view包下建立這兩個jsp檔案 spring mvc這個框架使用...

Spring MVC 系列(二) 基於註解的開發

春季自2.0版本開始,陸續引入了一些註解用於簡化spring的開發 本文就將介紹spring mvc常用註解以及使用場景。controller 控制層 service 業務層 repository 道層 component 僅僅表示乙個元件 bean 可以作用在任何層次。spring mvc作為sp...