Springboot自定義注解


??需求:通過Springboot自定義注解的方式來實現(xiàn)權限和日志模塊的引用(這里側重應用層面作用)。


1晋渺、工程描述


a1.png

??說明:InAuth.java為要定義的注解接口,AuthAspect.java為切面實現(xiàn),UserAuthEnum.java為用戶權限枚舉氛改,AuthServiceImpl.java為業(yè)務實現(xiàn),Auth.java為對外提供接口(控制層)比伏。


2胜卤、代碼步驟


第一:定義注解接口

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface InAuth {
    UserAuthEnum[] limit() default {};
}

第二:定義切面

/*****************************************
 ***說明:這里重點介紹權限,忽略登錄會話等***
 *****************************************/
@Aspect
@Component
@Configuration
public class AuthAspect {
    @Around("@annotation(inAuth)")
    public Object around(ProceedingJoinPoint point, InAuth inAuth) throws Throwable {
        UserAuthEnum[] ifAuth = inAuth.limit();// 獲取接口權限
        if (ifAuth == null || ifAuth.length == 0) {
            return point.proceed(); // 該接口不需要權限
        }
        int[] limit = {10,20,100};  //將ifAuth轉(zhuǎn)成權限碼
        // 1、獲取用戶的會話Token赁项,我們是放在ThreadLocal中的
        // 2葛躏、根據(jù)Token會話中取出用戶的權限列表,會話存在redis中
        // 3悠菜、上面兩步略舰攒,用戶權限直接用數(shù)據(jù)模擬,我們用戶權限返回的是Set
        // 4悔醋、可以加一些邏輯判斷摩窃,返回一些異常情況
        Set<Integer> userSet = new HashSet<Integer>();
        userSet.add(1000) ;
        for (int lt : limit) {
            if (userSet.contains(lt)) {
                return point.proceed();
            }
        }
        return "no acess auth!";
    }
}

第三:定義權限的枚舉類

public enum UserAuthEnum {
    A_ADMIN(10), // 管理員權限
    A_READ(20), // 只讀權限
    A_UPLOAD(30), // 上報權限
    A_CHARTS(40), // 報表權限
    A_LIST(50);// 名單管理權限
    private int code;
    private UserAuthEnum(int code) {
        this.code = code;
    }
    public int getCode() {
        return this.code;
    }
}

第四:定義業(yè)務接口(引用自定的注解)

@Service("authService")
public class AuthServiceImpl implements AuthService {
    @Override
    @InAuth(limit={UserAuthEnum.A_CHARTS,UserAuthEnum.A_ADMIN}) //要么有管理員權限,要么有charts權限可以訪問
    public String testAuth() {
        return "---auth test---";
    }
}

第五:定義切面

public interface EacProxy {
     public String query();  //可以返回復雜對象類型
}

第六:定義測試接口

@RestController
public class Auth {
    @Autowired
    private AuthService authService ;

    @RequestMapping("/auth")
    public String sayHello() throws Exception {
        return authService.testAuth() ;
    }
}

??注解讓代碼代碼世界更簡潔、更簡單了猾愿,但也存在缺點鹦聪,讓異常定位更麻煩,讓理解spring執(zhí)行原理更復雜(感覺從spring原理慢慢修理才是正道)蒂秘。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末泽本,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子姻僧,更是在濱河造成了極大的恐慌规丽,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件撇贺,死亡現(xiàn)場離奇詭異赌莺,居然都是意外死亡,警方通過查閱死者的電腦和手機松嘶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進店門艘狭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人喘蟆,你說我怎么就攤上這事缓升。” “怎么了蕴轨?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵港谊,是天一觀的道長。 經(jīng)常有香客問我橙弱,道長歧寺,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任棘脐,我火速辦了婚禮斜筐,結果婚禮上,老公的妹妹穿的比我還像新娘蛀缝。我一直安慰自己顷链,他們只是感情好,可當我...
    茶點故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布屈梁。 她就那樣靜靜地躺著嗤练,像睡著了一般。 火紅的嫁衣襯著肌膚如雪在讶。 梳的紋絲不亂的頭發(fā)上煞抬,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天,我揣著相機與錄音构哺,去河邊找鬼革答。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的残拐。 我是一名探鬼主播途茫,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蹦骑!你這毒婦竟也來了慈省?” 一聲冷哼從身側響起臀防,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤眠菇,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后捎废,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡致燥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了辐益。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡揩局,死狀恐怖榨惰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤掂榔,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站枯途,受9級特大地震影響教寂,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜憔足,卻給世界環(huán)境...
    茶點故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一胁附、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧四瘫,春花似錦汉嗽、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春弓叛,著一層夾襖步出監(jiān)牢的瞬間彰居,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工撰筷, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留陈惰,地道東北人。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓毕籽,卻偏偏與公主長得像抬闯,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子关筒,可洞房花燭夜當晚...
    茶點故事閱讀 44,689評論 2 354

推薦閱讀更多精彩內(nèi)容