为了方便用户登录,几乎所有的网站都实现了“记住密码”、“自动登陆”这样似乎人性化的功能。
我也很喜欢这个功能,因为我自己的脑子实在是讨厌记东西。
为了安全起见,我的密码都设置的很复杂,满足“数字+特殊符号+英文字母大小写”。
但密码一复杂,我就总记不住,就想让网站替我记住。
但殊不知,这背后隐藏着巨大的风险。
我先劝大家一声:“危险,不要随意让网站记住密码自动登陆!”
要了解事情的真相,请随我来看一看如何利用cookie实现记住密码自动登陆。

第一步、构建form表单

<form class="form-signin required-validate" action="${ctx}/login?callbackType=forward">${token}<div class="form-group"><div class="row"><input class="form-control" type="text" autofocus name="username" value="${username}" placeholder="请输入会员编号" /></div></div><div class="blank10"></div><div class="form-group"><div class="row"><input class="form-control" type="password" name="password" value="${password}" placeholder="请输入登陆密码" /></div></div><div class="form-group"><div class="row"><div class="checkbox"><label> <input type="checkbox" value="1" <c:if test="${isSave == 'true'}">checked</c:if> name="isSave" /> 下次自动登录</label></div></div></div><div class="form-group"><div class="row"><button class="btn btn-lg btn-primary btn-block" type="submit">登录</button></div></div></form>

第二步、登陆时利用cookie记住密码

