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

Springboot整合Shiro使用yml文件管理Urls方式

 更新時(shí)間:2026年03月12日 09:15:34   作者:成為大佬先禿頭  
這篇文章主要介紹了Springboot整合Shiro使用yml文件管理Urls方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

前言

一般寫法,示例代碼如下:

@Configuration
public class ShiroConfig {
    /**
     * 核心安全過濾器對(duì)進(jìn)入應(yīng)用的請(qǐng)求進(jìn)行攔截和過濾,從而實(shí)現(xiàn)認(rèn)證、授權(quán)、會(huì)話管理等安全功能。
     */
    @Bean
    public ShiroFilterFactoryBean shiroFilterFactoryBean(DefaultWebSecurityManager securityManager) {
        ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
        shiroFilterFactoryBean.setSecurityManager(securityManager);
        // 當(dāng)未登錄的用戶嘗試訪問受保護(hù)的資源時(shí),重定向到這個(gè)指定的登錄頁面。
        shiroFilterFactoryBean.setLoginUrl("/user/index");
        // 當(dāng)用戶訪問沒有權(quán)限的資源時(shí),系統(tǒng)重定向到指定的URL地址。
        shiroFilterFactoryBean.setUnauthorizedUrl("/user/unauth");
        // 配置攔截器鏈,指定了哪些路徑需要認(rèn)證、哪些路徑允許匿名訪問
        Map<String, String> filterChainDefinitionMap = new LinkedHashMap<>();
        filterChainDefinitionMap.put("/user/login", "anon");
        filterChainDefinitionMap.put("/user/logout", "logout");
        filterChainDefinitionMap.put("/**", "authc");
        shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
        return shiroFilterFactoryBean;
    }
}

方式一:再yml中配置Map結(jié)構(gòu)

如果你覺得在代碼里面配置[Urls]不夠靈活,你可以使用application.yml文件來管理ShiroURL權(quán)限配置。

shiro:
  filterChainDefinitions:
    "[/user/login]": anon
    "[/user/logout]": logout
    "[/**]": authc

為了防止再解析過程中將斜桿/給忽略,所以特殊字符需要需要加上"[url]"雙引號(hào)和中括號(hào)。

創(chuàng)建配置映射類,示例代碼如下:

@Component
@ConfigurationProperties(prefix = "shiro")
public class ShiroUrlProperties {
    private Map<String,String> filterChainDefinitions;

    public Map<String, String> getFilterChainDefinitions() {
        return filterChainDefinitions;
    }

    public void setFilterChainDefinitions(Map<String, String> filterChainDefinitions) {
        this.filterChainDefinitions = filterChainDefinitions;
    }
}

如果報(bào)錯(cuò):

Could not resolve placeholder 'shiro.filterChainDefinitions' in value "${shiro.filterChainDefinitions}"

請(qǐng)注意@Value 注解通常用于注入單個(gè)屬性值,而不是復(fù)雜的對(duì)象或數(shù)據(jù)結(jié)構(gòu)。

然后將創(chuàng)建的類注入到Config中調(diào)用get*()方法進(jìn)行使用,示例代碼如下:

@Configuration
@Component
public class ShiroConfig {
    @Autowired
    private ShiroUrlProperties shiroUrlProperties;

    /**
     * 核心安全過濾器對(duì)進(jìn)入應(yīng)用的請(qǐng)求進(jìn)行攔截和過濾,從而實(shí)現(xiàn)認(rèn)證、授權(quán)、會(huì)話管理等安全功能。
     */
    @Bean
    public ShiroFilterFactoryBean shiroFilterFactoryBean(DefaultWebSecurityManager securityManager) {
        System.out.println(shiroUrlProperties.getFilterChainDefinitions());
        ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
        shiroFilterFactoryBean.setSecurityManager(securityManager);
        // 當(dāng)未登錄的用戶嘗試訪問受保護(hù)的資源時(shí),重定向到這個(gè)指定的登錄頁面。
        shiroFilterFactoryBean.setLoginUrl("/user/index");
        // 當(dāng)用戶訪問沒有權(quán)限的資源時(shí),系統(tǒng)重定向到指定的URL地址。
        shiroFilterFactoryBean.setUnauthorizedUrl("/user/unauth");
        // 配置攔截器鏈,指定了哪些路徑需要認(rèn)證、哪些路徑允許匿名訪問
        shiroFilterFactoryBean.setFilterChainDefinitionMap(shiroUrlProperties.getFilterChainDefinitions());
        return shiroFilterFactoryBean;
    }
}

