谈谈java做登录那些事(一 分析)
前言:
最近要给自己的网站模板写一个登陆功能,其他功能已经写了一半了,我觉得可以写个登陆整合一下了。
借鉴博客:https://www.cnblogs.com/moyand/p/9047978.html
先来说说登陆流程(简化):
客户端(输入账户密码)————》服务器端接收到账户密码(参数验证正确)————》响应回给客户端
出现了一个问题:登陆页面登陆成功了是没问题,但其他页面的接口我怎么知道正在浏览网站的人登没登陆成功?因为有些页面是要给登陆之后的用户看的,没登陆的用户不能看,所以整个网站每个页面都要做是否登陆处理,那么拦截器就用到了(好了,拦截器先按下不表)。
有以下几种方法来处理是否登陆验证问题:
1、cookie
cookie是在服务器上生成,发送给客户端浏览器,然后浏览器把cookie以k,v格式保存到客户端某个目录下的文件内。
具体实现是这样的:
客户端传入账户密码参数,服务器端login接口验证参数,账户密码都正确,把userId或一些登陆成功后用户的信息存到cookie中返回给浏览器,浏览器保存在本地文件。然后客户端访问其他页面url,再将该cookie的信息发送给服务器,服务器再来检验此cookie里面的信息,来判断用户是否登陆。
弊端:(那么问题来了)
1、单个cookie保存的数据不能超过4k,很多浏览器都限制一个网站最多保存20个cookie
2、安全隐患:cookie里面的信息使用明文传输,如果cookie被人拦截,就可以拿到cookie里面的信息。就算cookie里面的信息加了密,人家直接将cookie里的信息直接请求接口也是一样的。别人还可以从本地保存的cookie的文件里拿cookie信息
3、有些浏览器会禁用cookie或不支持cookie
2、session
具体实现跟cookie一样,只是把登陆信息放session里。
弊端:
1、session是保存在服务器上的,人数访问量一多,服务器性能就下降了。
2、web服务器做负载均衡,下一个请求到另一台服务器时session就会丢失。
3、token(令牌)
token从字面意思就能理解,令牌嘛就像一个身份证ID。
具体实现:
1、账户密码验证正确后,生成一个加密的token字符串,然后把token返回给客户端。(一个简单的token算法:userId + time(当前时间戳) + sign(签名),然后再用加密算法生成一个十六进制的字符串,加密token是为了防止别人拼接token请求服务器)。
2、然后,浏览器收到返回的token之后,把token存储在Local Storage中(通过js代码写入Local Storage,要用的时候再用js获取,并不会像cookie一样自动携带)。
3、当浏览器登录后再访问其他的页面,请求url的时候会把token参数传过来,服务器对传来的token参数解密,匹配token中的令牌是否正确,正确则通过认证。
4、这样就解决了session的弊端,不用去考虑用户在哪台服务器登录。
(目前打算使用redis,把一些要登陆验证的参数放redis里面)
使用token可以用:JWT插件
谈谈java做登录那些事(一 分析)的更多相关文章
- 谈谈Java的集合组件
让我们一起谈谈Java的集合组件 我们在使用Java的时候,都会遇到并使用到Java的集合.在这里通过自己的理解和网上的资源对Java的集合方面的使用做一个简单的讲解和总结. Java主要分为3个集合 ...
- java单点登录原理与简单实现
一.单系统登录机制 1.http无状态协议 web应用采用browser/server架构,http作为通信协议.http是无状态协议,浏览器的每一次请求,服务器会独立处理,不与之前或之后的请求产生关 ...
- [转] SSO单点登录原理和流程分析
WEB的登录那些事#### 说道账户登录和注册,其实我们每天都在亲身感受着,像微博.知乎还有简书等等.我们总是需要定期的去重新登录一下,对于这种认证机制,我们都能说出来两个名词,Cookie.Sess ...
- 谈谈Java程序员进阶的那些知识和方向
谈谈Java程序员进阶的那些知识和方向 记得前段时间看过一篇文章谈到一种程序员叫野生程序员,战斗力极强,可以搞定一切问题,但是通常看问题抓不到本质,或者说是google/baidu/stackover ...
- 老鸟谈谈JAVA EE的学习
老鸟谈谈JAVA EE的学习 因为出差和项目的原因,有将近一个月的时间没有更新博客了,今天终于得闲,和兄弟们分享一下JAVA EE的学习心得.书中带过,直入主题,下面我们首先看看什么是JAVA EE. ...
- 做一些Spring AOP做过的事,封装 jdk动态代理成为一个黑盒子
怎么使用eclise 抽取方法,请看 利用eclipse 抽取代码片段为方法 抽取完成之后,还需要 ① 将Collection.class换成 target.getClass(),targ ...
- 文《左右c++与java中国的垃圾问题的分析与解决》一bug分析
文<左右c++与java中国的垃圾问题的分析与解决>一bug分析 DionysosLai(906391500@qq.com) 2014/10/21 在前几篇一博客<关于c++与jav ...
- 谈谈java的BlockingQueue
http://www.cnblogs.com/archy_yu/archive/2013/04/19/3018479.html 博客园 首页 新随笔 联系 管理 随笔- 92 文章- 0 评论- ...
- 老李分享:《Java Performance》笔记1——性能分析基础 1
老李分享:<Java Performance>笔记1——性能分析基础 1.性能分析两种方法: (1).自顶向下: 应用开发人员通过着眼于软件栈顶层的应用,从上往下寻找性能优化的机会. ...
随机推荐
- [PHP] foreach循环的引用赋值可能导致的问题
foreach($arr as &$value)1.引用赋值符号&,是每次循环的时候,把当前元素变成地址,$value变量就是对应元素的地址,循环结束$value是一个指向最后一个元素 ...
- mysql 随机数 rand使用
生成随机数 生成0-3的随机数 SELECT RAND() * 最大不会超过3, SELECT FLOOR(RAND() * ) 上面生成整数的值是0,1,2,3生成的随机整数是1,2,3的话,语句如 ...
- IOS自带输入法中文不触发KEYUP事件导致vue双向绑定错误问题
先上图: 可以看到输入框中的内容和弹出框的内容不一致, <input class="am-fr labRight" id="txcode" type=&q ...
- Linux系统启动详解
系统启动流程 通过下图认识下Linux系统的总体启动流程. BIOS BIOS一般负责检查硬件和查找启动设备. MBR:Boot Code MBR只是一段引导代码,真正的引导是由引导程序去执行的. G ...
- 聊聊 API Gateway 和 Netflix Zuul
最近参与了公司 API Gateway 的搭建工作,技术选型是 Netflix Zuul,主要聊一聊其中的一些心得和体会. 本文主要是介绍使用 Zuul 且在不强制使用其他 Neflix OSS 组件 ...
- 无依赖简单易用的Dynamics 365实体记录数计数器并能计算出FetchXml返回的记录数
本人微信公众号:微软动态CRM专家罗勇 ,回复278或者20180812可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me . 我们 ...
- 【资源分享】ArcFace Demo [Android]
虹软人脸识别引擎Android的Demo演示,可以直接下载使用. 下载地址: https://github.com/asdfqwrasdf/ArcFaceDemo readme: 工程如何使用? 下载 ...
- CSS3(animation, trasfrom)总结
CSS3(animation, trasfrom)总结 1. Animation 样式写法: 格式: @-浏览器内核-keyframes 样式名 {} 标准写法(chrome safari不支持 @k ...
- kmalloc分配物理内存与高端内存映射--Linux内存管理(十八)
1 前景回顾 1.1 内核映射区 尽管vmalloc函数族可用于从高端内存域向内核映射页帧(这些在内核空间中通常是无法直接看到的), 但这并不是这些函数的实际用途. 重要的是强调以下事实 : 内核提供 ...
- c/c++ linux 进程间通信系列1,使用signal,kill
linux 进程间通信系列1,使用signal,kill 信号基本概念: 软中断信号(signal,又简称为信号)用来通知进程发生了异步事件.进程之间可以互相通过系统调用kill发送软中断信号.内核 ...