@RequestMapping("/login")
public ModelAndView login(HttpServletResponse response,@RequestParam(value = "username", required = false) String username,@RequestParam(value = "password", required = false) String password) {try {boolean isSave = getParaToBoolean("isSave", false);logger.debug("isSaved " + isSave);// 尝试获取cookieString cookieUser = CookieUtil.getCookieByName(request, Constants.COOKIE_USER);logger.debug("cookie的值为:" + cookieUser);// 验证用户信息Members user = memberService.selectByUsername(username);// 如果IP不同,则清除cookieif (cookieUser != null) {if (!user.getLastip().equals(request.getRemoteAddr())) {// 移除自动登录cookie信息CookieUtil.removeCookie(response, Constants.COOKIE_USER);// 删除cookie}}MembersValidator.checkPassword(password, user.getPassword());user.setLastip(request.getRemoteAddr());// 更新登录id 和最后登录时间memberService.updateLastvisit(user);checkToken();int max_age = Variables.cookie_expire * 3600 * 24;if (isSave) {// 将自动登录信息存入cookieCookieUtil.setCookie(response, Constants.COOKIE_USER,DesUtils.encrypt(username + "," + password + "," + isSave), max_age);} else {// 移除自动登录cookie信息CookieUtil.removeCookie(response, Constants.COOKIE_USER);// 删除cookie}logger.debug("登陆成功后跳转");return ajaxDoneSuccess(user.getUid().toString(), (String) getSessionAttr(Constants.BEFORE_LOGIN_URL));} catch (Exception e) {logger.error(e.getMessage());logger.error(e.getMessage(), e);return ajaxDoneError(Constants.SERVER_ERROR);}
}

这部分代码也很清晰明了,就不做多的解释。

附上CookieUtil.java类

/*** Cookie工具类* */
public class CookieUtil {/*** 添加cookie* * @param response* @param name* @param value* @param maxAge*/public static void setCookie(HttpServletResponse response, String name, String value, int maxAge) {Cookie cookie = new Cookie(name, value);cookie.setPath("/");if (maxAge > 0) {cookie.setMaxAge(maxAge);}response.addCookie(cookie);}/*** 删除cookie* * @param response* @param name*/public static void removeCookie(HttpServletResponse response, String name) {Cookie uid = new Cookie(name, null);uid.setPath("/");uid.setMaxAge(0);response.addCookie(uid);}/*** 获取cookie值* * @param request* @return*/public static String getCookieByName(HttpServletRequest request, String cookieName) {Cookie cookies[] = request.getCookies();if (cookies == null) {return null;}for (Cookie cookie : cookies) {if (cookie.getName().equals(cookieName)) {return cookie.getValue();}}return null;}
}

第三步、从cookie中取出登陆用户名、密码等关键信息

@RequestMapping("/initLogin")
public ModelAndView initLogin() {logger.debug("进入登陆页");try {ModelAndView initView = new ModelAndView("login");String cookieUser = CookieUtil.getCookieByName(request, Constants.COOKIE_USER);if (cookieUser != null) {String decode = DesUtils.decrypt(cookieUser);String[] cookieUsers = decode.split(",");initView.addObject("username", cookieUsers[0]);initView.addObject("password", cookieUsers[1]);initView.addObject("isSave", cookieUsers[2]);}createToken();return initView;} catch (Exception e) {logger.error(e.getMessage());logger.error(e.getMessage(), e);return error300(Constants.SERVER_ERROR);}}

当我输入了账号、以及密码后,勾选上“下次自动登陆”,那么系统在验证通过后,就会通过cookie记住我的用户名和密码,下次不用再输入账号和密码,直接点击登陆就进入系统。

到此为止,自动登陆的功能已经实现了。
那么,现在可以说一些负责任的话了。

在浏览器的开发者模式下,注意红色框中的“type=’password’”,此时我们将type修改为text。

注意,注意,你是不是已经发现了,密码不再是密码了,成了明文了。
你,此刻是否心惊肉跳了?

对,XX(这文章会被和谐吗,不至于吧,这早已经不是秘密了,是个程序员都知道)也这样!

所以,作为一个不务正业的IT狗来说,我奉劝各位,“危险,不要随意让网站记住密码自动登陆!”
假如你的电脑这会被我用,而你又选择让网站记住密码,那对不起了,你再复杂的密码也不过是一串明文而已!
当然了,放心了,我是不会去看你的密码了。
不过浏览器会不会看你的密码我就不敢保证了。
既然为了安全,设置了超长超复杂的密码,那么每次就手动输一下嘛,不麻烦,安全得很!

不务正业的IT狗,喜欢读书和写作!

微信扫一扫下方二维码即可关注 沉默王二 公众号:

危险,不要随意让网站记住密码自动登陆!相关推荐

  1. html 记住密码 自动登陆,JavaScript登录记住密码操作(超简单代码)

    废话不多说了,直接给大家贴代码了,具体代码如下所示: 记住密码 记住密码 window.onload = function(){ var oForm = document.getElementById ...

  2. python 自动登录网站_python实现网站用户名密码自动登录功能

    一.概述 公司需要通过网页用户认证登录实现上网,网络设备判断当前帐号12小时没有没上网将会自动断开帐号上网,每天早上上班第一件事就是打开用户认证网页输入. 用户名与密码,有时候要家里通过teamvie ...

  3. php 登录记住密码,php 记住密码自动登录

    做网站的时候会碰到记住密码,下次自动登录,一周内免登陆,一个月内免登陆这种需求.这种功能一般通过cookie来实现的.用户在登陆的时候,如果选择了记住密码或者一周内免登陆等这个选项的时候,则在用户成功 ...

  4. php自动永久登陆js,登录页面--记住密码--自动登录

    布局两个 checkbox ,一个记住密码,一个记住登录 自动登录 记住密码 2. 主要利用 jquery.cookie.js 在提交是触发 save() 函数 //记住用户名密码 function  ...

  5. putty 保存密码 自动登陆 四种方法

    Putty 基本是我在紧急时候用来登陆 Linux/Unix 终端的不二之先,因其小,开源,界面也非常实用.可是当你要在私有的机器上,经常性的要登陆很多机器的时候就觉得烦琐了,不光打开一堆的窗口,还要 ...

  6. google浏览器记住密码自动添加input框背景色问题

    input:-webkit-autofill {-webkit-box-shadow: 0 0 0px 1000px #bddaf0 inset !important; }

  7. 记住密码php代码,推荐10款记住密码的用法代码汇总

    Javascrip操作登录记住用户名和密码 $(document).ready(function () { $("#UserAccount").focus(); &n 简介 ...

  8. 安卓登录的解决方案(记住密码)

    安卓登录解决方案 在安卓开发中,肯定少不了登录,前几天写了个登录的demo,就想着记录下来,是新手,写的可能不太好,但是能用,以后写登录的时候直接copy不就好了么哈哈哈哈哈O(∩_∩)O~ Emmm ...

  9. linux 实现开机自动登陆

    1.Linux实现开机自动登陆---可以指定登陆的账户 在登陆Linux系统的时候,在登陆界面往往需要输入密码后进行登陆,如果想实现Linux锡系统开机后自动登陆某个账户,可以进行如下的设置: 可以通 ...

最新文章

  1. 小程序picker_小程序·云开发实战 - 迷你微博
  2. 频谱细化(补零、zfft、czt)
  3. Windows远程桌面管理--功能强大的远程批量管理工具
  4. Leecode 268. 丢失的数字——Leecode每日一题系列
  5. Linux终端操作MySQL常用命令
  6. .NET 4.5 Task异步编程学习资料
  7. 图神经网络(一)图信号处理与图卷积神经网络(5)图卷积神经网络
  8. U3D 脚本添加和获得对象
  9. 开源无收入,全职开源仍是少数,企业开源成热门,开发者正在见证开源历史
  10. 引用css样式时,一个class引用两个样式的写法( class=ico001 icoCom)。
  11. 如何让大数据分析更有效
  12. call stack是什么错误_17.2 错误处理
  13. java数据清洗_数据清洗例子
  14. EndNote添加其他参考文献格式教程
  15. 精通 Python OpenCV4:第一部分
  16. 郭盛华:揭秘多年来黑客入侵iPhone的情况
  17. 解决桌面图标左下角蓝色问号问题
  18. 怎样在for循环变量中,将循环变量赋值给一个变量 批处理 bat
  19. 有关数据包拓展基础知识
  20. UVa 1618 弱键(Weak Key)

热门文章

  1. MFC 判断网络通断IsNetworkAlive
  2. OmniVision 2017产品发布会要点整理
  3. 取得鼎新Workflow ERP系统产品结构BOM明细的SQL语句
  4. 一键关闭windows防火墙_Windows防火墙与网络设备拦截软件数据包案例记录!
  5. bios设置u盘启动重装系统教程
  6. UML diagrams
  7. 【Docker-compose Mysql 主从】
  8. 月薪 60k*16薪,看看人家的项目经验和技术能力...,绝了!
  9. 闪存测试带你“看透”长江存储 TLC!
  10. (转)最新谷歌浏览器无法启用扩展程序问题