SpringBoot1.5以上版本自定義配置文件

最近在學(xué)習(xí)SpringBoot方面的知識妒御,基本的框架已經(jīng)了解的差不多了布疙,今天在搭框架的時候姆钉,想到了一個使用場景:在一個Web平臺上,如果沒有登錄該平臺听诸,那么訪問的界面是有限的坐求,這樣我就需要做一個白名單,未登錄的用戶如果訪問的是白名單中的頁面晌梨,是可以不需要驗證其登陸的桥嗤。
這樣問題的解決思路是我需要一個List來放置我的白名單路徑,但是我有又不想將這個白名單放置在靜態(tài)變量中仔蝌,所以想到了SpringBoot支持自定義配置文件泛领,而我只要維護一個配置文件,在每次過濾器調(diào)用的時候?qū)酌麊巫x出來就可以了敛惊,這樣項目中的開發(fā)人員只要維護一個配置文件即可渊鞋,既然有了思路,那么就可以開始實現(xiàn)了瞧挤。

讀取自定義配置文件

學(xué)習(xí)過SpringBoot的朋友們應(yīng)該都知道锡宋,Spb的項目配置文件主要是application.properties,當(dāng)然你也可以自定義生產(chǎn)環(huán)境和開發(fā)環(huán)境的配置文件特恬,具體的方法可以百度执俩,這里不是討論的重點,現(xiàn)在我們討論的是在自定義的配置文件中讀取配置信息的方法:

  1. 創(chuàng)建配置文件
    在resources/目錄下創(chuàng)建config文件夾癌刽,并在該文件夾下創(chuàng)建"visit_white_list.properties"文件役首。
  2. 填寫配置文件內(nèi)容
    既然是一個白名單,那肯定用List來存放數(shù)據(jù)是最合適不過得了妒穴,配置文件中宋税,創(chuàng)建List的方法很簡單,其配置文件的內(nèi)容如下:
web.whitelist[0]=/hello 
web.whitelist[1]=/hello1
web.whitelist[2]=/hello2

先不說具體的意義讼油,單從語法來看杰赛,這段代碼就是一個數(shù)組形式的定義,當(dāng)然你也可以定義字符串類型或者數(shù)字類型的屬性值矮台,這里我就不多做贅述了乏屯,現(xiàn)在進入下一步根时。

  1. 創(chuàng)建管理配置的實體類
    其實這篇文章存在的意義就在于,1.5之后和1.5之前辰晕,管理配置的實體類是有變化的
    首先我們來看看1.5之前實體類的寫法:
@ConfigurationProperties(locations = "classpath:config/visit_white_list.properties", prefix = "web")
@Component
public class WhiteListConfig {

    public List<String> getWhitelist() {
        return whitelist;
    }

    public void setWhitelist(List<String> whitelist) {
        this.whitelist = whitelist;
    }

    private List<String>  whitelist;
}

再看看1.5之后的寫法


@Component
@PropertySource(value = "classpath:config/visit_white_list.properties")
@ConfigurationProperties(prefix = "web")
public class WhiteListConfig {

    public List<String> getWhitelist() {
        return whitelist;
    }

    public void setWhitelist(List<String> whitelist) {
        this.whitelist = whitelist;
    }

    private List<String>  whitelist;
}

在@ConfigurationProperties注釋中有兩個屬性:

locations:指定配置文件的所在位置
prefix:指定配置文件中鍵名稱的前綴(我這里配置文件中所有鍵名都是以web.開頭)

使用@Component是讓該類能夠在其他地方被依賴使用蛤迎,即使用@Autowired注釋來創(chuàng)建實例。
但是1.5之后取消了 @ConfigurationProperties 的 locations屬性含友,所以在1.5之后 需要加入@PropertySource 屬性來指定自定義配置文件的相對路徑替裆,以便系統(tǒng)加載。

  1. 創(chuàng)建過濾器
    過濾器的內(nèi)容:
