电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

SpringBoot中使用Cookie實現記住登錄的示例代碼

瀏覽:2日期:2023-05-07 18:16:58

最近在做項目,甲方提出每次登錄都要輸入密碼,會很麻煩,要求實現一個記住登錄狀態的功能,于是便使用 Cookie 實現該功能

一、Cookie 簡介

Cookie,一種儲存在用戶本地終端上的數據,有時也用其復數形式 Cookies。類型為“小型文本文件”,是某些網站為了辨別用戶身份,進行 Session 跟蹤而儲存在用戶本地終端上的數據(通常經過加密),由用戶客戶端計算機暫時或永久保存的信息。

其實 Cookie 就是一個鍵和一個值構成的,隨著服務器端的響應發送給客戶端瀏覽器。然后客戶端瀏覽器會把 Cookie 保存起來,當下一次再訪問服務器時把 Cookie 再發送給服務器。

1、Cookie 是 HTTP 協議的規范之一,它是服務器和客戶端之間傳輸的小數據2、首先由服務器通過響應頭把 Cookie 傳輸給客戶端,客戶端會將 Cookie 保存起來3、當客戶端再次請求同一服務器時,客戶端會在請求頭中添加該服務器保存的 Cookie,發送給服務器4、Cookie 就是服務器保存在客戶端的數據5、Cookie 就是一個鍵值對

SpringBoot中使用Cookie實現記住登錄的示例代碼

二、Cookie 使用

1、創建 Cookie

// Cookie 為鍵值對數據格式Cookie cookie_username = new Cookie('cookie_username', username);

2、設置 Cookie 持久時間

// 即:過期時間,單位是:秒(s)cookie_username.setMaxAge(30 * 24 * 60 * 60);

3、設置 Cookie 共享路徑

// 表示當前項目下都攜帶這個cookiecookie_username.setPath(request.getContextPath());

4、向客戶端發送 Cookie

// 使用 HttpServletResponse 對象向客戶端發送 Cookieresponse.addCookie(cookie_username);

5、銷毀 Cookie

// 根據 key 將 value 置空Cookie cookie_username = new Cookie('cookie_username', '');// 設置持久時間為0cookie_username.setMaxAge(0);// 設置共享路徑cookie_username.setPath(request.getContextPath());// 向客戶端發送 Cookieresponse.addCookie(cookie_username);

三、進入正題

上面我們已經了解了 Cookie 是什么,并且知道了 Cookie 的創建以及銷毀的方法,下面,我們就使用 Cookie 實現記住登錄狀態的功能,整個項目基于 SpringBoot 實現

1、注冊攔截器

