通過Session來存儲用戶的部分登陸信息來驗證用戶是否在線,這應該時最容易實現的一種Web端方案,本文以SSM(Spring、SpringMVC、myBatis)框架為載體,來具體實現這套登陸系統。
1.通過前端傳遞用戶名密碼到后端接口,接口拿到值后,對其進行MD5加密,與數據庫中的字段進行比較,返回狀態給前端,前端根據返回值進行頁面跳轉。
MD5加密工具類
public String EncoderByMd5(String str) throws NoSuchAlgorithmException, UnsupportedEncodingException{ //確定計算方法 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層實現類
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中寫入用戶名鍵值對。
2.當其他頁面訪問時,如何判斷是否有用戶登陸在線呢,我通過JS來取Session值來判斷。
即:先去拿Session的值,如果拿到為空或為null,則說明此會話在此之前沒有登陸行為,我們自動將其重定向到首頁,如果有值,則說明有登陸行為,且登陸在線的用戶為CURRENT_USER
所取出來的值,這時我們在用用戶名去調后台接口即可。
<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"; } </script>
3.用戶注銷
注銷,即清除Session中的值即可,由后台開放一個注銷接口。
@RequestMapping("/quitUser") public String quitUser(HttpServletRequest request){ HttpSession session = request.getSession(); session.removeAttribute("CURRENT_USER"); return "index"; }
這樣就實現了一套從登陸到注銷的用戶管理體系,但是這是一種最基礎的體系,安全性由很大的問題,所以類似於JWT TOKEN之類的驗證方案還是很有用武之地的。