1. 程式人生 > >一種基於註解的Spring MVC許可權控制方法

一種基於註解的Spring MVC許可權控制方法

簡介

本文介紹一種採用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),