/*** 注冊攔截器*/@Configurationpublic class WebConfigurer implements WebMvcConfigurer { @Autowired private LoginInterceptor loginHandlerInterceptor; @Override public void addInterceptors(InterceptorRegistry registry) { InterceptorRegistration ir = registry.addInterceptor(loginHandlerInterceptor); // 攔截路徑 ir.addPathPatterns('/*'); // 不攔截路徑 List<String> irs = new ArrayList<String>(); irs.add('/api/*'); irs.add('/wechat/*'); irs.add('/oauth'); ir.excludePathPatterns(irs); }}

我們攔截了所有的請求路徑,放開了 api、wechat 等請求路徑

這里可能會有一個疑問,為什么不放開請求登錄界面的 api 請求路徑呢,原因是我們攔截登錄請求,當我們請求登錄界面時,我們已經登錄過,那么我們就無需進入登錄界面,直接到主界面

我們使用了自定義的一個登錄攔截:LoginInterceptor,在第二步我們會詳細講解其中的實現原理

2、登錄攔截

/*** 未登錄攔截器*/@Componentpublic class LoginInterceptor implements HandlerInterceptor { @Autowired private LoginDao dao; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 獲得cookie Cookie[] cookies = request.getCookies(); // 沒有cookie信息,則重定向到登錄界面 if (null == cookies) { response.sendRedirect(request.getContextPath() + '/login'); return false; } // 定義cookie_username,用戶的一些登錄信息,例如:用戶名,密碼等 String cookie_username = null; // 獲取cookie里面的一些用戶信息 for (Cookie item : cookies) { if ('cookie_username'.equals(item.getName())) {cookie_username = item.getValue();break; } } // 如果cookie里面沒有包含用戶的一些登錄信息,則重定向到登錄界面 if (StringUtils.isEmpty(cookie_username)) { response.sendRedirect(request.getContextPath() + '/login'); return false; } // 獲取HttpSession對象 HttpSession session = request.getSession(); // 獲取我們登錄后存在session中的用戶信息,如果為空,表示session已經過期 Object obj = session.getAttribute(Const.SYSTEM_USER_SESSION); if (null == obj) {// 根據用戶登錄賬號獲取數據庫中的用戶信息 UserInfo dbUser = dao.getUserInfoByAccount(cookie_username); // 將用戶保存到session中 session.setAttribute(Const.SYSTEM_USER_SESSION, dbUser); } // 已經登錄 return true; }}

3、登錄請求

控制層

/** * 執行登錄 */ @PostMapping('login') @ResponseBody public String login(String username, String password, HttpSession session, HttpServletRequest request, HttpServletResponse response) { return service.doLogin(username.trim(), password.trim(), session, request, response).toJSONString(); }

業務層

/** * 執行登錄 */public JSONObject doLogin(String username, String password, HttpSession session, HttpServletRequest request, HttpServletResponse response) {// 最終返回的對象 JSONObject res = new JSONObject(); res.put('code', 0); if (StringUtils.isEmpty(username) || StringUtils.isEmpty(password)) { res.put('msg', '請輸入手機號或密碼'); return res; } UserInfo dbUser = dao.getUserInfoByAccount(username); if (null == dbUser) { res.put('msg', '該賬號不存在,請檢查后重試'); return res; } // 驗證密碼是否正確 String newPassword = PasswordUtils.getMd5(password, username, dbUser.getSalt()); if (!newPassword.equals(dbUser.getPassword())) { res.put('msg', '手機號或密碼錯誤,請檢查后重試'); return res; } // 判斷賬戶狀態 if (1 != dbUser.getStatus()) { res.put('msg', '該賬號已被凍結,請聯系管理員'); return res; } // 將登錄用戶信息保存到session中 session.setAttribute(Const.SYSTEM_USER_SESSION, dbUser); // 保存cookie,實現自動登錄 Cookie cookie_username = new Cookie('cookie_username', username); // 設置cookie的持久化時間,30天 cookie_username.setMaxAge(30 * 24 * 60 * 60); // 設置為當前項目下都攜帶這個cookie cookie_username.setPath(request.getContextPath()); // 向客戶端發送cookie response.addCookie(cookie_username); res.put('code', 1); res.put('msg', '登錄成功'); return res;}

4、注銷登錄

/** * 退出登錄 */@RequestMapping(value = 'logout')public String logout(HttpSession session, HttpServletRequest request, HttpServletResponse response) { // 刪除session里面的用戶信息 session.removeAttribute(Const.SYSTEM_USER_SESSION); // 保存cookie,實現自動登錄 Cookie cookie_username = new Cookie('cookie_username', ''); // 設置cookie的持久化時間,0 cookie_username.setMaxAge(0); // 設置為當前項目下都攜帶這個cookie cookie_username.setPath(request.getContextPath()); // 向客戶端發送cookie response.addCookie(cookie_username); return 'login';}

注銷登錄時,我們需要刪除 session 里面的用戶信息,刪除 cookie 里面的用戶信息,然后請求到登錄界面

四、總結

以上就是 SpringBoot 中使用 Cookie 實現記住登錄功能,在項目中還算是比較實用的功能,希望能對正在閱讀的你一點點幫助和啟發,更多相關SpringBoot Cookie記住登錄內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Spring
相關文章:
主站蜘蛛池模板: 标策网-专注公司商业知识服务、助力企业发展 | 河南中整光饰机械有限公司-抛光机,去毛刺抛光机,精密镜面抛光机,全自动抛光机械设备 | 锯边机,自动锯边机,双面涂胶机-建业顺达机械有限公司 | 悬浮拼装地板_篮球场木地板翻新_运动木地板价格-上海越禾运动地板厂家 | 安徽华耐泵阀有限公司-官方网站| 湖南长沙商标注册专利申请,长沙公司注册代理记账首选美创! | 无锡网站建设-做网站-建网站-网页设计制作-阿凡达建站公司 | 环保袋,无纺布袋,无纺布打孔袋,保温袋,环保袋定制,环保袋厂家,环雅包装-十七年环保袋定制厂家 | 酸度计_PH计_特斯拉计-西安云仪 纯水电导率测定仪-万用气体检测仪-低钠测定仪-米沃奇科技(北京)有限公司www.milwaukeeinst.cn | 飞行者联盟-飞机模拟机_无人机_低空经济_航空技术交流平台 | 上海质量认证办理中心| 双杰天平-国产双杰电子天平-美国双杰-常熟双杰仪器 | 罐体电伴热工程-消防管道电伴热带厂家-山东沃安电气 | 防勒索软件_数据防泄密_Trellix(原McAfee)核心代理商_Trellix(原Fireeye)售后-广州文智信息科技有限公司 | 山东钢格板|栅格板生产厂家供应商-日照森亿钢格板有限公司 | 金属切削液-脱水防锈油-电火花机油-抗磨液压油-深圳市雨辰宏业科技发展有限公司 | 灌木树苗-绿化苗木-常绿乔木-价格/批发/基地 - 四川成都途美园林 | 手机游戏_热门软件app下载_好玩的安卓游戏下载基地-吾爱下载站 | 棕刚玉-白刚玉厂家价格_巩义市东翔净水材料厂 | 气动隔膜泵厂家-温州永嘉定远泵阀有限公司 | 隐形纱窗|防护纱窗|金刚网防盗纱窗|韦柏纱窗|上海青木装潢制品有限公司|纱窗国标起草单位 | 中细软知识产权_专业知识产权解决方案提供商 | 针焰试验仪,灼热丝试验仪,漏电起痕试验仪,水平垂直燃烧试验仪 - 苏州亚诺天下仪器有限公司 | 二手注塑机回收_旧注塑机回收_二手注塑机买卖 - 大鑫二手注塑机 二手光谱仪维修-德国OBLF光谱仪|进口斯派克光谱仪-热电ARL光谱仪-意大利GNR光谱仪-永晖检测 | 裹包机|裹膜机|缠膜机|绕膜机-上海晏陵智能设备有限公司 | 座椅式升降机_无障碍升降平台_残疾人升降平台-南京明顺机械设备有限公司 | SDG吸附剂,SDG酸气吸附剂,干式酸性气体吸收剂生产厂家,超过20年生产使用经验。 - 富莱尔环保设备公司(原名天津市武清县环保设备厂) | 油漆辅料厂家_阴阳脚线_艺术漆厂家_内外墙涂料施工_乳胶漆专用防霉腻子粉_轻质粉刷石膏-魔法涂涂 | 别墅图纸超市|别墅设计图纸|农村房屋设计图|农村自建房|别墅设计图纸及效果图大全 | 百度爱采购运营研究社社群-店铺托管-爱采购代运营-良言多米网络公司 | 深圳高新投三江工业消防解决方案提供厂家_服务商_园区智慧消防_储能消防解决方案服务商_高新投三江 | 背压阀|减压器|不锈钢减压器|减压阀|卫生级背压阀|单向阀|背压阀厂家-上海沃原自控阀门有限公司 本安接线盒-本安电路用接线盒-本安分线盒-矿用电话接线盒-JHH生产厂家-宁波龙亿电子科技有限公司 | 牛皮纸|牛卡纸|进口牛皮纸|食品级牛皮纸|牛皮纸厂家-伽立实业 | 大立教育官网-一级建造师培训-二级建造师培训-造价工程师-安全工程师-监理工程师考试培训 | BESWICK球阀,BESWICK接头,BURKERT膜片阀,美国SEL继电器-东莞市广联自动化科技有限公司 | 上海宿田自动化设备有限公司-双面/平面/单面贴标机 | 活性氧化铝|无烟煤滤料|活性氧化铝厂家|锰砂滤料厂家-河南新泰净水材料有限公司 | 圆盘鞋底注塑机_连帮鞋底成型注塑机-温州天钢机械有限公司 | 滤芯,过滤器,滤油机,贺德克滤芯,精密滤芯_新乡市宇清流体净化技术有限公司 | 山东活动策划|济南活动公司|济南公关活动策划-济南锐嘉广告有限公司 | 螺旋压榨机-刮泥机-潜水搅拌机-电动泥斗-潜水推流器-南京格林兰环保设备有限公司 |