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 协议传输。
相关推荐
GISer_Jing9 分钟前
2025前端面试热门题目——计算机网络篇
前端·计算机网络·面试
m0_7482455210 分钟前
吉利前端、AI面试
前端·面试·职场和发展
isolusion1 小时前
Springboot的创建方式
java·spring boot·后端
zjw_rp1 小时前
Spring-AOP
java·后端·spring·spring-aop
TodoCoder2 小时前
【编程思想】CopyOnWrite是如何解决高并发场景中的读写瓶颈?
java·后端·面试
凌虚3 小时前
Kubernetes APF(API 优先级和公平调度)简介
后端·程序员·kubernetes
Wyang_XXX3 小时前
CSS 选择器和优先级权重计算这么简单,你还没掌握?一篇文章让你轻松通关面试!(下)
面试
机器之心3 小时前
图学习新突破:一个统一框架连接空域和频域
人工智能·后端
.生产的驴4 小时前
SpringBoot 对接第三方登录 手机号登录 手机号验证 微信小程序登录 结合Redis SaToken
java·spring boot·redis·后端·缓存·微信小程序·maven
顽疲4 小时前
springboot vue 会员收银系统 含源码 开发流程
vue.js·spring boot·后端