加入收藏 | 设为首页 | 会员中心 | 我要投稿 开发网_开封站长网 (http://www.0378zz.com/)- 科技、AI行业应用、媒体智能、低代码、办公协同!
当前位置: 首页 > 教程 > 正文

JavaWeb 基于Session的用户登陆注销达成

发布时间:2021-11-13 12:00:25 所属栏目:教程 来源:互联网
导读:通过Session来存储用户的部分登陆信息来验证用户是否在线,这应该时最容易实现的一种Web端方案,本文以SSM(Spring、SpringMVC、myBatis)框架为载体,来具体实现这套登陆系统。 1.通过前端传递用户名密码到后端接口,接口拿到值后,对其进行MD5加密,与数据

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

(编辑:开发网_开封站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读