前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JavaWeb 基于Session的用户登陆注销实现

JavaWeb 基于Session的用户登陆注销实现

作者头像
Rekent
发布2018-09-04 15:35:19
2.2K0
发布2018-09-04 15:35:19
举报
文章被收录于专栏:日常分享日常分享日常分享

  通过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之类的验证方案还是很有用武之地的。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-10-19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档