zoukankan      html  css  js  c++  java
  • 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之类的验证方案还是很有用武之地的。

  • 相关阅读:
    IOS Xcode编译项目-报错“ld: library not found for -XX”
    ios中关键词weak,assign,copy.strong等的区别
    iOS 控件
    iOS图片处理
    iOS 音频
    C语言文件操作
    iOS 删除相册中照片--来自简书
    ios sourecTree
    ios音频处理
    编码格式简介
  • 原文地址:https://www.cnblogs.com/rekent/p/7691116.html
Copyright © 2011-2022 走看看