一種基於註解的Spring MVC許可權控制方法
阿新 • • 發佈:2019-01-31
簡介
本文介紹一種採用annotation來對spring-mvc進行許可權控制的方法. 通過列舉類來定義許可權項. 將annotation標註到需要控制權限的spring-mvc方法上. 然後,在spring-mvc中定義全域性過濾器, 過濾所有spring-mvc方法, 檢視方法上的許可權annotation資訊, 以此對許可權進行控制.
優點
編寫比較方便, 在需要控制權限的方法上進行annotation的標註即可, ide能夠對annotation進行識別支援. 檢視許可權配置比較方便, 因為annotation就在方法上, 不用去其他地方翻看. 實現方式比較簡單.
具體實現
1.建立許可權列舉類
建立許可權列舉型別, 用於描述許可權的種類, 包含了許可權的名稱. 每個列舉值中包含了許可權中文名稱和許可權索引值(即許可權位). (思考:是否可以直接用中文名稱作為列舉值的名稱,我在其他程式已經用了中文列舉名稱了,暫時沒有遇到問題)
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
public enum AuthorityType{
//
包含了列舉的中文名稱, 列舉的索引值
WORKER( "增刪改查員工" , 1 ),
SALES_ORDER_CREATE( "建立訂單" , 6 ),
SALES_ORDER_FIND( "檢視訂單" , 7 ),
SALES_ORDER_MODIFY( "修改訂單" , 8 ),
SALES_ORDER_DELETE( "刪除訂單" , 9 ),
;
private String
name;
private int index;
private AuthorityType(String
name, int index)
{
this .name
= name;
this .index
= index;
}
public String
getName() {
return name;
}
public void setName(String
name) {
this .name
= name;
}
public int getIndex()
{
return index;
}
public void setIndex( int index)
{
this .index
= index;
}
}
|
2.登入方式的列舉類
登入方式的列舉類, page代表傳統登入頁面, json表示ajax的登入
?1 2 3 4 5 6 |
public enum ResultTypeEnum
{
//整頁重新整理
page,
//json資料
json
}
|
3.建立表示許可權annotation類
建立annotation類, 用於標註到需要許可權驗證的地方
?1 2 3 4 5 6 7 8 9 10 11 12 13 |
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target (ElementType.METHOD)
@Retention (RetentionPolicy.RUNTIME)
@Documented
public @interface FireAuthority
{
AuthorityType[]
authorityTypes();
ResultTypeEnum
resultType() default ResultTypeEnum.page;
}
|
4.在user類中加入許可權欄位
在user使用者類中新增文字欄位表示許可權, 欄位長度為250字元(因為mysql預設255個字元,可以代表250個許可權應該夠用了), 字元內容是0或者1. 1表示有許可權, 0表示無許可權. 提示: 對於使用者的許可權配置, 只要將對應的許可權位設定為0或者1即可.
?1 2 3 4 5 6 |
create table user (
id integer not null auto_increment,
name varchar (255),
right_content varchar (255),
|