SpringBoot攔截器實(shí)現(xiàn)登陸攔截

基于上一篇Web應(yīng)用實(shí)現(xiàn)登陸攔截功能烤礁,未登陸用戶訪問(wèn)主頁(yè)面自動(dòng)跳轉(zhuǎn)至登陸頁(yè)。實(shí)現(xiàn)過(guò)程如下:

HandlerInterceptor是SpringWebMVC的攔截器继榆,類似于Servlet開(kāi)發(fā)中的過(guò)濾器Filter亮元,用于對(duì)請(qǐng)求進(jìn)行攔截和處理⊙罚可以應(yīng)用如下場(chǎng)景:
1绵估、權(quán)限檢查:如檢測(cè)請(qǐng)求是否具有登錄權(quán)限,如果沒(méi)有直接返回到登陸頁(yè)面卡骂。
2国裳、性能監(jiān)控:用請(qǐng)求處理前和請(qǐng)求處理后的時(shí)間差計(jì)算整個(gè)請(qǐng)求響應(yīng)完成所消耗的時(shí)間。
3全跨、日志記錄:可以記錄請(qǐng)求信息的日志缝左,以便進(jìn)行信息監(jiān)控、信息統(tǒng)計(jì)等浓若。

實(shí)現(xiàn)一個(gè)簡(jiǎn)單的用戶登陸攔截新建類LoginInterceptor實(shí)現(xiàn)HandlerInterceptor接口渺杉,實(shí)現(xiàn)內(nèi)容代碼:

public class LoginInterceptor implements HandlerInterceptor {
    
    @Override  
    public boolean preHandle(HttpServletRequest request,  
            HttpServletResponse response, Object handler) throws Exception {  
          
        Object user = request.getSession().getAttribute("user");
        if (user == null || user.equals(""))  {
            response.sendRedirect("/index.html");  
            return false;  
        }
        return true;
    }  
}

preHandle:在請(qǐng)求處理之前進(jìn)行調(diào)用(Controller方法調(diào)用之前)
postHandle:請(qǐng)求處理之后進(jìn)行調(diào)用,但是在視圖被渲染之前(Controller方法調(diào)用之后)
afterCompletion:在整個(gè)請(qǐng)求結(jié)束之后被調(diào)用挪钓,也就是在DispatcherServlet 渲染了對(duì)應(yīng)的視圖之后執(zhí)行(主要是用于進(jìn)行資源清理工作)

在Spring Boot 1.5版本都是靠重寫(xiě)WebMvcConfigurerAdapter的方法來(lái)添加自定義攔截器是越,消息轉(zhuǎn)換器等。SpringBoot 2.0 后诵原,該類被標(biāo)記為@Deprecated英妓。因此我們只能靠實(shí)現(xiàn)WebMvcConfigurer接口來(lái)實(shí)現(xiàn)。

新建類WebMvcConfg實(shí)現(xiàn)WebMvcConfigurer接口绍赛,

@Configuration
public class WebMvcConfg implements WebMvcConfigurer {

    public final static String SESSION_KEY = "user";
    
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/emp/**","/main.html").excludePathPatterns("/index.html");
    }

}

UserController部分:

@Controller
@RequestMapping("/user/*")
public class UserController {

    @Autowired
    UserService userService;
    
    @Autowired
    HttpServletRequest request;
    
    @Autowired
    HttpServletResponse response;
    
    @RequestMapping("/login")
    public String login(HttpSession session) throws Exception {
        
        String str = "";
        String username= request.getParameter("username");
        String password= request.getParameter("password");
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("username",username);
        map.put("password", password);
        if(userService.login(map)) {
            Cookie c1 = new Cookie("loginName", username);
            c1.setPath("/");
            response.addCookie(c1);
            session.setAttribute("user",WebMvcConfg.SESSION_KEY);
            str = "redirect:/main.html";
        }else {
            str = "redirect:/index.html";
        }
        return str;
    }
    
    @RequestMapping("/logout")
    public String logout() {
        HttpSession session = request.getSession();
        session.removeAttribute("user");
        return "redirect:/index.html";
    }
}

啟動(dòng)項(xiàng)目蔓纠,訪問(wèn)登陸頁(yè),登陸后正常使用吗蚌。退出登陸腿倚,訪問(wèn)主頁(yè)自動(dòng)跳轉(zhuǎn)至登陸頁(yè)。

總結(jié)一下蚯妇,實(shí)現(xiàn)自定義攔截器簡(jiǎn)單以下幾個(gè)步驟:
1敷燎、創(chuàng)建我們自己的攔截器類并實(shí)現(xiàn) HandlerInterceptor 接口暂筝。
2、創(chuàng)建一個(gè)Java類實(shí)現(xiàn)WebMvcConfigurer接口硬贯,并重寫(xiě) addInterceptors 方法焕襟。
2、實(shí)例化我們自定義的攔截器饭豹,然后將對(duì)象手動(dòng)添加到攔截器鏈中(在addInterceptors方法中添加)鸵赖。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市拄衰,隨后出現(xiàn)的幾起案子它褪,更是在濱河造成了極大的恐慌,老刑警劉巖翘悉,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件茫打,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡妖混,警方通過(guò)查閱死者的電腦和手機(jī)老赤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)源葫,“玉大人诗越,你說(shuō)我怎么就攤上這事∠⑻茫” “怎么了嚷狞?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)荣堰。 經(jīng)常有香客問(wèn)我床未,道長(zhǎng),這世上最難降的妖魔是什么振坚? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任薇搁,我火速辦了婚禮,結(jié)果婚禮上渡八,老公的妹妹穿的比我還像新娘啃洋。我一直安慰自己,他們只是感情好屎鳍,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布宏娄。 她就那樣靜靜地躺著,像睡著了一般逮壁。 火紅的嫁衣襯著肌膚如雪孵坚。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,031評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音卖宠,去河邊找鬼巍杈。 笑死,一個(gè)胖子當(dāng)著我的面吹牛扛伍,可吹牛的內(nèi)容都是我干的筷畦。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼刺洒,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼汁咏!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起作媚,我...
    開(kāi)封第一講書(shū)人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎帅刊,沒(méi)想到半個(gè)月后纸泡,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡赖瞒,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年女揭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片栏饮。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡吧兔,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出袍嬉,到底是詐尸還是另有隱情境蔼,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布伺通,位于F島的核電站箍土,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏罐监。R本人自食惡果不足惜吴藻,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望弓柱。 院中可真熱鬧沟堡,春花似錦、人聲如沸矢空。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)妇多。三九已至伤哺,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背立莉。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工绢彤, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蜓耻。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓茫舶,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親刹淌。 傳聞我的和親對(duì)象是個(gè)殘疾皇子饶氏,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

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

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)有勾,斷路器疹启,智...
    卡卡羅2017閱讀 134,599評(píng)論 18 139
  • Spring Web MVC Spring Web MVC 是包含在 Spring 框架中的 Web 框架,建立于...
    Hsinwong閱讀 22,313評(píng)論 1 92
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,506評(píng)論 25 707
  • 八月十五中秋節(jié)的時(shí)候蔼卡,爸爸媽媽帶我去五老峰喊崖,走玻璃棧道」统眩可是我不敢走荤懂,媽媽對(duì)我說(shuō):我要勇敢。我聽(tīng)了這句話之后塘砸,...
    xuan軒寶貝閱讀 219評(píng)論 0 2
  • ES6 允許使用 “ 箭頭 ” (=>)定義函數(shù)节仿。 箭頭函數(shù) 填 坑。 this的指向是 向上查找 非箭頭函數(shù)的...
    kismetajun閱讀 799評(píng)論 0 12