最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Shiro @RequiresPermissions不生效原因及解決方案

 更新時間:2026年05月28日 09:09:44   作者:Mr.Java.  
Shiro@rio@RequiresPermissions不生效的原因分析,包括AOP配置和權(quán)限寫寫法錯誤,幫助開發(fā)者正確配置AOP依賴和理解權(quán)限寫法,以確保權(quán)限檢查功能正常運行

Shiro @RequiresPermissions不生效原因

原因一、AOP不生效導(dǎo)致

檢查maven,添加AOP依賴:

        <!-- AOP依賴,必須,否則shiro權(quán)限攔截驗證不生效 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>

檢查代碼,開啟了注解支持

    /**
     * Shiro生命周期處理器
     */
    @Bean(name = "lifecycleBeanPostProcessor")
    public static LifecycleBeanPostProcessor getLifecycleBeanPostProcessor() {
        return new LifecycleBeanPostProcessor();
    }

    /**
     * 開啟Shiro的注解(如@RequiresRoles,@RequiresPermissions),需借助SpringAOP掃描使用Shiro注解的類,并在必要時進(jìn)行安全邏輯驗證
     */
    @Bean
    @DependsOn("lifecycleBeanPostProcessor")
    public DefaultAdvisorAutoProxyCreator advisorAutoProxyCreator() {
        DefaultAdvisorAutoProxyCreator advisorAutoProxyCreator = new DefaultAdvisorAutoProxyCreator();
        advisorAutoProxyCreator.setProxyTargetClass(true);
        return advisorAutoProxyCreator;
    }

    /**
     * 開啟Shiro-aop注解支持
     */
    @Bean
    public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager) {
        AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor();
        authorizationAttributeSourceAdvisor.setSecurityManager(securityManager);
        return authorizationAttributeSourceAdvisor;
    }

原因二、@RequiresPermissions 寫法含有(冒號: 逗號, 星號*)

源碼校驗權(quán)限的時候,會調(diào)用 

org.apache.shiro.realm.AuthorizingRealm#isPermitted(org.apache.shiro.authz.Permission, org.apache.shiro.authz.AuthorizationInfo)

源碼:

org.apache.shiro.authz.permission.WildcardPermission#implies

 public boolean implies(Permission p) {
        // By default only supports comparisons with other WildcardPermissions
        if (!(p instanceof WildcardPermission)) {
            return false;
        }

        WildcardPermission wp = (WildcardPermission) p;

        List<Set<String>> otherParts = wp.getParts();

        int i = 0;
        for (Set<String> otherPart : otherParts) {
            // If this permission has less parts than the other permission, everything after the number of parts contained
            // in this permission is automatically implied, so return true
            if (getParts().size() - 1 < i) {
                return true;
            } else {
                Set<String> part = getParts().get(i);
                if (!part.contains(WILDCARD_TOKEN) && !part.containsAll(otherPart)) {
                    return false;
                }
                i++;
            }
        }

        // If this permission has more parts than the other parts, only imply it if all of the other parts are wildcards
        for (; i < getParts().size(); i++) {
            Set<String> part = getParts().get(i);
            if (!part.contains(WILDCARD_TOKEN)) {
                return false;
            }
        }

        return true;
    }

含有(冒號: 逗號, 星號*)會前綴匹配放權(quán),

例如:

A用戶有 sys:role 的權(quán)限,那么 @RequiresPermissions("sys:role:add")對它來說,也可以。

就是 sys:role 擁有了 sys:role:* 的權(quán)限,不管 sys:role:add 還是 sys:role:delete 都無法攔截它。

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 從java8升級java17的一些調(diào)整總結(jié)

    從java8升級java17的一些調(diào)整總結(jié)

    在過去的幾年里,Java經(jīng)歷了多次版本升級,從JDK8到JDK17,每一次升級都帶來了許多新的特性和改進(jìn),這篇文章主要介紹了從java8升級java17的一些調(diào)整,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2026-03-03
  • java輸出數(shù)組的實現(xiàn)方式

    java輸出數(shù)組的實現(xiàn)方式

    數(shù)組輸入輸出對初學(xué)者較復(fù)雜,可使用單個元素輸出或Arrays.toString()方法輸出整個數(shù)組,后者需傳入數(shù)組參數(shù),簡化打印過程
    2025-07-07
  • Java 自定義Spring框架以及Spring框架的基本使用

    Java 自定義Spring框架以及Spring框架的基本使用

    Spring框架是由于軟件開發(fā)的復(fù)雜性而創(chuàng)建的。Spring使用的是基本的JavaBean來完成以前只可能由EJB完成的事情。然而,Spring的用途不僅僅限于服務(wù)器端的開發(fā)
    2021-10-10
  • Springboot?Mybatis使用pageHelper如何實現(xiàn)分頁查詢

    Springboot?Mybatis使用pageHelper如何實現(xiàn)分頁查詢

    這篇文章主要介紹了Springboot?Mybatis使用pageHelper如何實現(xiàn)分頁查詢問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Java lastIndexOf類使用方法原理解析

    Java lastIndexOf類使用方法原理解析

    這篇文章主要介紹了Java lastIndexOf類使用方法解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • Java實現(xiàn)雙向鏈表(兩個版本)

    Java實現(xiàn)雙向鏈表(兩個版本)

    這篇文章主要介紹了Java實現(xiàn)雙向鏈表(兩個版本)的相關(guān)資料,需要的朋友可以參考下
    2016-02-02
  • SpringBoot添加License的多種方式

    SpringBoot添加License的多種方式

    License指的是版權(quán)許可證,當(dāng)我們開發(fā)完系統(tǒng)后,如果不想讓用戶一直白嫖使用,比如說按時間續(xù)費,License的作用就有了。我們可以給系統(tǒng)指定License的有效期,控制系統(tǒng)的可用時間。
    2021-06-06
  • Java使用try-with-resources實現(xiàn)自動解鎖

    Java使用try-with-resources實現(xiàn)自動解鎖

    項目中使用Redission分布式鎖,每次使用都需要顯示的解鎖,很麻煩,Java 提供了 try-with-resources 語法糖,它不僅可以用于自動關(guān)閉流資源,還可以用于實現(xiàn)自動解鎖,本文將介紹如何利用 try-with-resources 實現(xiàn)鎖的自動釋放,需要的朋友可以參考下
    2025-01-01
  • 深入理解Java高級特性——注解

    深入理解Java高級特性——注解

    這篇文章主要介紹了Java高級特性——注解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • 詳解Java線程池是如何重復(fù)利用空閑線程的

    詳解Java線程池是如何重復(fù)利用空閑線程的

    在Java開發(fā)中,經(jīng)常需要創(chuàng)建線程去執(zhí)行一些任務(wù),實現(xiàn)起來也非常方便,此時,我們很自然會想到使用線程池來解決這個問題,文中給大家提到使用線程池的好處,對Java線程池空閑線程知識感興趣的朋友一起看看吧
    2021-06-06

最新評論

河北区| 湛江市| 弥渡县| 义乌市| 石台县| 五家渠市| 邵阳县| 城步| 商丘市| 甘泉县| 社会| 通榆县| 建昌县| 江都市| 武鸣县| 峡江县| 宝兴县| 平和县| 黑龙江省| 临湘市| 太仆寺旗| 曲阳县| 靖西县| 广安市| 大邑县| 大洼县| 拉萨市| 平谷区| 隆化县| 大宁县| 来凤县| 清丰县| 曲阜市| 敖汉旗| 茂名市| 靖安县| 筠连县| 合肥市| 和田县| 东台市| 枣庄市|