前言:

  最近要给自己的网站模板写一个登陆功能,其他功能已经写了一半了,我觉得可以写个登陆整合一下了。

借鉴博客: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做登录那些事(一 分析)的更多相关文章

  1. 谈谈Java的集合组件

    让我们一起谈谈Java的集合组件 我们在使用Java的时候,都会遇到并使用到Java的集合.在这里通过自己的理解和网上的资源对Java的集合方面的使用做一个简单的讲解和总结. Java主要分为3个集合 ...

  2. java单点登录原理与简单实现

    一.单系统登录机制 1.http无状态协议 web应用采用browser/server架构,http作为通信协议.http是无状态协议,浏览器的每一次请求,服务器会独立处理,不与之前或之后的请求产生关 ...

  3. [转] SSO单点登录原理和流程分析

    WEB的登录那些事#### 说道账户登录和注册,其实我们每天都在亲身感受着,像微博.知乎还有简书等等.我们总是需要定期的去重新登录一下,对于这种认证机制,我们都能说出来两个名词,Cookie.Sess ...

  4. 谈谈Java程序员进阶的那些知识和方向

    谈谈Java程序员进阶的那些知识和方向 记得前段时间看过一篇文章谈到一种程序员叫野生程序员,战斗力极强,可以搞定一切问题,但是通常看问题抓不到本质,或者说是google/baidu/stackover ...

  5. 老鸟谈谈JAVA EE的学习

    老鸟谈谈JAVA EE的学习 因为出差和项目的原因,有将近一个月的时间没有更新博客了,今天终于得闲,和兄弟们分享一下JAVA EE的学习心得.书中带过,直入主题,下面我们首先看看什么是JAVA EE. ...

  6. 做一些Spring AOP做过的事,封装 jdk动态代理成为一个黑盒子

      怎么使用eclise 抽取方法,请看  利用eclipse 抽取代码片段为方法   抽取完成之后,还需要 ① 将Collection.class换成  target.getClass(),targ ...

  7. 文《左右c++与java中国的垃圾问题的分析与解决》一bug分析

    文<左右c++与java中国的垃圾问题的分析与解决>一bug分析 DionysosLai(906391500@qq.com) 2014/10/21 在前几篇一博客<关于c++与jav ...

  8. 谈谈java的BlockingQueue

    http://www.cnblogs.com/archy_yu/archive/2013/04/19/3018479.html 博客园 首页 新随笔 联系 管理 随笔- 92  文章- 0  评论- ...

  9. 老李分享:《Java Performance》笔记1——性能分析基础 1

    老李分享:<Java Performance>笔记1——性能分析基础   1.性能分析两种方法: (1).自顶向下: 应用开发人员通过着眼于软件栈顶层的应用,从上往下寻找性能优化的机会. ...

随机推荐

  1. 百度图片objURL解密vb.net版

    Function Baidtu_Uncomplie(k As String) As String Dim c = {"_z2C$q", "_z&e3B" ...

  2. aspx 页面中 js 引用与页面后台的数据交互 --【 后台调用 js 】

    js 中调用后台方法   一.用Response.Write方法 Response.Write("<script type='text/javascript'>alert(&qu ...

  3. 如何在idea中调试spring bean

    步骤 在 Run/Debug Confihuration 中,增加 Application -> local,除去其余配置外,在 Program arguments 一栏添加以下字段:javac ...

  4. Java开发笔记(七十二)Java8新增的流式处理

    通过前面几篇文章的学习,大家应能掌握几种容器类型的常见用法,对于简单的增删改和遍历操作,各容器实例都提供了相应的处理方法,对于实际开发中频繁使用的清单List,还能利用Arrays工具的asList方 ...

  5. JVM 调优参数解释

    典型配置: java -Xmx3800m -Xms3800m -Xmn2g -Xss128k -XX:+UseParallelGC -XX:ParallelGCThreads=20 -XX:+UseP ...

  6. Elasticsearch系列(4):基本搜索

    空搜索 搜索API的最基础的形式是没有指定任何查询的空搜索 ,它简单地返回集群中所有索引下的所有文档,如下命令: GET /_search 返回如下结果: 查询结果解释: 1,hits 返回结果中最重 ...

  7. 生产者消费者C++实现

    #include<string>#include<iostream>#include<process.h>#include<windows.h>#inc ...

  8. MySQL优化特定类型的查询

    优化关联查询 如果想要优化使用关联的查询,我们需要特别留意以下几点: 确保ON或者USING子句中的列上有索引.在创建索引的时候需要考虑到关联的顺序.当表A和表B用列c关联的时候,如果优化器的关联顺序 ...

  9. ES10特性详解

    摘要: 最新的JS特性. ES10 还只是一个草案.但是除了 Object.fromEntries 之外,Chrome 的大多数功能都已经实现了,为什么不早点开始探索呢?当所有浏览器都开始支持它时,你 ...

  10. noi.ac #289. 电梯(单调队列)

    题意 题目链接 Sol 傻叉的我以为给出的\(t\)是单调递增的,然后\(100\rightarrow0\) 首先可以按\(t\)排序,那么转移方程为 \(f[i] = min_{j=0}^{i-1} ...