JavaWeb 基於Session的用戶登陸注銷實現


  通過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之類的驗證方案還是很有用武之地的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM