谈谈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).自顶向下: 应用开发人员通过着眼于软件栈顶层的应用,从上往下寻找性能优化的机会. ...
随机推荐
- WLST
Master Note on WebLogic Server Scripting Tool (WLST) Usage, Sample Scripts and Known Issues Deployin ...
- keras & tensorflow 列出可用GPU 和 切换CPU & GPU
列出可用GPU from tensorflow.python.client import device_lib print(device_lib.list_local_devices()) from ...
- React Native基础&入门教程:初步使用Flexbox布局
在上篇中,笔者分享了部分安装并调试React Native应用过程里的一点经验,如果还没有看过的同学请点击<React Native基础&入门教程:调试React Native应用的一小 ...
- 虚拟机安装macos 分辨率不正常修改不了,不能全屏如何解决
1.苹果在OSX 10.11之后启动了一个System Integrity Protection (SIP),这个保护系统防止/library/preferences/systemconfigurat ...
- Linux 环境 Maven 安装&仓源配置
索引: 目录索引 参看代码 GitHub: maven.txt 一.Linux (DeepinOS) 环境 1.官网下载 https://maven.apache.org/download.cgi 2 ...
- Type '' cannot conform to protocol '' because it has requirements that cannot be satisfied
我有一个Objective-C协议,我试图在Swift类中实现.例如: @class AnObjcClass; @protocol ObjcProtocol <NSObject> - (v ...
- windows拿到cmd权限之后常用命令
whoami // 查看当前用户名称 ipconfig // 查看本机ip信息,可加 /all 参数 netstat -ano // 查看端口清况 dir c:\ // 查看目录 typ ...
- Pycharm 消除波浪线
转载:https://blog.csdn.net/youyouran12314/article/details/77719261 Pycharm环境下显示 在代码中显示许多波浪线,查看详情显示Spel ...
- docker容器日志收集方案汇总评价总结
docker日志收集方案有太多,下面截图罗列docker官方给的日志收集方案(详细请转docker官方文档).很多方案都不适合我们下面的系列文章没有说. 经过以下5篇博客的叙述简单说下docker容器 ...
- cesium加载纽约市3dtiles模型
const tileset = new Cesium.Cesium3DTileset({ url: '../../assets/data/NewYork/tileset.json' }); viewe ...