然后去訪問需要授權(quán)的接口,正?;氐卿浱D(zhuǎn),配置完成。

方式二:再yml中配置ini格式

YAML中,|符號(hào)表示保留換行符的多行文本塊(稱為“折疊文本塊”)。它用于處理包含換行符的文本,保證文本中的換行符不會(huì)被丟失,能夠按照原樣進(jìn)行顯示。

shiro:
  filterChainDefinitions: |
    /user/login=anon
    /user/logout=logout
    /**=authc

在代碼中通過Shiro提供的Ini類進(jìn)行數(shù)據(jù)轉(zhuǎn)換,示例代碼如下:

@Configuration
public class ShiroConfig {
    @Value("${shiro.filterChainDefinitions}")
    private String filterChainDefinitions;
    /**
     * 核心安全過濾器對(duì)進(jìn)入應(yīng)用的請(qǐng)求進(jìn)行攔截和過濾,從而實(shí)現(xiàn)認(rèn)證、授權(quán)、會(huì)話管理等安全功能。
     */
    @Bean
    public ShiroFilterFactoryBean shiroFilterFactoryBean(DefaultWebSecurityManager securityManager) {
        ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
        shiroFilterFactoryBean.setSecurityManager(securityManager);
        // 當(dāng)未登錄的用戶嘗試訪問受保護(hù)的資源時(shí),重定向到這個(gè)指定的登錄頁面。
        shiroFilterFactoryBean.setLoginUrl("/user/index");
        // 成功后跳轉(zhuǎn)地址,但是測(cè)試時(shí)未生效
        shiroFilterFactoryBean.setSuccessUrl("/user/main");
        // 當(dāng)用戶訪問沒有權(quán)限的資源時(shí),系統(tǒng)重定向到指定的URL地址。
        shiroFilterFactoryBean.setUnauthorizedUrl("/user/unauth");
        Ini ini = new Ini();
        ini.load(filterChainDefinitions);
        Ini.Section section = ini.getSection(IniFilterChainResolverFactory.URLS);
        if (CollectionUtils.isEmpty(section)) {
            section = ini.getSection(Ini.DEFAULT_SECTION_NAME);
        }
        // 配置攔截器鏈,指定了哪些路徑需要認(rèn)證、哪些路徑允許匿名訪問
        shiroFilterFactoryBean.setFilterChainDefinitionMap(section);
        return shiroFilterFactoryBean;
    }
 }

配置后重啟項(xiàng)目,訪問權(quán)限接口一樣可以限制。

總結(jié)

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

