实现记住密码功能

1,把控制层(controller)代码中处理好的数据传递到视图层(jsp),使用作用域传递:

  • pageContext:用来在同一个页面的不同标签之间传递数据。
  • request:在同一个请求过程中间传递数据。
  • session: 同一个浏览器窗口的不同请求之间传递数据。
  • application:所有用户共享的数据,并且长久频繁使用的数据。

2,jquery事件函数的用法:

选择器.click(function(){//给指定的元素添加事件
      //js代码
   });
选择器.click();//在指定的元素上模拟发生一次事件

3,记住密码:

访问:login.jsp---->后台:.html:如果上次记住密码,自动填上账号和密码;否则,不填。
如何判断上次是否记住密码?`
–上次登录成功,判断是否需要记住密码:如果需要记住密码,则往浏览器写cookie;否则,删除cookie。
而且cookie的值必须是该用户的loginAct和loginPwd
–下次登录时,判断该用户有没有cookie:如果有,则自动填写账号和密码;否则,不写。
而且填写的是cookie的值.
----->浏览器显示
获取cookie:

1,使用java代码获取cookie:
    Cookie[] cs=request.getCookies();
    for(Cookie c:cs){
	if(c.getName().equals("loginAct")){
	    String loginAct=c.getValue();
	}else if(c.getName().equals("loginPwd")){
	    String loginPwd=c.getValue();
	}
    }

2,使用EL表达式获取cookie:

   ${cookie.loginAct.value}
    ${cookie.loginPwd.value}

登录页面

<div style="position: absolute; top: 120px; right: 100px;width:450px;height:400px;border:1px solid #D5D5D5">
		<div style="position: absolute; top: 0px; right: 60px;">
			<div class="page-header">
				<h1>登录</h1>
			</div>
			<form class="form-horizontal" role="form">
				<div class="form-group form-group-lg">
					<div style="width: 350px;">
			<!--用el表达式获取记住密码登录的用户信息-->
						<input class="form-control" id="loginAct" value="${cookie.loginAct.value}" type="text" placeholder="用户名">
					</div>
					<div style="width: 350px; position: relative;top: 20px;">
						<input class="form-control" id="loginPwd" value="${cookie.loginPwd.value}" type="password" placeholder="密码">
					</div>
					<div class="checkbox"  style="position: relative;top: 30px; left: 10px;">
						<label>
							<c:if test="${not empty cookie.loginAct and not empty cookie.loginPwd}">
								<input type="checkbox" id="isRemPwd" checked> 十天内免登录
							</c:if>
							<c:if test="${empty cookie.loginAct or empty cookie.loginPwd}">
								<input type="checkbox" id="isRemPwd">
							</c:if>
							 十天内免登录
						</label>
						&nbsp;&nbsp;
						<span style="color: red" id="msg"></span>
					</div>
					<button type="button" id="loginBtn" class="btn btn-primary btn-lg btn-block"  style="width: 350px; position: relative;top: 45px;">登录</button>
				</div>
			</form>
		</div>
	</div>

登录Controller

/**
     *
     * @param loginAct
     * @param loginPwd
     * @param isRemPwd
     * @return
     */
    @RequestMapping("/settings/qx/user/login.do")
    @ResponseBody
    public Object login(String loginAct,
                        String loginPwd,
                        String isRemPwd,
                        HttpServletRequest request,
                        HttpSession session,
                        HttpServletResponse response){
        Map<String,Object> map = new HashMap<>();
        map.put("loginAct",loginAct);
        map.put("loginPwd",loginPwd);
        System.out.println("==================迭代器遍历Map====================");
        Iterator<Map.Entry<String, Object>> iterator = map.entrySet().iterator();
        while (iterator.hasNext()){
            Map.Entry entry = (Map.Entry)iterator.next();
            Object key = entry.getKey();
            Object value = entry.getValue();
            System.out.println("遍历UserControler的login方法:");
            System.out.println("key="+key+";value="+value);
        }

        User user = userService.queryUserByLoginActAndPwd(map);
        //根据查询结果,生成响应信息
        ReturnObject returnObject = new ReturnObject();
        if(user==null){
            //登录失败,用户名或者密码错误
            returnObject.setCode(Contants.RETURN_OBJECT_FAIL);
            returnObject.setMessage("用户名或者密码错误!");
        }else {//进一步判断账号是否合法
            //比较当前时间和账号过期时间
                //user.getExpireTime()  =>2019-10-20
                //new Date()            =>2020-09-10
            String newStr = DateUtils.formateDateTime(new Date());
            if(newStr.compareTo(user.getExpireTime())>0){
                //登录失败:账号已过期
                returnObject.setCode(Contants.RETURN_OBJECT_FAIL);
                returnObject.setMessage("账号已过期!");
            }else if("0".equals(user.getLockState())){
                //登录失败:状态被锁定
                returnObject.setCode(Contants.RETURN_OBJECT_FAIL);
                returnObject.setMessage("状态被锁定!");
            }else if(!user.getAllowIps().contains(request.getRemoteAddr())){
                //登录失败:ip受限
                returnObject.setCode(Contants.RETURN_OBJECT_FAIL);
                returnObject.setMessage("ip受限!");
            }else {
                //登录成功
                returnObject.setCode(Contants.RETURN_OBJECT_SUCCESS);
                //把user保存到session域中
                session.setAttribute(Contants.SESSION_USER,user);
                System.out.println("isRemPwd="+isRemPwd);

                /**
                 * 如果需要记住密码,则往外写cookie
                 *      点击登录发送请求到后台,后台接收用户名loginAct和密码loginPwd以及记住密码复选框值isRmPwd
                 *      判断isRemPwd为true则记住密码,把该登录用户信息保存到cookie域里,然后在登录页面获取域中的值
                 *      分别赋值给用户名loginAct和密码loginPwd以及记住密码复选框值isRmPwd
                 * 		PS:退出登录的时候要清空cookie
                 *          (需要考虑密码安全问题,)
                 */

                if("true".equals(isRemPwd)){
                    //把用户账号写入cookie
                    Cookie c1 = new Cookie("loginAct", user.getLoginAct());
                    c1.setMaxAge(10*24*60*60);//cookie保存十天
                    response.addCookie(c1);
                    //把用户密码写入cookie
                    Cookie c2 = new Cookie("loginPwd", user.getLoginPwd());
                    c2.setMaxAge(10*24*60*60);
                    //把cookie响应给浏览器
                    response.addCookie(c2);
                    System.out.println("记住密码,账户:"+loginAct+";密码:"+loginPwd+";isRemPwd:"+isRemPwd);

                }else {
                    //如果没有记住密码,则把没有过期的cookie删除
                    Cookie c1 = new Cookie("loginAct", "1");
                    c1.setMaxAge(0);
                    response.addCookie(c1);
                    Cookie c2 = new Cookie("loginPwd", "1");
                    c2.setMaxAge(0);
                    response.addCookie(c2);
                }
            }

        }

        return returnObject;
    }
  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值