SpringBoot 2.x 自定義攔截器并解決靜態(tài)資源訪問(wèn)被攔截問(wèn)題


說(shuō)明:

在自己寫(xiě)一個(gè)spring boot demo的時(shí)候,想著根據(jù)session的過(guò)期時(shí)間來(lái)返回登錄頁(yè)面,在自定義完攔截器以后功能可以實(shí)現(xiàn),但是靜態(tài)資源卻無(wú)法訪問(wèn),通過(guò)查找文檔發(fā)現(xiàn)spring boot 1.x和2.x是不一樣,所以特別記錄一下,留給后面的同學(xué)避免踩坑.

1.x和2.x的靜態(tài)資源訪問(wèn)區(qū)別

  • 1.x的resources/static目錄下的靜態(tài)資源可以直接訪問(wèn),并且訪問(wèn)路徑上不用帶static,當(dāng)有配置自定義HandlerInterceptor攔截器時(shí),請(qǐng)求靜態(tài)資源路徑不會(huì)被攔截止吐。
  • 2.x的如果自定義HandlerInterceptor攔截器時(shí)訪問(wèn)靜態(tài)資源就會(huì)被同步攔截,這樣為了實(shí)現(xiàn)session過(guò)期而跳轉(zhuǎn)登錄頁(yè)面功能就會(huì)受影響.

項(xiàng)目的目錄

}O31{R6DQ}AQZLRQR0WVU`D.png

自定義攔截器

/**
 * UserSecurityInterceptor
 * Created with IntelliJ IDEA.
 * Author: yangyongkang
 * Date: 2018/8/22
 * Time: 14:20
 */
@Component
public class UserSecurityInterceptor implements HandlerInterceptor {
    @Autowired
    private RedisTemplate<String, Serializable> redisCacheTemplate;

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        UserModel info = (UserModel) redisCacheTemplate.opsForValue().get(request.getSession().getId());
        if (info == null || StringUtils.isEmpty(info)) {
            response.sendRedirect(request.getContextPath() + "/view/login");
            return false;
        }
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
    }
}
  • 因?yàn)槲业膕ession是放在redis里面的,所以只需要從redis里面取即可.

配置訪問(wèn)路徑及靜態(tài)資源

/**
 * 登陸攔截控制類
 * Created with IntelliJ IDEA.
 * Author: yangyongkang
 * Date: 2018/8/22
 * Time: 14:17
 */
@Configuration
public class WebMvcConfig implements  WebMvcConfigurer {
    @Autowired
    private UserSecurityInterceptor securityInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        InterceptorRegistration addInterceptor = registry.addInterceptor(securityInterceptor);
        // 排除配置
        addInterceptor.excludePathPatterns("/error");
        addInterceptor.excludePathPatterns("/static/**");//排除靜態(tài)資源
        addInterceptor.excludePathPatterns("/view/login");
        addInterceptor.excludePathPatterns("/login/check");
        // 攔截配置
        addInterceptor.addPathPatterns("/**");
    }
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");//
    }
}
  • 這樣有一個(gè)問(wèn)題,不明白為啥要這樣設(shè)計(jì),因?yàn)槿绻坏┛刂破鲀?nèi)有static開(kāi)頭的訪問(wèn)路徑的話,攔截器就不會(huì)攔截了.

頁(yè)面加載方式

//第一種在thymeleaf模版內(nèi)部
    <link type="text/css" th:href="@{/static/css/page/bootstrap.min.css}" rel="stylesheet">
    <link type="text/css" th:href="@{/static/css/page/font-awesome.css}" rel="stylesheet">
    <link type="text/css" th:href="@{/static/css/page/animate.css}" rel="stylesheet">
    <link type="text/css" th:href="@{/static/css/page/style.css}" rel="stylesheet">
    <link type="text/css" th:href="@{/static/css/page/login.css}" rel="stylesheet">
    
//第二種
    <link href="/static/css/page/bootstrap.min.css" rel="stylesheet">
    <link href="/static/css/page/font-awesome.css" rel="stylesheet">
    <link href="/static/css/page/animate.css" rel="stylesheet">
    <link href="/static/css/page/style.css" rel="stylesheet">

最后特別注意一下

  • 在spring boot2.x中已經(jīng)無(wú)法再使用WebMvcConfigurationAdapter,官方聲明已過(guò)時(shí).
  • 可以繼承WebMvcConfigurationSupport或者實(shí)現(xiàn)WebMvcConfigurer
implements WebMvcConfigurer : 
//不會(huì)覆蓋@EnableAutoConfiguration關(guān)于WebMvcAutoConfiguration的配置
@EnableWebMvc + implements WebMvcConfigurer :
// 會(huì)覆蓋@EnableAutoConfiguration關(guān)于WebMvcAutoConfiguration的配置
extends WebMvcConfigurationSupport :
//會(huì)覆蓋@EnableAutoConfiguration關(guān)于WebMvcAutoConfiguration的配置
extends DelegatingWebMvcConfiguration :
//會(huì)覆蓋@EnableAutoConfiguration關(guān)于WebMvcAutoConfiguration的配置
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末劲赠,一起剝皮案震驚了整個(gè)濱河市袖牙,隨后出現(xiàn)的幾起案子牺蹄,更是在濱河造成了極大的恐慌稠集,老刑警劉巖悯恍,帶你破解...
    沈念sama閱讀 222,000評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件库糠,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)瞬欧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)贷屎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人艘虎,你說(shuō)我怎么就攤上這事唉侄。” “怎么了野建?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,561評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵属划,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我候生,道長(zhǎng)同眯,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,782評(píng)論 1 298
  • 正文 為了忘掉前任唯鸭,我火速辦了婚禮须蜗,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘肿孵。我一直安慰自己唠粥,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布停做。 她就那樣靜靜地躺著晤愧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蛉腌。 梳的紋絲不亂的頭發(fā)上官份,一...
    開(kāi)封第一講書(shū)人閱讀 52,394評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音烙丛,去河邊找鬼舅巷。 笑死,一個(gè)胖子當(dāng)著我的面吹牛河咽,可吹牛的內(nèi)容都是我干的恰响。 我是一名探鬼主播呢袱,決...
    沈念sama閱讀 40,952評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了烙常?” 一聲冷哼從身側(cè)響起亮靴,我...
    開(kāi)封第一講書(shū)人閱讀 39,852評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤宴树,失蹤者是張志新(化名)和其女友劉穎藐握,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體褥芒,經(jīng)...
    沈念sama閱讀 46,409評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡嚼松,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評(píng)論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片献酗。...
    茶點(diǎn)故事閱讀 40,615評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡寝受,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出凌摄,到底是詐尸還是另有隱情羡蛾,我是刑警寧澤,帶...
    沈念sama閱讀 36,303評(píng)論 5 350
  • 正文 年R本政府宣布锨亏,位于F島的核電站痴怨,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏器予。R本人自食惡果不足惜浪藻,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望乾翔。 院中可真熱鬧爱葵,春花似錦、人聲如沸反浓。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,470評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)雷则。三九已至辆雾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間月劈,已是汗流浹背度迂。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,571評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留猜揪,地道東北人惭墓。 一個(gè)月前我還...
    沈念sama閱讀 49,041評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像而姐,于是被迫代替她去往敵國(guó)和親腊凶。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評(píng)論 2 359