相關(guān)文章

  • Spring Boot整合Elasticsearch實(shí)現(xiàn)全文搜索引擎案例解析

    Spring Boot整合Elasticsearch實(shí)現(xiàn)全文搜索引擎案例解析

    ElasticSearch作為基于Lucene的搜索服務(wù)器,既可以作為一個(gè)獨(dú)立的服務(wù)部署,也可以簽入Web應(yīng)用中。SpringBoot作為Spring家族的全新框架,使得使用SpringBoot開發(fā)Spring應(yīng)用變得非常簡(jiǎn)單,在本案例中我們給大家介紹Spring Boot整合Elasticsearch實(shí)現(xiàn)全文搜索引擎
    2017-11-11
  • LeetCode程序員面試題之無重復(fù)字符的最長(zhǎng)子串

    LeetCode程序員面試題之無重復(fù)字符的最長(zhǎng)子串

    Java計(jì)算無重復(fù)字符的最長(zhǎng)子串是一種常見的字符串處理算法,它的目的是找出一個(gè)字符串中無重復(fù)字符的最長(zhǎng)子串。該算法可以很好地解決一些字符串處理問題,比如尋找字符串中重復(fù)字符的位置,以及計(jì)算字符串中無重復(fù)字符的最長(zhǎng)子串的長(zhǎng)度。
    2023-02-02
  • java實(shí)現(xiàn)SVG圖創(chuàng)建全過程

    java實(shí)現(xiàn)SVG圖創(chuàng)建全過程

    本文介紹了如何在Java中操作和生成SVG矢量圖,包括SVG的基本概念、圖形和面板類的設(shè)計(jì)、SVG DOM的創(chuàng)建與元素添加,以及如何將SVG保存為文件,最后指出實(shí)際應(yīng)用中還有更多復(fù)雜操作可實(shí)現(xiàn)
    2025-10-10
  • redis防止重復(fù)提交的實(shí)現(xiàn)示例

    redis防止重復(fù)提交的實(shí)現(xiàn)示例

    在開發(fā)中我們都需要處理重復(fù)提交的問題,本文主要介紹了redis防止重復(fù)提交的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-06-06
  • spring data jpa開啟批量插入、批量更新的問題解析

    spring data jpa開啟批量插入、批量更新的問題解析

    這篇文章主要介紹了spring data jpa開啟批量插入、批量更新問題,本文通過圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2021-07-07
  • java中常用的字符串的比較方法(兩種)

    java中常用的字符串的比較方法(兩種)

    本文主要介紹了java中兩種常用的字符串的比較方法。具有很好的參考價(jià)值。下面跟著小編一起來看下吧
    2017-03-03
  • Java實(shí)現(xiàn)限制文件上傳類型功能

    Java實(shí)現(xiàn)限制文件上傳類型功能

    這篇文章主要為大家詳細(xì)介紹了在Java中如何實(shí)現(xiàn)限制文件上傳類型功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-07-07
  • Java Swing實(shí)現(xiàn)簡(jiǎn)單的體重指數(shù)(BMI)計(jì)算器功能示例

    Java Swing實(shí)現(xiàn)簡(jiǎn)單的體重指數(shù)(BMI)計(jì)算器功能示例

    這篇文章主要介紹了Java Swing實(shí)現(xiàn)簡(jiǎn)單的體重指數(shù)(BMI)計(jì)算器功能,涉及Java Swing窗口組件布局、響應(yīng)及數(shù)值運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下
    2017-12-12
  • java線上問題排查之內(nèi)存占用大解決步驟

    java線上問題排查之內(nèi)存占用大解決步驟

    線上的問題在通常有一些預(yù)警,比如CPU被打滿,網(wǎng)絡(luò)達(dá)到頂峰等等問題,這篇文章主要介紹了java線上問題排查之內(nèi)存占用大解決步驟,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2026-01-01
  • java中常用的排序方法

    java中常用的排序方法

    今天給大家介紹一下,java中常用的排序方法。
    2013-04-04

最新評(píng)論

漳州市| 衡山县| 新昌县| 邢台市| 黄大仙区| 石楼县| 沛县| 玉门市| 宜阳县| 泽普县| 辉南县| 漯河市| 乐山市| 额敏县| 屏东县| 偏关县| 七台河市| 长岛县| 鲜城| 石柱| 大厂| 深水埗区| 海阳市| 襄城县| 德惠市| 清苑县| 白水县| 云南省| 鄂州市| 铜梁县| 威海市| 北票市| 探索| 广东省| 榆社县| 彭山县| 临沭县| 凌海市| 万宁市| 平陆县| 沂源县|