Java后端每日面试题(day2)

目录

Session和Cookie的关系


Session和Cookie都可以用来实现跟踪用户状态 ,而二者是关系的:Session的实现依赖于Cookie

  • Session的底层原理:
    1. 当client(浏览器)第1次发起请求并获取session后,服务端在服务器内部创建一个Session对象,并将该session的id以(JSESSIONID=id值)的cookie写回浏览器
    2. 当client(浏览器)二次请求时,会自动携带Cookie(也就是JSESSIONID),服务端根据cookie记录的id值获取相应的Session

Cookie与Session的区别


  • 存储位置不同
    cookie:是针对每个网站的信息,保存在客户端 .
    session:是针对每个用户的,Session中主要保存用户的登录信息,保存在服务器端.
  • 存储数据大小不同
    cookie:一个 cookie存储的数据不超过4K
    session:session存储在服务器上可以任意存储数据, 无大小限制.
  • 生命周期不同
    cookie:cookie可以主动设置生命周期。还可以通过浏览器工具清除.
    session:session的生命周期是间隔的,从创建时开始计时如在30min内没有访问session,那么session生命周期就被销毁。
  • 数据类型不同
    cookie:value只能是字符串类型
    session:value是object类型
  • 安全性不同
    cookie不是很安全 ,别人可以分析存放在本地的cookie并进行cookie欺骗.
    考虑到安全应当使用session。

如何实现Session共享


session共享的原因:维护用户状态、提升用户体验、负载均衡、资源共享。

  1. 一种解决方案是 session 数据持久化.,写入数据库或别的持久层。各种服务收到请求后,都向持久层请求数据。这种方案的优点是架构清晰,缺点是工程量比较大。另外,持久层万一挂了,就会单点失败, 同时它增加了数据库的压力.

  2. 另一种方案是服务器索性不保存 session 数据了,所有数据都保存在客户端,每次请求都发回服务器。JWT 就是这种方案的一个代表。

JWT 由哪些部分组成?


WT (JSON Web Token) 是目前最流行的跨域认证解决方案,是一种基于 Token 的认证授权机制。 是一种规范化之后的 JSON 结构的 Token。

实际的 JWT 大概就像下面这样。

它是一个很长的字符串,中间用点(.)分隔成三个部分。

JWT 的三个部分依次如下。

  • Header(头部) 明文
  • Payload(负载) 明文
  • Signature(签名)

如何防止 JWT 被篡改?


有了签名之后,即使 JWT 被泄露或者截获,黑客也没办法同时篡改 Signature、Header、Payload。

这是为什么呢?因为服务端拿到 JWT 之后,会解析出其中包含的 Header、Payload 以及 Signature 。服务端会根据 Header、Payload、密钥再次生成一个 Signature 。拿新生成的 Signature 和 JWT 中的 Signature 作对比,如果一样就说明 Header 和 Payload 没有被修改。

不过,如果服务端的秘钥也被泄露的话,黑客就可以同时篡改 Signature、Header、Payload 了。黑客直接修改了 Header 和 Payload 之后,再重新生成一个 Signature 就可以了。

密钥一定保管好,一定不要泄露出去。JWT 安全的核心在于签名,签名安全的核心在密钥。

JWT 的特点


  1. JWT 默认是不加密,但也是可以加密的。生成原始 Token 以后,可以用密钥再加密一次。
  2. JWT 不加密的情况下,不能将重要数据写入 JWT
  3. JWT 不仅可以用于认证,也可以用于交换信息。有效使用 JWT,可以降低服务器查询数据库的次数。
  4. JWT 的最大缺点是,由于服务器不保存 session 状态,因此无法在使用过程中废止某个 token,或者更改 token 的权限。也就是说,一旦 JWT 签发了,在到期之前就会始终有效,除非服务器部署额外的逻辑。
  5. JWT 本身包含了认证信息,一旦泄露,任何人都可以获得该令牌的所有权限。为了减少盗用,JWT 的有效期应该设置得比较短。对于一些比较重要的权限,使用时应该再次对用户进行认证.
  6. 为了减少盗用,JWT 不应该使用 HTTP 协议明码传输,要使用 HTTPS 协议传输。
相关推荐
容若只如初见3 小时前
项目实战--Spring Boot + Minio文件切片上传下载
java·spring boot·后端
码农爱java3 小时前
Spring Boot 中的监视器是什么?有什么作用?
java·spring boot·后端·面试·monitor·监视器
Apifox.4 小时前
什么是 HTTP POST 请求?初学者指南与示范
后端·http·学习方法·web
无名指的等待7124 小时前
SpringBoot实现图片添加水印(完整)
java·spring boot·后端
skyshandianxia5 小时前
Java面试八股之如何提高MySQL的insert性能
java·mysql·面试
甜甜圈的小饼干8 小时前
Spring Boot+Vue项目从零入手
vue.js·spring boot·后端
剑圣土豆8 小时前
大模型LLM面试常见算法题-包括Attention和Transformer常见面试题
人工智能·深度学习·算法·自然语言处理·面试·nlp·transformer
我曾遇到一束光8 小时前
Spring boot 更改启动LOGO
数据库·spring boot·后端
tiger_angel9 小时前
springboot集成gzip和zip数据压缩传输-满足2k数据自动压缩(适用大数据信息传输)
大数据·spring boot·后端·数据压缩·压缩数据·压缩传输消息
笔触狂放9 小时前
【Django】网上蛋糕项目商城-关键字搜索,商品详情功能
后端·python·django