自动登录_自动登录网页 - CSDN
自动登录 订阅
自动登录可以通过编辑Microsoft Windows NT的注册表来完成。使用注册表编辑器(Regedit.exe)来打开下列键值 展开全文
自动登录可以通过编辑Microsoft Windows NT的注册表来完成。使用注册表编辑器(Regedit.exe)来打开下列键值
信息
外文名
automatic logon
类    型
登录过程
国    家
中国
中文名
自动登录
群控群控
automatic logon,自动登录,是用户通过其以前存储在注册表中的证书获得访问网络权利的登录过程。概述自动登录可以通过编辑Microsoft Windows NT的注册表来完成。使用注册表编辑器(Regedit.exe)来打开下列键值:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon并修改或创建下列REG_SZ类型值:·DefaultDomainName·DefaultUserName·DefaultPassword·AutoAdminLogon将AutoAdminLogon置为1即启用了自动登录。也可以在登录或注销过程中按住Shift键来跳过自动登录。注意用户在修改注册表时应该非常小心,因为不正确的注册表修改将会导致系统无法引导。
收起全文
精华内容
参与话题
  • 简单实现自动登录(案例)

    千次阅读 2018-09-08 17:46:34
    逻辑实现类 package ... import org.apache.catalina.Session; import org.springframework.stereotype.Controller;...import org.springframework.ui.Model;...import org.springframework.web.bind...

    逻辑实现类

    package com.itheima.controller;
    
    import org.apache.catalina.Session;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    
    /**
     * @Auther: wangchao
     * @Date: 2018/9/7 10:52
     * @Description: 逻辑实现类
     */
    @Controller
    public class UserController {
    
        @RequestMapping("/login")
        public String login(Model model,Session session , String username, String password,String auto, HttpServletRequest request,HttpServletResponse response) {
            //1.接收参数       接收账号          接收密码       接收是否勾选       接收响应集合                接收模型          接收session
    
            //2.校验参数
            if ("zhangsan".equals(username) && "123".equals(password)) {
                //如果用户名是zhangsan并且密码是123
    
                //保存用户登录的状态
                session.setNote("username", username);
                //那么把账号保存到session里名字是username
                if ("on".equals(auto)) {
                    //判断用户是否已经勾选了自动登录
                    //如果auto是on(代表已经勾选)
                    Cookie cookie = new Cookie("autologin", username + "#" + password);
                    //那么new一个cookie名字为autologin,值为账号#密码
                    cookie.setMaxAge(60 * 60 * 24);
                    //这个cookie的存活时间为1星期
                    response.addCookie(cookie);
                    //把这个cookie添加到响应体里
                    return "index";
                    //跳转去首页显示
                }
                //如果不匹配走这里面
            }
            model.addAttribute("msg", "用户名密码不匹配");
            //使用model.addAttribute设置一个名字为msg显示的内容为value的键值对用来在网页上面显示
            return "login";    //跳转去登录页面,显示失败的原因
        }
    
        @RequestMapping("/loginUI")
        public String loginUI(){ // User Interface 用户界面
            //用于中转不然直接没办法显示,方便用户
            return "login.html";
        }
    
        @RequestMapping("/indexUI")
        public String indexUI(){
            //同样用于中专显示页面,方便用户
            return "index.html";
        }
    }
    

    Filter类

    package com.itheima.filter;
    
    import javax.servlet.*;
    import javax.servlet.annotation.WebFilter;
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    import java.awt.print.Pageable;
    import java.io.IOException;
    
    /**
     * @Auther: wangchao
     * @Date: 2018/9/7 11:32
     * @Description: 利用filter过滤来达到自动登陆
     */
    @WebFilter("/*")  // 将这个filter交由spring去管理
    public class AutoLoginFilter implements Filter{
        //继承filter设置过滤器
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
    
        }
    
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
            HttpServletRequest req = (HttpServletRequest) request;
            //我们会使用到hsrequest所以只能拿到本来的srequest来强转获取
            HttpServletResponse resp = (HttpServletResponse) response;
            //我们会使用到hsresponse所以只能拿到本来的sresponse来强转获取
            //为了避免重复执行自动登录的逻辑,需要判断session中是否已经有username
            String usernameValue = (String) req.getSession().getAttribute("username");
            //从响应体中使用getsession拿到session再通过getattribute传入名字拿到其valiu再赋值给usernamevalue
            if(usernameValue != null) { //表示已经登录过了
                //如果这个value不等于空代表不是第一次登陆
                chain.doFilter(request, response);
                //那么就放行不截取
                return ;
                //返回
            }
    
            //如果登录相关的请求,则直接放行
            String path = req.getRequestURI();
            //方法返回的是一个字符串,内容为整个访问的url的path内容
            System.out.println("path:"+path);
            if(path.contains("login")){
                //如果这个path内容包括login
                chain.doFilter(request, response);
                //那么放行
                return ;  // 下面的代码不再执行了
            }
    
            String cookieValue = null;
            //初始化一个字符串赋值为null
            //1.获取指定名称的cookie  autologin
            Cookie[] cookies = req.getCookies();
            //从响应体中拿到所有的cookie
            if(cookies != null) {
                //如果这个cookie数组不为空
                for (Cookie cookie : cookies) {
                    //那么循环遍历
                    if ("autologin".equals(cookie.getName())){
                        //如果拿到的cookie的名字为autologin就是前面new的value为账号密码的那个cookie
                        cookieValue = cookie.getValue();
                        //把这个账号密码赋值给上面定义的空字符串
                        break;
                    }
                }
            }
    
            boolean isLogin = false;
            //定义一个布尔默认值为false
    
            //2.校验cookie中的value  zhangsan#123
            if(cookieValue != null){
                //如果拿到的这个账号密码不为空
                String[] split = cookieValue.split("#");
                //那么使用split分割拿到账号密码
                String username = split[0];
                String password = split[1];
    
                //校验用户名和密码
                if("zhangsan".equals(username)&&"123".equals(password)){
                    //再次校验如果拿到的账号密码为上面的
                    //校验成功,保存用户登录的状态
                    HttpSession session = req.getSession();
                    //那么取到响应体中的session
                    session.setAttribute("username",username);
                    //并使用setattribute把这个名字为username的账号添加到session里
    
                    //标记自动登陆成功
                    isLogin = true;
                    //并把布尔改成true
                }
            }
    
            //判断是否校验成功
            if(isLogin){
                //如果布尔为true代表校验成功
                chain.doFilter(request,response);
                //那么放行
            }else{
                //不放行,跳转去登录页面
                resp.sendRedirect("/loginUI");
            }
        }
    
        @Override
        public void destroy() {
    
        }
    }
    

    主页

    <!DOCTYPE html>
    <html xmlns:th="http://www.thymeleaf.org">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <h3>欢迎您, <span th:text="${session.username}" >用户名</span> , 这里是首页</h3>
    </body>
    </html>

    表单页

    <!DOCTYPE html>
    <html xmlns:th="http://www.thymeleaf.org">
    <head>
        <meta charset="UTF-8">
        <title>登录页面</title>
    </head>
    <body>
        <div style="color: red" th:text="${msg}"></div>
        <form action="/login" method="post">
            <div>
                <input type="text" name="username"/>
            </div>
            <div>
                <input type="password" name="password"/>
            </div>
    
            <div>
                <input type="checkbox" name="auto" />自动登录
            </div>
            <div>
                <input type="submit" value="登录"/>
            </div>
        </form>
    </body>
    </html>
    展开全文
  • web自动登录总结

    2019-07-12 10:13:31
    web实现自动登录功能 Web上的用户登录功能应该是最基本的功能了,可是在我看过一些站点的用户登录功能后,我觉得很有必要写一篇文章教大家怎么来做用户登录功能。下面的文章告诉大家这个功能可能并没有你所想像的...

    web实现自动登录功能

    Web上的用户登录功能应该是最基本的功能了,可是在我看过一些站点的用户登录功能后,我觉得很有必要写一篇文章教大家怎么来做用户登录功能。下面的文章告诉大家这个功能可能并没有你所想像的那么简单,这是一个关系到用户安全的功能,希望大家能从下面的文章中能知道什么样的方法才是一个好的用户登录功能。以下内容,转载时请保持原文一致,并请注明作者和出处

    用户名和口令

    首先,我们先来说说用户名和口令的事。这并不是本站第一次谈论这个事了。如何管理自己的口令让你知道怎么管理自己的口令,破解你的口令让你知道在现代这样速度的计算速度下,用穷举法破解你的口令可能会是一件很轻松的事。在这里我想告诉从开发者的角度上来做设计这个用户名和口令的事。下面一几件规则:

    • 限制用户输入一些非常容易被破解的口令。如什么qwert,123456, password之类,就像twitter限制用户的口令一样做一个口令的黑名单。另外,你可以限制用户口令的长度,是否有大小写,是否有数字,你可以用你的程序做一下校验。当然,这可能会让用户感到很不爽,所以,现在很多网站都提供了UX让用户知道他的口令强度是什么样的(比如这个有趣的UX),这样可以让用户有一个选择,目的就是告诉用户——要想安全,先把口令设得好一点。

    • 千万不要明文保存用户的口令。正如如何管理自己的口令所说的一样,很多时候,用户都会用相同的ID相同的口令来登录很多网站。所以,如果你的网站明文保存的话,那么,如果你的数据被你的不良员工流传出去那对用户是灾难性的。所以,用户的口令一定要加密保存,最好是用不可逆的加密,如MD5或是SHA1之类的有hash算法的不可逆的加密算法。CSDN曾明文保存过用户的口令。(另,对于国内公司的品行以及有关部门的管理方式,我不敢保证国内网站以加密的方式保存你的口令。我觉得,做为一个有良知的人,我们应该加密保存用户的口令)

    • 是否让浏览器保存口令。我们有N多的方法可以不让浏览器保存用户名和口令。但是这可能对用户来说很不爽。因为在真实世界里谁也记得不住那么多的口令。很多用户可能会使用一些密码管理工具来保存密码,浏览器只是其中一种。是否让浏览器保存这个需要你做决定,重点是看一下你的系统的安全级别是否要求比较高,如果是的话,则不要让浏览器保存密码,并在网站明显的位置告诉用户——保存口令最安全的地方只有你的大脑。

    • 口令在网上的传输。因为HTTP是明文协议,所以,用户名和口令在网上也是明文发送的,这个很不安全。你可以看看这篇文章你就明白了。要做到加密传输就必需使用HTTPS协议。但是,在中国还是有很多网站的Web登录方式还在使用ActiveX控件,这可能成为IE6还大量存在的原因。我通常理解为这些ActiveX控件是为了反键盘记录程序的。 不过,我依然觉ActiveX控件不应该存在,因为在国外的众多安全很重要的站点上都看不到ActiveX的控件的身影。

    用户登录状态

    首先,我想告诉大家的是,因为HTTP是无状态的协议,也就是说,这个协议是无法记录用户访问状态的,其每次请求都是独立的无关联的,一笔是一笔。而我们的网站都是设计成多个页面的,所在页面跳转过程中我们需要知道用户的状态,尤其是用户登录的状态,这样我们在页面跳转后我们才知道是否可以让用户有权限来操作一些功能或是查看一些数据。

    所以,我们每个页面都需要对用户的身份进行认证。当然,我们不可能让用户在每个页面上输入用户名和口令,这会让用户觉得我们的网站相当的SB。为了实现这一功能,用得最多的技术就是浏览器的cookie,我们会把用户登录的信息存放在客户端的cookie里,这样,我们每个页面都从这个cookie里获得用户是否登录的信息,从而达到记录状态,验证用户的目的。但是,你真的会用cookie吗?下面是使用cookie的一些原则。

    • 千万不要在cookie中存放用户的密码。加密的密码都不行。因为这个密码可以被人获取并尝试离线穷举。所以,你一定不能把用户的密码保存在cookie中。我看到太多的站点这么干了。

    • 正确设计“记住密码”。这个功能简直就是一个安全隐患,我觉得并不是所有的程序员都知道怎么设计这个事。一般的设计 是——一时用户勾选了这个功能,系统会生成一个cookie,cookie包括用户名和一个固定的散列值,这个固定的散列值一直使用。这样,你就可以在所有的设备和客户上都可以登录,而且可以有多个用户同时登录。这个并不是很安全。下面是一些更为安全的方法供你参考:
      (——***更新 2011/08/26,原文中有些小错误,并且说的不清楚,重新调整了一下——***)

    1)在cookie中,保存三个东西——用户名登录序列登录token

    用户名:明文存放。
    登录序列:一个被MD5散列过的随机数,仅当强制用户输入口令时更新(如:用户修改了口令)。
    登录token:一个被MD5散列过的随机数,仅一个登录session内有效,新的登录session会更新它。

    2)上述三个东西会存在服务器上,服务器的验证用户需要验证客户端cookie里的这三个事。

    3)这样的设计会有什么样的效果,会有下面的效果,

    a)登录token是单实例登录。意思就是一个用户只能有一个登录实例。

    b)登录序列是用来做盗用行为检测的。如果用户的cookie被盗后,盗用者使用这个cookie访问网站时,我们的系统是以为是合法用户,然后更新“登录token”,而真正的用户回来访问时,系统发现只有“用户名”和“登录序列”相同,但是“登录token” 不对,这样的话,系统就知道,这个用户可能出现了被盗用的情况,于是,系统可以清除并更改登录序列登录token,这样就可以令所有的cookie失效,并要求用户输入口令。并给警告用户系统安全。

    4)当然,上述这样的设计还是会有一些问题,比如:同一用户的不同设备登录,甚至在同一个设备上使用不同的浏览器保登录。一个设备会让另一个设备的登录token登录序列失效,从而让其它设备和浏览器需要重新登录,并会造成cookie被盗用的假象。所以,你在服务器服还需要考虑- IP 地址

    a) 如果以口令方式登录,我们无需更新服务器的“登录序列”和 “登录token”(但需要更新cookie)。因为我们认为口令只有真正的用户知道。

    b) 如果 IP相同 ,那么,我们无需更新服务器的“登录序列”和 “登录token”(但需要更新cookie)。因为我们认为是同一用户有同一IP(当然,同一个局域网里也有同一IP,但我们认为这个局域网是用户可以控制的。网吧内并不推荐使用这一功能)。

    c) 如果 (IP不同 && 没有用口令登录),那么,“登录token” 就会在多个IP间发生变化(登录token在两个或多个ip间被来来回回的变换),当在一定时间内达到一定次数后,系统才会真正觉得被盗用的可能性很高,此时系统在后台清除“登录序列”和“登录token“,让Cookie失效,强制用户输入口令(或是要求用户更改口令),以保证多台设备上的cookie一致。

    • 不要让cookie有权限访问所有的操作。否则就是XSS攻击,这个功能请参看新浪微博的XSS攻击。下面的这些功能一定要用户输入口令:

    1)修改口令。

    2)修改电子邮件。(电子邮件通常用来找回用户密码,最好通发邮件或是发手机短信的方式修改,或者干脆就不让改一一用电子邮件做帐号名)

    3)用户的隐私信息。

    4)用户消费功能。

    • **权衡Cookie的过期时间。**如果是永不过期,会有很不错的用户体验,但是这也会让用户很快就忘了登录密码。如果设置上过期期限,比如2周,一个月,那么可能会好一点,但是2周和一个月后,用户依然会忘了密码。尤其是用户在一些公共电脑上,如果保存了永久cookie的话,等于泄露了帐号。所以,对于cookie的过期时间我们还需要权衡。

    找回口令的功能

    找回口令的功能一定要提供。但是很多朋友并不知道怎么来设计这个功能。我们有很多找回口令的设计,下面我逐个点评一下。

    • 千万不要使用安全问答。事实证明,这个环节很烦人,而且用户并不能很好的设置安全问答。什么,我的生日啊,我母亲的生日,等等。因为今天的互联网和以前不一样了,因为SNS,今天的互联比以前更真实了,我可以上facebook,开心,人人网,LinkedIn查到你的很多的真实的信息。通过这些信息我可以使用安全问答来重设你的口令。 这里需要说一下 Facebook,Facebook的安全问答很强大,还要你通过照片认人,呵呵。

    • 不要重置用户的密码。因为这有可能让用户的密码遭到恶意攻击。当然,你要发个邮件给用户让其确认,用户点击邮件中的一个链接,你再重置。我并不推荐这样的方法,因为用户一般都会用笔记下来这个很难记的口令,然后登录系统,因为登录系统时使用了“记住密码”的功能,所以导致用户不会去修改密码,从而要么导到被写下来的密码被人盗取,要么又忘记了密码。

    • 好一点的做法——通过邮件自行重置。当用户申请找回口令功能的时候,系统生成一个MD5唯一的随机字串(可通过UID+IP+timestamp+随机数),放在数据库中,然后设置上时限(比如1小时内),给用户发一个邮件,这个连接中包含那个MD5的字串的链接,用户通过点击那个链接来自己重新设置新的口令。

    • 更好一点的做法——多重认证。比如:通过手机+邮件的方式让用户输入验证码。手机+邮件可能还不把握,因为手机要能会丢了,而我的手机可以访问我的邮箱。所以,使用U盾,SecureID(一个会变化的6位数token),或是通过人工的方式核实用户身份。当然,这主要看你的系统的安全级别了。

    口令探测防守

    • 使用验证码。验证码是后台随机产生的一个短暂的验证码,这个验证码一般是一个计算机很难识别的图片。这样就可以防止以程序的方式来尝试用户的口令。事实证明,这是最简单也最有效的方式。当然,总是让用户输入那些肉眼都看不清的验证码的用户体验不好,所以,可以折中一下。比如Google,当他发现一个IP地址发出大量的搜索后,其会要求你输入验证码。当他发现同一个IP注册了3个以上的gmail邮箱后,他需要给你发短信方式或是电话方式的验证码。

    • 用户口令失败次数。调置口令失败的上限,如果失败过多,则把帐号锁了,需要用户以找回口令的方式来重新激活帐号。但是,这个功能可能会被恶意人使用。最好的方法是,增加其尝试的时间成本(以前的这篇文章说过一个增加时间成本的解密算法)。如,两次口令尝试的间隔是5秒钟。三次以上错误,帐号被临时锁上30秒,5次以上帐号被锁1分钟,10次以上错误帐号被锁4小时……但是这会导致恶意用户用脚本来攻击,所以最好再加上验证码,验证码出错次数过多不禁止登录而是禁lP。

    • 系统全局防守。上述的防守只针对某一个别用户。恶意者们深知这一点,所以,他们一般会动用“僵尸网络”轮着尝试一堆用户的口令,所以上述的那种方法可能还不够好。我们需要在系统全局域上监控所有的口令失败的次数。当然,这个需要我们平时没有受到攻击时的数据做为支持。比如你的系统,平均每天有5000次的口令错误的事件,那么你可以认为,当口令错误大幅超过这个数后,而且时间相对集中,就说明有黑客攻击。这个时候你怎么办?一般最常见使用的方法是让所有的用户输错口令后再次尝试的时间成本增加。

    最后,再说一下,关于用户登录,使用第三方的 OAuth 和 OpenID 也不失为一个很不错的选择。

    参考文章

    以上内容,转载时请保持原文一致,并请注明作者和出处

    展开全文
  • 自动登录功能实现

    万次阅读 2018-03-25 16:39:24
    自动登录 在用户登录后进入首页,关闭浏览器后,下次打开浏览器进入首页时,往往需要重新登录,自动登录功能:再次打开浏览器的时候,不需要重新登录就可以进入首页。 实现原理 在用户登录后,将用户的用户名和...
    1. 自动登录
      在用户登录后进入首页,关闭浏览器后,下次打开浏览器进入首页时,往往需要重新登录,自动登录功能:再次打开浏览器的时候,不需要重新登录就可以进入首页。
    2. 实现原理
      在用户登录后,将用户的用户名和密码保存到cookie中发送给浏览器,浏览器下次再次访问的时候会把cookie内容带回来,服务器从cookie中区出用户名和密码进行验证,如果验证通过,则允许进入首页等,从而达到自动登录的目的。
    3. 代码实现
      (1)登录页面表单:
    <form method="post" action="login">
        用户名:<input type="text" name="username" ><br>
        密码:<input type="text" name="password" ><br>
        自动登录:<input type="checkbox" name="auto" value="auto" ><br>
        <input type="submit"  value="登录">
    </form>
    (2)模拟后台service登录方法:
    
    package com.service;
    
    public class LoginServiceImpl {
    
        public boolean login(String username,String password) {
            return "root".equals(username)&&"1234".equals(password);
        } 
    
    }
    

    (3)后台Controller:

    package com.controller;
    
    import java.io.IOException;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import com.service.LoginServiceImpl;
    
    @WebServlet("/login")
    public class LoginController extends HttpServlet {
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doPost(req, resp);
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
            String username = req.getParameter("username");
            String password = req.getParameter("password");
            String auto = req.getParameter("auto"); //是否自动登录
    
            if(new LoginServiceImpl().login(username, password)) {//如果登录成功
                req.getSession().setAttribute("username", username);
                if(auto==null) {
                    Cookie cookie = new Cookie("auto", null);
                    cookie.setMaxAge(60*60*24);//cookie有效时间
                    cookie.setPath(req.getContextPath()+"/");
                    resp.addCookie(cookie);
                }else {
                    Cookie cookie = new Cookie("auto", username+"_"+password);
                    cookie.setMaxAge(60*60*24);//cookie有效时间
                    cookie.setPath(req.getContextPath()+"/");
                    resp.addCookie(cookie);
                }
                resp.sendRedirect("index.jsp");
            }else {
                resp.sendRedirect("login.jsp");
            }
        }
    }
    
    (4)拦截器
    
    package com.filter;
    
    import java.io.IOException;
    
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.annotation.WebFilter;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import com.service.LoginServiceImpl;
    import com.util.CookieUitl;
    
    @WebFilter("/*")
    public class LoginFiler implements Filter {
    
        @Override
        public void destroy() {
        }
    
        @Override
        public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
                throws IOException, ServletException {
            HttpServletRequest request = (HttpServletRequest) req;
            HttpServletResponse response = (HttpServletResponse) resp;
    
            if(request.getRequestURI().contains("login")) {//如果访问login
                chain.doFilter(request, response);
                return;
            }else {
                String username = (String) request.getSession().getAttribute("username");
                if(username==null) {
                    String val = CookieUitl.getCookieValByKey("auto", request);
                    if(val!= null&& !val.equals("")) {
                        String name = val.split("_")[0];
                        String pass = val.split("_")[1];
    
                        if(new LoginServiceImpl().login(name, pass)) {
                            request.getSession().setAttribute("username", name);
                            chain.doFilter(request, response);
                            return;
                        }else {
                            response.sendRedirect("login.jsp");
                        }
                    }else {
                        response.sendRedirect("login.jsp");
                    }
                }else {
                    chain.doFilter(request, response);
                    return;
                }
            }
        }
    
        @Override
        public void init(FilterConfig arg0) throws ServletException {
        }
    }

    (5)CookieUtil

    package com.util;
    
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServletRequest;
    
    public class CookieUitl {
    
        public static String getCookieValByKey(String key,HttpServletRequest request) {
    
            String value = null;
            Cookie[] cookies = request.getCookies();
            if(cookies!= null && cookies.length>0) {
                for (Cookie cookie : cookies) {
                    if(key.equals(cookie.getName())){
                        value = cookie.getValue();
                    }
                }
            }
            return value;
        }
    }
    
    (6)index.jsp中欢迎页面   
    
    <body>
    欢迎你:${username }
    </body>

    注:在实际开发中,用户名和密码不是明文放在cookie中的,需要先进行加密处理后再存入cookie中。

    展开全文
  • 案例三:实现用户的自动登录

    千次阅读 2018-08-03 10:55:43
    实现用户自动登录的过滤器 当用户登录的时候勾选了自动登录选项,那么首次登录会把用户的账户密码保存到Cookie,当用户关闭页面 重新打开,符合条件的将会先被filter拦截实现自动登录的功能,即使用户关闭浏览器了,...

    实现用户自动登录的过滤器

    当用户登录的时候勾选了自动登录选项,那么首次登录会把用户的账户密码保存到Cookie,当用户关闭页面 重新打开,符合条件的将会先被filter拦截实现自动登录的功能,即使用户关闭浏览器了,只要Cookie没有过期,再次打开页面如果符合条件也是可以完成自动登录的.

    需要注意的是,如果用户点击了退出登录后返回的页面(一般都是通过重定向返回的),如果返回的页面仍然被自动登录的filter所匹配,那么就会造成退出不了的死循环,因为退出成功后重定向也会被再次拦截,拦截又被自动登录了.

    所以在点击退出登录的时候除了要清空用户的session还需要清空用户的cookie

    如果想减少自动登录的操作可以将User类钝化到服务器硬盘.如何实现可以看这篇文章详情

    filter代码如下:

    package blog.csdn.net.web.filter;
    
    import java.io.IOException;
    import java.net.URLDecoder;
    import java.sql.SQLException;
    
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    
    import blog.csdn.net.web.domain.User;
    import blog.csdn.net.web.service.UserService;
    import blog.csdn.net.web.util.CookieUtils;
    import blog.csdn.net.web.util.StringUtils;
    
    /**
     * 处理自动登录的Filter,当用户登录的时候勾选了自动登录,用户退出登录后,下次访问,会判断cookie中保存的用户名密码完成自动登录
     * 
     * @author mChenys
     *
     */
    public class AutoLoginFilter implements Filter {
    
    	@Override
    	public void init(FilterConfig filterConfig) throws ServletException {
    
    	}
    
    	@Override
    	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
    			throws IOException, ServletException {
    		// 强转
    		HttpServletRequest httpServletRequest = (HttpServletRequest) request;
    		HttpServletResponse httpServletResponse = (HttpServletResponse) response;
    		
    		HttpSession session = httpServletRequest.getSession();
    
    		System.out.println("AutoLoginFilter start 自动登录拦截");
    		// 获取session域中保存的user
    		if (null == session.getAttribute("user") ) {
    
    			// 获取为null表示用户是关闭浏览器后重新打开的或者是session 过期了.
    			// 判断用户访问的页面是否需要自动登录,这里除了访问登录和退出的请求都需要完成自动登录
    			// 否则访问登录的永远都是上次勾选自动登录的账户,访问退出登录永远都退不了
    			String path = httpServletRequest.getRequestURI();
    			if (!path.contains("/login") && !path.contains("/logout")) {
    				// 获取cookie中保存的账号和密码,cookie的有效时长设置了1小时 
    				Cookie loginCookie = CookieUtils.getCookieByName("autoLogin", httpServletRequest.getCookies());
    				if (null != loginCookie) {
    					// 切割用户名和密码
    					String username = loginCookie.getValue().split("#")[0];
    					String password = loginCookie.getValue().split("#")[1];
    					// 用户名需要解码
    					username = URLDecoder.decode(username, "utf-8");
    					// 尝试登录
    					try {
    						User user = new UserServiceImpl().login(username, password);
    						System.out.println(username + ":自动登录成功...");
    						if (null != user) {
    							// 自动登录成功,保存到session域中,避免重复自动登录
    							session.setAttribute("user", user);
    						}
    					} catch (Exception e) {
    						e.printStackTrace();
    					}
    					
    				}
    			}
    
    		}
    
    		// 发现
    		chain.doFilter(httpServletRequest, httpServletResponse);
    
    		System.out.println("AutoLoginFilter end 自动登录拦截");
    
    	}
    
    	@Override
    	public void destroy() {
    
    	}
    
    }

    注册filter

    <!--  自动登录拦截-->
    <filter>
        <filter-name>AutoLoginFilter</filter-name>
        <filter-class>blog.csdn.net.web.filter.AutoLoginFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>AutoLoginFilter</filter-name>
        <url-pattern>/home</url-pattern>
        <!-- 
    	REQUEST(默认类型):只拦截从浏览器发送来的请求,包括了重定向,因为重定向相当于让浏览器重新发送一个    新的请求
         -->
        <dispatcher>REQUEST</dispatcher>
    </filter-mapping>

    登录的Servlet代码如下:

    package blog.csdn.net.web.servlet;
    
    import java.io.IOException;
    import java.net.URLEncoder;
    import java.sql.SQLException;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    
    import blog.csdn.net.web.domain.User;
    import blog.csdn.net.web.service.UserService;
    import blog.csdn.net.web.util.CookieUtils;
    import blog.csdn.net.web.util.StringUtils;
    
    /**
     * 用户登录
     */
    public class LoginServlet extends HttpServlet {
    	private static final long serialVersionUID = 1L;
    
    	protected void doGet(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    		request.setCharacterEncoding("utf-8");
    		response.setContentType("text/html;charset=utf-8");
    
    		String username = request.getParameter("username");
    		String password = request.getParameter("password");
    		String saveName = request.getParameter("saveName");
    		String autoLogin = request.getParameter("autoLogin");
    
    		if (StringUtils.isEmpty(username)) {
    			request.setAttribute("usermsg", "用户名为空");
    			request.getRequestDispatcher("/login.jsp").forward(request, response);
    			return;
    		}
    		if (StringUtils.isEmpty(password)) {
    			request.setAttribute("pwdmsg", "密码为空");
    			request.getRequestDispatcher("/login.jsp").forward(request, response);
    			return;
    		}
    
    		User user = null;
    		try {
    			user = new UserService().login(username, password);
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
    		if (null == user) {
    			// 转发
    			request.setAttribute("errormsg", "用户不存在或用户名密码错误");
    			request.getRequestDispatcher("/login.jsp").forward(request, response);
    		} else {
    			// 登录成功,将用户保存到session中
    			HttpSession session = request.getSession();
    			session.setAttribute("user", user);
    			
    			// 记住用户名密码
    			if ("on".equals(saveName)) {
    				// 为了可以让cookie保存中文,账号名需要编码下,页面再解码使用
    				Cookie saveNameCookie = new Cookie("saveName", URLEncoder.encode(username, "utf-8"));
    				saveNameCookie.setMaxAge(3600);
    				saveNameCookie.setPath(request.getContextPath() + "/");
    				response.addCookie(saveNameCookie);
    			} else {  
    				// 清除用户名
    				Cookie saveNameCookie = CookieUtils.getCookieByName("saveName", request.getCookies());
    				if (null != saveNameCookie) {
    					saveNameCookie.setPath(request.getContextPath() + "/");
    					saveNameCookie.setMaxAge(0);
    					response.addCookie(saveNameCookie);
    				}
    			}
    
    			// 自动登录
    			if ("on".equals(autoLogin)) {
    				Cookie autoLoginCookie = new Cookie("autoLogin", URLEncoder.encode(username, "utf-8") + "#" + password);
    				autoLoginCookie.setMaxAge(3600);
    				autoLoginCookie.setPath(request.getContextPath() + "/");
    				response.addCookie(autoLoginCookie);
    			} else {
    				// 清除自动登录
    				Cookie autoLoginCookie = CookieUtils.getCookieByName("autoLogin", request.getCookies());
    				if (null != autoLoginCookie) {
    					autoLoginCookie.setPath(request.getContextPath() + "/");
    					autoLoginCookie.setMaxAge(0);
    					response.addCookie(autoLoginCookie);
    				}
    			}
    
    			if (user.getUsername().equals("admin")) {
    				response.sendRedirect(request.getContextPath() + "/productList");
    			} else {
    				response.sendRedirect(request.getContextPath() + "/home");
    			}
    
    		}
    	}
    
    	protected void doPost(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    
    		doGet(request, response);
    	}
    
    }
    

     login.jsp

    <%@page import="blog.csdn.net.web.util.CookieUtils"%>
    <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
    	pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>登录页</title>
    <style type="text/css">
    .body {
    	margin: 20% auto 0;
    	width: 70%;
    	text-align: center;
    }
    
    .login {
    	width: 400px;
    	background-color: #cccccc;
    	padding: 30px 10px;
    	margin: auto;
    }
    
    h2 {
    	margin-bottom: 30px;
    }
    
    form {
    	padding: auto;
    }
    
    .msg {
    	color: red
    }
    
    table td {
    	padding: 10px 0px;
    }
    </style>
    
    <script type="text/javascript">
    	function savename(){
    		var checkBox = document.getElementById("saveName");
    		checkBox.checked=!checkBox.checked;
    	}
    	function autologin(){
    		var checkBox = document.getElementById("autoLogin");
    		checkBox.checked=!checkBox.checked;
    	}
    	//显示已经记住的用户名
    	 onload = function(){
    		var nameObj = document.getElementsByName("username")[0];
    		if(${not empty cookie.saveName}){
    			var username = decodeURI("${cookie.saveName.value}");
    			nameObj.value = username;
    		}
    	}
    	
    </script>
    </head>
    <body>
    	<div class="body">
    		<div class="login">
    			<h2>用户登录</h2>
    			<form action="${pageContext.request.contextPath }/login"
    				method="post" autocomplete="off">
    
    				<table align="center">
    					<tr align="left">
    						<td>用户名:</td>
    						<td>
    							<input type="text" name="username" maxlength="6" autocomplete="new-password"/> 
    							<span class="msg">${usermsg}</span>
    						</td>
    					</tr>
    					<tr align="left">
    						<td>密码:</td>
    						<td>
    							<input type="password" name="password" maxlength="6" autocomplete="new-password">
    							<span class="msg">${pwdmsg}</span>
    						</td>
    					</tr>
    					<tr align="left">
    						<td>
    							<c:if test="${empty cookie.saveName}">
    								<input id="saveName" type="checkbox" name="saveName" />
    								<span onclick="savename()">记住用户名</span>
    							</c:if> 
    							<c:if test="${not empty cookie.saveName}">
    								<input id="saveName" type="checkbox" name="saveName"
    									checked="checked" />
    								<span onclick="savename()">记住用户名</span>
    							</c:if>
    						</td>
    						<td>
    							<c:if test="${empty cookie.autoLogin}">
    								<input id="autoLogin" type="checkbox" name="autoLogin" />
    								<span onclick="autologin()">自动登录</span>
    							</c:if>
    							 <c:if test="${not empty cookie.autoLogin}">
    								<input id="autoLogin" type="checkbox" name="autoLogin"
    									checked="checked" />
    								<span onclick="autologin()">自动登录</span>
    							</c:if>
    						</td>
    					</tr>
    					<tr>
    						<td colspan="2" align="right"><input type="submit" value="登录" /></td>
    					</tr>
    				</table>
    			</form>
    			<span class="msg">${errormsg}</span>
    		</div>
    
    	</div>
    </body>
    
    </html>

    退出登录的操作 

    //清除session
    request.getSession().setAttribute("user", null);
    //清除登录cookie 
    Cookie autoLoginCookie = CookieUtils.getCookieByName("autoLogin", request.getCookies());
    if (null != autoLoginCookie) {
    	autoLoginCookie.setPath(request.getContextPath() + "/");
    	autoLoginCookie.setMaxAge(0);
    	response.addCookie(autoLoginCookie);
    }
    //重定向到首页
    response.sendRedirect(request.getContextPath());

    登录页效果图:

     

     

    展开全文
  • 我们使用的一般应用都有记住密码、自动登录功能,这样不用用户每次都要点击登录按钮,提升用户体验,下面我们通过一个实例研究一下如何通过android的sharedpreferenced实现自动登录功能。本实例有三个界面-登录界面...
  • 自动登录方案

    2019-02-28 12:35:16
    等)后可以自动同步到其他的平台。不再纠结到底要在哪个平台发文章。 方案选择 要把文章发到其它平台,首先要有发文章的权限。获取权限最主要就是登陆后获取cookie,能想到的有以下几种方案。 在服务器上调用网站...
  • 支持XP和WIN7的开机自动登录自动登录命令的批处理。
  • 自动登录-

    2019-05-13 18:50:13
    过滤器实现自动登录 @WebFilter(filterName="AutoLoginFilter",value="/*") public class AutoLoginFilter implements Filter{ public void destroy(){} public void init(FilterConfig config)throws ...
  • 自动登录功能

    2019-05-15 21:07:20
    下面记录并分享一下自动登录功能的实现: 一、自动登录 1)登录功能是用Session实现的,就是向Session对象中保存当前用户的对象 2)自动功能用Cookie实现,就是登陆时将用户的信息保存为持久化Cookie 3)下次访问时...
  • java自动登录

    千次阅读 2018-11-08 10:30:19
    从其他页面访问时,如直接访问index页面,勾选过自动登录,从session/cookie获取用户信息,没有勾选,从session中获取用户信息,需要使用filter过滤器 工程结构,采用gradle构建: public class User { ...
  • Win10、Win7、WinXP如何开机自动登录?如何取消开机自动登录? 开机自动登录 开始菜单搜索框输入“netplwiz”按回车 或“Win+R”组合键打开“运行”框内输入“netplwiz” 或“运行”框内输入“control user...
  • 开机自动登陆 按住Win键,再按R键(Win+R),启动"运行"窗口; Windows XP/2003/2008/2008R2输入"control userpasswords2"(不含引号)回车; Windows 7输入"netplwiz"(不含引号),...按"确定"按钮,在弹出的"自动登录...
  • xshell 自动登录与自动跳转

    万次阅读 2012-04-26 13:23:01
    使用linux环境,有时候需要经常需要远程登录服务器并在登陆后跳转到其他的局域网机器。通过实际使用发现xshell是比较理想的工具,具体设置过程如下: 第一步建立自己的登录用户,如下图: 通过上面的设置就...
  • 树莓派实现用pi用户自动登录

    万次阅读 2015-07-23 17:28:37
    修改/etc/inittab,命令如下: sudo nano /etc/inittab 注释掉:1:2345:respawn:/sbin/getty --noclear 38400 tty1 增加:1:2345:respawn:/bin/login -f pi tty1 /dev/tty1 2>&1 如下图所示 ...
  • centos7下使用root免密码输入自动登陆

    千次阅读 2019-02-11 14:14:21
    修改/etc/gdm/custom.conf文件,实现root用户免密码自动登陆 [daemon]下增加 AutomaticLoginEnable=True AutomaticLogin=root 保存文件,然后重启查看效果  
  • SecureCRT telnet 自动登陆的设置

    千次阅读 2014-08-05 17:24:55
    登陆时的提示记录下来 login: 和 username’s Password: 注意要有分号 在主机名称右击 选择Propertites; Expect 输入刚才记录下的提示信息,Send 输入要发送的信息。 这样当SecureCRT接收到Expect中匹配的信息...
  • 前言 有时候win10好烦,需要自己输入密码登录,当然,这里有个前提就是,如果是公司电脑,一般是有安全性考虑,就请自觉... Step WIN+R或者在运行中弹出窗口中输入Control Userpasswords2命令,确定 ...重启,搞定!!......
  • 微信网页授权登陆,第一次用户授权后,用户再次进入页面时,如何判断已经...我觉得是用openid,但是我不希望用户每次打开都是跳转到授权页面,也就是不希望每次都出现“近期你已经授权登陆过XXXXX 自动登录中”这句话。
  • Centos7桌面版开机自动登陆root

    千次阅读 2018-02-04 21:21:10
    vi /etc/gdm/custom.conf 下的[daemon]加如下: [daemon] AutomaticLoginEnable=True AutomaticLogin=root
  • Windows Server 2012启用自动登录方法

    万次阅读 2013-03-26 20:47:16
    http://benyouhui.it168.com/thread-2524716-1-1.html 手动配置: 运行 Control UserPasswords2-用户账号-勾选“要使用本计算机,用户... 脚本配置: [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVer
1 2 3 4 5 ... 20
收藏数 815,163
精华内容 326,065
关键字:

自动登录