java自动登录功能和记住用户名功能

实现在这两个功能,都需要用到coolie技术,将所需要的用户名或者密码带到浏览器端,实现用户名和密码的记录,然后完成所要的功能。
一、自动登录功能

  1. 后台的代码
    1.1、后台servlet中的代码
//1、判断是否勾选了自动登录的复选框
            String autoLogin = request.getParameter("autoLogin");
            //自动登录
            if("autoLogin".equals(autoLogin)){
                //勾选了复选框 回写一个带有用户名和密码的cooke
                Cookie cookie = new Cookie("autoLogin", user.getUsername() + "#" + user.getPassword());
                //设置存活的时间
                cookie.setMaxAge(60*60*12*7);//设置7天
                //设置路径
                cookie.setPath("/");
                //回写cookie
                response.addCookie(cookie);

                response.sendRedirect(request.getContextPath()+"/index.jsp");
                return;
            }

1.2、 后台filter中的代码

public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
        // 将reqeust,  先强转
        HttpServletRequest request = (HttpServletRequest) req;

        // 判断用户是否已经登录, 如果已经登录,  直接放行
        User existUser = (User) request.getSession().getAttribute("user");
        if(existUser!=null){

            //进来, 则说明 已经登录,则 直接放行
            chain.doFilter(request,resp);
            return;
        }else{

            //说明没有登录,  那么就 帮助 用户自动登录

            //获得目标的 coookie
            Cookie[] cookies = request.getCookies();

            Cookie targetCookie = CookieUtils.findTargetCookie(cookies, "autoLogin");

            if(targetCookie==null){
                //进来,则说明根本都没有带 目标 cookie 过来, 那么 不能 自动登录, 则
                // 直接放行
                chain.doFilter(request,resp);
                return;
            }else{
                // 进来,则说明找到了 目标名称的cookie , 进一步获得
                // username 和password

                // autologin   = zs#itheima#202cb962ac59075b964b07152d234b70
                String value = targetCookie.getValue();

                String username = value.split("#")[0];
                String password = value.split("#")[1];              
                System.out.println("username : " + username);
                System.out.println("password : " + password);

                //  还是要再次 查询一下.
                UserService us = new UserServiceImpl();
                User loginUser = us.findUserPwd(username, password);
                if(loginUser!=null){
                   //则说明, 找到了, 意味着 带过来的cookie 信息是没有问题的
                    // 帮助 用户自动登录
                    //注:登陆成功的标志是 session 域中有 user 对象 此处登录成功之后,将user对象存入到 session域中                    request.getSession().setAttribute("user",loginUser);
                    //放行
                    chain.doFilter(request,resp);
                    return;
                }else{
                    //说明 cookie的信息有问题... 登录不了
                    //放行
                    chain.doFilter(request,resp);
                    return;
                }
            }
        }
    }
  1. 3、后台工具类 util 中的代码
public class CookieUtils {

    /**
     *     调用这个 api ,可以从 cookies的数组中找到 目标名称的cookie 对象
     *
     * @param cookies . cookie的数组
     * @param name  , 目标cookie的 name, 名称
     * @return
     */
    public static Cookie findTargetCookie(Cookie[] cookies , String name){
        if(cookies==null){
            return null;
        }

        for (Cookie cookie: cookies ) {
            if(name.equals(cookie.getName())){

                //进来,则说明找到了 目标名称的cookie对象
                return cookie;
            }
        }
        return null;
    }
}


二、记住用户名功能
1.1. 后台的代码

//获取前台传过来的记住用户名的input中的name的属性
String remeber = request.getParameter("remeber");
            //回写用户名
            if("remeber".equals(remeber)){//当勾选的记住按钮的时候
                System.out.println(remeber+"我是remeber");
                Cookie cookie = new Cookie("remeber", user.getUsername());
                //设置存货时间
                cookie.setMaxAge(60*60*24*4);//存货4天的时间
                //设置访问的路径
                cookie.setPath("/");
                //回写cooki
                response.addCookie(cookie);
            }else {//当没有记住勾选了按钮的时候,清除cookie的信息
                Cookie cookie = new Cookie("remeber", "");
                cookie.setMaxAge(0);
                cookie.setPath("/");
                response.addCookie(cookie);
            }

1.2 前台的代码

 1.2.1 、JSP 的代码
<%  //java
		String username="";
		//或得浏览器中的cookie
		Cookie[] cookies=request.getCookies();
		if(cookies!=null&&cookies.length>0){
			//遍历Cookie
			for(int i=0;i<cookies.length;i++){
				Cookie cookie=cookies[i];
				//此处类似与Map有name和value两个字段,name相等才赋值,并处理编码问题
				if("remeber".equals(cookie.getName())){
					username=java.net.URLDecoder.decode(cookie.getValue(),"utf-8");
				}

			}
		}
		//将username保存到session域中
		request.getSession().setAttribute("username",username);
	%>

 1.2.2 、html 的代码

<input type="checkbox" name="remeber" value="remeber"> 记住用户名
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值