攔截器和過濾器驗證登錄

之前的版本是 v0.2.1 保持登錄狀態(tài)的版本午绳,這一次 v0.2.2 是對驗證登錄過程的一個更新,用攔截器和過濾器來進(jìn)行,發(fā)現(xiàn)這種方式省去了一些邏輯的實現(xiàn)

Registration-login-interface2

Version 0.2.2

新增的功能都是在 v0.2.1 的基礎(chǔ)上進(jìn)行修改,刪去部分代碼

可通過點擊 tag 來查看之前的代碼:

1. 新增功能

  • 使用 mvc 的攔截器來對特定頁面進(jìn)行攔截谚殊,攔截之后跳轉(zhuǎn)至登錄界面

  • 使用過濾器來進(jìn)行相同功能的攔截

2. 刪去的代碼

先刪除 ExceptionService 中的 statusException 方法,刪去對應(yīng)的實現(xiàn)蛤铜,然后在 UserServiceImpl 和 Controller 中刪去調(diào)用它的代碼

這樣嫩絮,就變成了不檢測用戶是否登錄

3. 攔截器

首先新建一個包:interceptor

然后新建一個類:LoginInterceptor,實現(xiàn)了 HandlerInterceptor 接口:

關(guān)于 HandlerInterceptor 的使用這里不講述围肥,如果在 session 中沒有獲得 username 屬性剿干,就跳轉(zhuǎn)到登錄頁面

攔截是有范圍的,在下文的配置文件中自行配置需要攔截的頁面

    public class LoginInterceptor implements org.springframework.web.servlet.HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest httpServletRequest,
                             HttpServletResponse httpServletResponse, Object o) throws Exception {
        HttpSession session = httpServletRequest.getSession();
        if (session.getAttribute("username") == null){
            httpServletResponse.sendRedirect("preLogin.action");
        } else {
            return true;
        }
        return false;
    }

    @Override
    public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse,
                           Object o, ModelAndView modelAndView) throws Exception {

    }

    @Override
    public void afterCompletion(HttpServletRequest httpServletRequest,
                                HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {

    }

在 spring-mvc.xml 中添加攔截器的配置:

    <mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/userStatus.action"/>
            <mvc:mapping path="/showInfo.action"/>
            <mvc:mapping path="/setUserInfo.action"/>
            <bean class="interceptor.LoginInterceptor"/>
        </mvc:interceptor>
    </mvc:interceptors>

對指定路徑進(jìn)行映射穆刻,LoginInterceptor 中的操作就是對映射的路徑而言的怨愤,然后指定一下攔截器所在位置,就完成了

效果

運(yùn)行之后蛹批,在瀏覽器地址欄輸入

  • localhost:8080/userStatus.action
  • localhost:8080/showInfo.action
  • localhost:8080/setUserInfo.action

就會跳轉(zhuǎn)到 http://localhost:8080/preLogin.action

攔截器的部分就結(jié)束了

4. 過濾器

將 spring-mvc.xml 中配置的攔截器信息注釋掉,然后新建包:filter篮愉,包中新建類 LoginFilter腐芍,實現(xiàn) javax.servlet.Filter 接口:

public class LoginFilter implements Filter {

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, 
                         FilterChain filterChain) throws IOException, ServletException {
        if (((HttpServletRequest) servletRequest).getSession().
                getAttribute("username") == null){
            ((HttpServletResponse)servletResponse).sendRedirect("preLogin.action");
        } else {
            filterChain.doFilter(servletRequest,
                    servletResponse);
        }
    }
}

如果檢測出沒有登錄,就會跳轉(zhuǎn)到登錄界面试躏,有一點要注意filterChain.doFilter(servletRequest, servletResponse);
是一定要寫的猪勇,如果不寫,在登錄之后颠蕴,就不能訪問那些需要登錄才能訪問的頁面的泣刹,相當(dāng)于請求已經(jīng)被過濾器中斷了,如果檢測出已登錄犀被,就要加上這一行代碼才能方位個人信息頁面

然后在 web.xml 中添加一個過濾器的配置:

    <filter>
        <filter-name>loginFilter</filter-name>
        <filter-class>filter.LoginFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>loginFilter</filter-name>
        <url-pattern>/showInfo.action</url-pattern>
        <url-pattern>/userStatus.action</url-pattern>
        <url-pattern>/setUserInfo.action</url-pattern>
    </filter-mapping>

這樣子椅您,不同于 v0.2.1 的驗證登錄方式就做完了

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市寡键,隨后出現(xiàn)的幾起案子掀泳,更是在濱河造成了極大的恐慌,老刑警劉巖西轩,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件员舵,死亡現(xiàn)場離奇詭異,居然都是意外死亡藕畔,警方通過查閱死者的電腦和手機(jī)马僻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來注服,“玉大人韭邓,你說我怎么就攤上這事措近。” “怎么了仍秤?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵熄诡,是天一觀的道長。 經(jīng)常有香客問我诗力,道長凰浮,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任苇本,我火速辦了婚禮袜茧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘瓣窄。我一直安慰自己笛厦,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布俺夕。 她就那樣靜靜地躺著裳凸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪劝贸。 梳的紋絲不亂的頭發(fā)上姨谷,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天,我揣著相機(jī)與錄音映九,去河邊找鬼梦湘。 笑死,一個胖子當(dāng)著我的面吹牛件甥,可吹牛的內(nèi)容都是我干的捌议。 我是一名探鬼主播,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼引有,長吁一口氣:“原來是場噩夢啊……” “哼瓣颅!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起譬正,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤弄捕,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后导帝,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體守谓,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年您单,在試婚紗的時候發(fā)現(xiàn)自己被綠了斋荞。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,427評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡虐秦,死狀恐怖平酿,靈堂內(nèi)的尸體忽然破棺而出凤优,到底是詐尸還是另有隱情,我是刑警寧澤蜈彼,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布筑辨,位于F島的核電站,受9級特大地震影響幸逆,放射性物質(zhì)發(fā)生泄漏棍辕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一还绘、第九天 我趴在偏房一處隱蔽的房頂上張望楚昭。 院中可真熱鬧,春花似錦拍顷、人聲如沸抚太。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽尿贫。三九已至,卻和暖如春踏揣,著一層夾襖步出監(jiān)牢的瞬間庆亡,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工呼伸, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人钝尸。 一個月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓括享,卻偏偏與公主長得像,于是被迫代替她去往敵國和親珍促。 傳聞我的和親對象是個殘疾皇子铃辖,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,440評論 2 359

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)猪叙,斷路器娇斩,智...
    卡卡羅2017閱讀 134,693評論 18 139
  • 攔截器是Struts2框架的核心,它主要完成解析請求參數(shù)穴翩、將請求參數(shù)賦值給Action屬性犬第、執(zhí)行數(shù)據(jù)校驗、文件上傳...
    重山楊閱讀 3,956評論 2 13
  • 1.前沿 在web.xml中各個元素的執(zhí)行順序是這樣的:context-param-->listener-->fi...
    OzanShareing閱讀 3,525評論 0 10
  • 不知道從什么時候開始 我害怕夜的到來 原來的一切 在沒有太陽的夜底下 變的陌生 卻不敢讓人讓接近 啊……陌生的夜 ...
    狂野的青春閱讀 240評論 0 4
  • 九月一日我與W相識,他問我你的愛好是什么背蟆,你喜歡什么樂器鉴分,我突然蒙了哮幢,其實這些年我一直在為了改變而學(xué)習(xí)或者工作,似...
    無言小傘閱讀 279評論 6 2