谈谈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).自顶向下: 应用开发人员通过着眼于软件栈顶层的应用,从上往下寻找性能优化的机会. ...
随机推荐
- [Go] 使用go语言解决现代编程难题
1.计算机一直在演化,64核,128核等等,但是我们依旧在使用为单核设计的技术编程2.Go语言让分享自己的代码包更容易3.Go语言重新思考传统的面向对象,提供了更高效的复用代码手段4.Go不仅提供高性 ...
- Guava Cache 本地缓存组件浅析
cache组件中核心的类和接口列举如下: 接口: Cache 本地缓存的顶级接口,提供一些对缓存进行get,put的方法,以及获取缓存统计数据的方法等. LoadingCache 继承了Cache接口 ...
- Java开发笔记(二十九)大整数BigInteger
早期的编程语言为了节约计算机的内存,给数字变量定义了各种存储规格的数值类型,比如字节型byte只占用一个字节大小,短整型short占用两个字节大小,整型int占用四个字节大小,长整型long占用八个字 ...
- 启用WCF压缩提升Dynamics 365 CE的网络性能
摘要: 微软动态CRM专家罗勇 ,回复307或者20190308可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me . 本文系根据微 ...
- 腾讯云服务器 ubuntu 设置允许root用户登录
背景:最近购买了腾讯云服务器,使用了Ubuntu Server 14.04.1 LTS 64位操作系统,腾讯云主机ubuntu系统默认用户名为ubuntu,登录服务器时每一次都是以默认账号ubuntu ...
- SpringBoot 配置 跨域支持
跨域资源共享(CORS,请求协议,请求地址,请求端口三者必须相同才是同一服务器,否则都要进行跨域操作)标准新增了一组 HTTP 首部字段,允许服务器声明哪些源站有权限访问哪些资源.另外,规范要求,对那 ...
- spring学习总结——装配Bean学习四(导入和混合配置)
情景:在典型的Spring应用中,我们可能会同时使用自动化和显式配置(JavaConfig)或者XML配置,幸好在Spring中,这些配置方案都不是互斥的.你尽可以将JavaConfig的组件扫描和自 ...
- JavaScript(三)数据类型转换
类型转换JavaScript中的取值类型非常灵活,如当JavaScript期望使用一个布尔值的时候,你可以提供其它数据类型的,JavaScript将根据需要自行转换数据类型.如下示例: 10 + “o ...
- jquery datatable 实例操作
var dataTables = $(".table").dataTable({ data: d,//为ajax的值,没有直接用插件自带的请求数据方式,个人觉得data的方式好控制 ...
- 持续代码质量管理-SonarQube Scanner部署
1. SonarQube Scanner地址 上一篇文章我们安装了SonarQube-7.3,让我们可以在页面查看代码质量.但是具体的扫描工作则需要SonarQube Scanner完成. 下载页面 ...