/**
 * 使用注解標(biāo)注過濾器
 *
 * @version v.0.1
 * @WebFilter將一個實現(xiàn)了javax.servlet.Filter接口的類定義為過濾器 屬性filterName聲明過濾器的名稱, 可選
 * 屬性urlPatterns指定要過濾的URL模式,也可使用屬性value來聲明.(指定要過濾的URL模式是必選屬性)
 */
@WebFilter(filterName = "AuthFilter", urlPatterns = "/*")
public class AuthFilter implements Filter {
    @Autowired
    private WhiteListConfig myWebConfig;
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

        System.out.println("訪問路徑權(quán)限過濾器初始化");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("訪問路徑權(quán)限開始執(zhí)行過濾器");
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        HttpSession session = request.getSession(true);
        String usercode = (String) request.getRemoteUser();// 登錄人
        String user_role = (String) session.getAttribute("role");//登錄人角色
        String url = request.getRequestURI();

        if (usercode == null || "".equals(usercode) || user_role == null || "".equals(user_role)) {
            //判斷獲取的路徑不為空且不是訪問登錄頁面或執(zhí)行登錄操作時跳轉(zhuǎn)
            if (!myWebConfig.getWhitelist().contains(url) &&url != null && !url.equals("") && (url.indexOf("Login") < 0 && url.indexOf("login") < 0)) {
                //無權(quán)限時跳轉(zhuǎn)到登錄界面
                response.sendRedirect(request.getContextPath() + "/login.dhcc");
                return;
            }
        }
        filterChain.doFilter(servletRequest, servletResponse);
        return;


    }

    @Override
    public void destroy() {
        System.out.println("訪問路徑權(quán)限過濾器銷毀");
    }
}

使用

 @Autowired
    private WhiteListConfig myWebConfig;

獲取到白名單配置文件并獲取其list對象來判斷當(dāng)前Url是否在白名單范圍內(nèi)即可窘问。

總結(jié)

網(wǎng)上查了很多資料辆童,關(guān)于SpringBoot讀取自定義配置文件的方法都是屬于1.5之前的讀取方式,而我的項目屬于1.5之后的惠赫,于是搜了很多資料才找到1.5之后的配置方式把鉴,在此分享給大家,希望大家少走彎路吧儿咱。

相關(guān)資料

  1. Springboot 之 自定義配置文件及讀取配置文件
  2. spring boot1.5以上版本@ConfigurationProperties取消location注解后的替代方案
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末庭砍,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子混埠,更是在濱河造成了極大的恐慌怠缸,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件岔冀,死亡現(xiàn)場離奇詭異凯旭,居然都是意外死亡,警方通過查閱死者的電腦和手機使套,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進店門罐呼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人侦高,你說我怎么就攤上這事嫉柴。” “怎么了奉呛?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵计螺,是天一觀的道長。 經(jīng)常有香客問我瞧壮,道長登馒,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任咆槽,我火速辦了婚禮陈轿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己麦射,他們只是感情好蛾娶,可當(dāng)我...
    茶點故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著潜秋,像睡著了一般蛔琅。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上峻呛,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天罗售,我揣著相機與錄音,去河邊找鬼钩述。 笑死莽囤,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的切距。 我是一名探鬼主播,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼惨远,長吁一口氣:“原來是場噩夢啊……” “哼谜悟!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起北秽,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤葡幸,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后贺氓,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蔚叨,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年辙培,在試婚紗的時候發(fā)現(xiàn)自己被綠了蔑水。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,953評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡扬蕊,死狀恐怖搀别,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情尾抑,我是刑警寧澤歇父,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站再愈,受9級特大地震影響榜苫,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜翎冲,卻給世界環(huán)境...
    茶點故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一垂睬、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦羔飞、人聲如沸肺樟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽么伯。三九已至,卻和暖如春卡儒,著一層夾襖步出監(jiān)牢的瞬間田柔,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工骨望, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留硬爆,地道東北人。 一個月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓擎鸠,卻偏偏與公主長得像缀磕,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子劣光,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,901評論 2 355

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