JavaWeb使用過濾器實現(xiàn)自動登錄功能

登錄前后:


未登錄

登錄后
自動登錄思路

總結一下:
1.第一次訪問主頁:經(jīng)過過濾器抄腔,此時無cookie瓢湃,無session,則會進入登陸頁面赫蛇,執(zhí)行完登陸绵患,會把用戶信息寫入cookie發(fā)送到客戶端,同時寫入session用于數(shù)據(jù)傳輸悟耘,然后跳轉(zhuǎn)到主頁落蝙。

2.再次訪問主頁時:先看session中是否包含用戶信息,如果有暂幼,則表示用戶沒有離開頁面或者session沒有過期筏勒,過濾器直接放行到主頁即可。如果沒有粟誓,表明用戶已經(jīng)離開頁面了奏寨。(關閉頁面原session會丟失)參考:http://www.reibang.com/p/6860dfc24d14

3.如果session中沒有信息,那么去看cookie是否存在鹰服,如果不存在病瞳,代表cookie已經(jīng)過期或者沒有登錄過,過濾器則放行讓登錄悲酷,如果cookie存在套菜,則表示之前登錄過并且還沒過期,過濾器中則取出cookie中的用戶信息设易,完成登錄操作逗柴,添加信息到session,最后放行到主頁顿肺。

4.后面再次訪問時戏溺,繼續(xù)走上述步驟。過濾器判斷session屠尊,過濾器判斷cookie旷祸。。讼昆。

過濾器代碼:

/**
     * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
     */
    public void doFilter(ServletRequest req, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        
        try {
            HttpServletRequest request = (HttpServletRequest) req;
            
            //先判斷托享,現(xiàn)在session中還有沒有那個userBean.
            UserBean userBean = (UserBean) request.getSession().getAttribute("userBean");
            //還有,有效。
            if(userBean != null){
                chain.doFilter(request, response);
            }else{
                //代表session失效了闰围。
                
                //2. 看cookie赃绊。
                
                //1. 來請求的時候,先從請求里面取出cookie , 但是cookie有很多的key-value
                Cookie[] cookies = request.getCookies();
                //2. 從一堆的cookie里面找出我們以前給瀏覽器發(fā)的那個cookie
                Cookie cookie = CookieUtil.findCookie(cookies, "auto_login");
                
                //第一次來
                if(cookie  == null){
                    chain.doFilter(request, response);
                }else{
                    
                    //不是第一次羡榴。
                    
                    String value = cookie.getValue();
                    String username = value.split("#")[0];
                    String password = value.split("#")[1];

                    //完成登錄
                    UserBean user = new UserBean();
                    user.setUsername(username);
                    user.setPassword(password);

                    UserDao dao = new UserDaoImpl();
                    userBean = dao.login(user);
                    
                    //使用session存這個值到域中碧查,方便下一次未過期前還可以用。
                    request.getSession().setAttribute("userBean", userBean);
                    
                    chain.doFilter(request, response);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            chain.doFilter(req, response);
        }
    }

登錄操作的servlet

/**
 * Servlet implementation class LoginServlet
 */
public class LoginServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try {
            String userName = request.getParameter("username");
            String password = request.getParameter("password");
            String autoLogin = request.getParameter("auto_login");
            UserBean user = new UserBean();
            user.setUsername(userName);
            user.setPassword(password); 
            UserDao dao = new UserDaoImpl();
            UserBean userBean = dao.login(user);        
            if(userBean != null){           
                //頁面提交上來的時候校仑,是否選擇了自動登錄
                if("on".equals(autoLogin)){             
                    //發(fā)送cookie給客戶端          
                    Cookie cookie = new Cookie("auto_login", userName+"#"+password);
                    cookie.setMaxAge(60*60*24*7);//7天有效期
                    cookie.setPath("/AutoLoginDemo");
                    //cookie.setPath(request.getContextPath());
                    response.addCookie(cookie);             
                }
                            
                //成功了么夫,進入首頁
                request.getSession().setAttribute("userBean", userBean);
                response.sendRedirect("index.jsp");
            }else{
                //不成功...                request.getRequestDispatcher("login.jsp").forward(request, response);
            }           
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市肤视,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌涉枫,老刑警劉巖邢滑,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異愿汰,居然都是意外死亡困后,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進店門衬廷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來摇予,“玉大人,你說我怎么就攤上這事吗跋〔啻鳎” “怎么了?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵跌宛,是天一觀的道長酗宋。 經(jīng)常有香客問我,道長疆拘,這世上最難降的妖魔是什么蜕猫? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮哎迄,結果婚禮上回右,老公的妹妹穿的比我還像新娘。我一直安慰自己漱挚,他們只是感情好翔烁,可當我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著棱烂,像睡著了一般租漂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天哩治,我揣著相機與錄音秃踩,去河邊找鬼。 笑死业筏,一個胖子當著我的面吹牛憔杨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蒜胖,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼消别,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了台谢?” 一聲冷哼從身側響起寻狂,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎朋沮,沒想到半個月后蛇券,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡樊拓,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年纠亚,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片筋夏。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡蒂胞,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出条篷,到底是詐尸還是另有隱情骗随,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布赴叹,位于F島的核電站蚊锹,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏稚瘾。R本人自食惡果不足惜牡昆,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望摊欠。 院中可真熱鬧丢烘,春花似錦、人聲如沸些椒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽免糕。三九已至赢乓,卻和暖如春忧侧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背牌芋。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工蚓炬, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人躺屁。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓肯夏,卻偏偏與公主長得像,于是被迫代替她去往敵國和親犀暑。 傳聞我的和親對象是個殘疾皇子驯击,可洞房花燭夜當晚...
    茶點故事閱讀 45,512評論 2 359

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

  • 關于如何實現(xiàn)web上的自動登錄功能 文章來源http://coolshell.cn/articles/5353.h...
    流動碼文閱讀 9,510評論 0 8
  • 本文同步更新于旺仔的個人博客,訪問可能有點慢耐亏,多刷新幾次徊都。 緣由 不知道大家有沒有用過QQ/TIM登錄的時候使用掃...
    叫我旺仔閱讀 3,496評論 0 12
  • 前兩天和我的閨蜜小A視頻聊天碟贾,她問我,“你怎么還沒有男朋友啊?” 小A和我是發(fā)小轨域,可以說是看著對方一起長大...
    薄羿閱讀 203評論 0 1
  • 想成為某個領域的高手嗎?看古典的《躍遷》: 《躍遷》這本書系統(tǒng)的解構了成為高手的技術: 高手的暗箱:利用規(guī)律杀餐,放大...
    安曉輝0閱讀 2,909評論 1 14
  • 轉(zhuǎn)眼間干发,我已經(jīng)快25歲了。很多人說史翘,自己獲得的愛和獲得的幸福是成正比的枉长。我說,在自己的青春時光尤為如此琼讽。25歲...
    熹兒_2dbf閱讀 306評論 1 5