JavaWeb基于Session實(shí)現(xiàn)的用戶登陸注銷方法示例
前言
Cookie:cookie是客戶端技術(shù),程序把每個(gè)用戶的數(shù)據(jù)以cookie的形式寫給用戶各自的瀏覽器。
當(dāng)用戶使用瀏覽器再去訪問服務(wù)器中的web資源時(shí),就會(huì)帶著各自的數(shù)據(jù)區(qū),這樣,web資源處理的就是各自的數(shù)據(jù)了。
Session:session是服務(wù)器端技術(shù),利用session技術(shù),服務(wù)器在運(yùn)行時(shí)可以為每一個(gè)用戶的瀏覽器創(chuàng)建其獨(dú)享的session對(duì)象,由于session為用戶瀏覽器獨(dú)享,所以用戶在訪問服務(wù)器的web資源時(shí),可以把各自的數(shù)據(jù)放在session中,當(dāng)用戶再次去訪問服務(wù)器中的其他web資源時(shí),其他web資源再從用戶各自的session
取出數(shù)據(jù)為用戶服務(wù)。
Session和Cookie的主要區(qū)別:
- Cookie是把用戶的數(shù)據(jù)寫給用戶的瀏覽器
- Session技術(shù)把用戶的數(shù)據(jù)寫到用戶獨(dú)占的session中。
- Session對(duì)象由服務(wù)器創(chuàng)建,開發(fā)人員可以調(diào)用request對(duì)象的getSession方法得到session對(duì)象。
我們常常通過Session來存儲(chǔ)用戶的部分登陸信息來驗(yàn)證用戶是否在線,這應(yīng)該時(shí)最容易實(shí)現(xiàn)的一種Web端方案,本文以SSM(Spring、SpringMVC、myBatis)框架為載體,來具體實(shí)現(xiàn)這套登陸系統(tǒng)。
方法如下:
1.通過前端傳遞用戶名密碼到后端接口,接口拿到值后,對(duì)其進(jìn)行 MD5 加密,與數(shù)據(jù)庫中的字段進(jìn)行比較,返回狀態(tài)給前端,前端根據(jù)返回值進(jìn)行頁面跳轉(zhuǎn)。
MD5加密工具類
public String EncoderByMd5(String str) throws NoSuchAlgorithmException, UnsupportedEncodingException{ //確定計(jì)算方法 MessageDigest md5=MessageDigest.getInstance("MD5"); BASE64Encoder base64en = new BASE64Encoder(); //加密后的字符串 String newstr=base64en.encode(md5.digest(str.getBytes("utf-8"))); return newstr; }
DAO層以及Mapper
<select id="valiteUser" parameterType="java.lang.String" resultType="com.heitian.ssm.model.Userinfo"> SELECT password FROM t_user WHERE username = #{username} </select>
Service層實(shí)現(xiàn)類
public String valiteUser(Userinfo userinfo) { try{ Userinfo userdemo=userDao.valiteUser(EncoderByMd5(userinfo.getUsername())); if(userinfo.getPassword().equals(userdemo.getPassword())){ return "pass"; } }catch (Exception e){ e.printStackTrace(); return "error"; } return "refuse"; }
Controller層
@ResponseBody @RequestMapping("/loginUser") public HashMap<String,Object> loginUser(HttpServletRequest request, Userinfo userinfo){ HashMap<String,Object> result=new HashMap<String, Object>(); HttpSession session = request.getSession(); System.out.println("login fail"); String status=userService.valiteUser(userinfo); if(status.equals("pass")){ session.setAttribute("CURRENT_USER",userinfo.getUsername()); result.put("status","pass"); }else{ if(status.equals("refuse")){ result.put("status","refuse"); }else { result.put("status","error"); } } return result; }
通過返回status信息,來判斷登陸是否成功,如果成功則將Session中寫入用戶名鍵值對(duì)。
2.當(dāng)其他頁面訪問時(shí),如何判斷是否有用戶登陸在線呢,我通過JS來取Session值來判斷。
即:先去拿Session的值,如果拿到為空或?yàn)閚ull,則說明此會(huì)話在此之前沒有登陸行為,我們自動(dòng)將其重定向到首頁,如果有值,則說明有登陸行為,且登陸在線的用戶為CURRENT_USER
所取出來的值,這時(shí)我們?cè)谟糜脩裘フ{(diào)后臺(tái)接口即可。
<script language="JavaScript"> $(document).ready(function(){ var myName="<%=session.getAttribute("CURRENT_USER")%>"; var projiectid1= "<%=request.getAttribute("projectid")%>"; if(myName=="null"){ window.location.href="/page/toindex" rel="external nofollow" ; } </script>
3.用戶注銷
注銷,即清除Session中的值即可,由后臺(tái)開放一個(gè)注銷接口。
@RequestMapping("/quitUser") public String quitUser(HttpServletRequest request){ HttpSession session = request.getSession(); session.removeAttribute("CURRENT_USER"); return "index"; }
這樣就實(shí)現(xiàn)了一套從登陸到注銷的用戶管理體系,但是這是一種最基礎(chǔ)的體系,安全性由很大的問題,所以類似于JWT TOKEN之類的驗(yàn)證方案還是很有用武之地的。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
Java基于命令模式實(shí)現(xiàn)郵局發(fā)信功能詳解
這篇文章主要介紹了Java基于命令模式實(shí)現(xiàn)郵局發(fā)信功能,較為詳細(xì)的分析了命令行模式的概念、原理并結(jié)合實(shí)例形式分析了Java使用命令行模式實(shí)現(xiàn)郵局發(fā)信功能的相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下2018-04-04SpringBoot中ApplicationEvent和ApplicationListener用法小結(jié)
這篇文章介紹SpringBoot中ApplicationEvent用法,注意ApplicationEvent和MQ隊(duì)列雖然實(shí)現(xiàn)的功能相似,但是MQ還是有其不可替代性的,最本質(zhì)的區(qū)別就是MQ可以用于不同系統(tǒng)之間的消息發(fā)布,而SpringEvent這種模式只能在一個(gè)系統(tǒng)中,需要的朋友可以參考下2023-03-03關(guān)于weblogic部署Java項(xiàng)目的包沖突問題的解決
這篇文章主要介紹了關(guān)于weblogic部署Java項(xiàng)目的包沖突問題的解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-01-01springboot的緩存技術(shù)的實(shí)現(xiàn)
這篇文章主要介紹了springboot的緩存技術(shù)的實(shí)現(xiàn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-05-05