# 鉴权框架

cookie 是一种在浏览器上存储数据的技术,通过设置cookie,可以保存一些用户信息。

# session

Session 是一种服务器端技术,用于在服务器上存储用户信息,以便在用户下次访问时能够识别用户身份。Session 的主要作用是保持用户登录状态,防止用户在多次访问网站时需要重新登录。

共享session:把session保存在redis中,所有tomcat服务器都去redis获取session进行验证。

通过tomcat实现 自定义session然后放在redis实现共享session,解决session跨服务器问题 使用spring框架提供的springsession实现共享session

# cookie和session的区别

  1. 存储位置 Cookie:存储在客户端,即用户的浏览器上。 Session:存储在服务器端。服务器为每个用户会话创建一个唯一的Session ID
  2. 存储数据大小 Cookie:由于存储在客户端,其大小受到浏览器和服务器设置的限制,一般不超过4KB(有些浏览器可能限制为3KB或更小)。 Session:存储在服务器端,因此其大小没有直接限制,可以存储更多的数据。但是,过多的Session数据会占用服务器资源,影响性能。
  3. 生命周期 Cookie:生命周期由开发者在创建时设置,可以通过设置expires或max-age属性来指定Cookie的过期时间。如果未设置过期时间,则Cookie默认为会话Cookie,即浏览器关闭时Cookie失效。 Session:生命周期一般比Cookie长,从用户登录开始,直到用户注销或Session超时为止。Session的超时时间通常由服务器设置。
  4. 安全性 Cookie:由于存储在客户端,Cookie的安全性相对较低。如果Cookie中存储了敏感信息,如用户名、密码等,这些信息可能会被用户或恶意软件访问和篡改。因此,通常不建议在Cookie中存储敏感信息。 Session:由于存储在服务器端,Session的安全性相对较高。Session ID只是一个随机生成的字符串,不包含任何敏感信息,且只能通过服务器进行验证和访问。
  5. 使用场景 Cookie:适用于需要在客户端存储少量数据,并且这些数据不需要高度保密的场景,如用户偏好设置、浏览历史记录等。 Session:适用于需要存储大量数据或敏感信息的场景,如用户登录状态、购物车内容等。由于Session存储在服务器端,可以更有效地保护用户数据的安全性和隐私性。

# token

Token 是一种用于身份验证的机制,通过在请求头中携带token来验证用户身份。token可以是一个字符串,也可以是一个加密后的字符串,通过解密后获取用户信息。

通用的解决方案就是cookie+token 由服务端生成token,将用户信息与token进行关联,token返回给浏览器,存储到cookie中。后续请求都携带cooke或者将token从cookie取出以进行参数传递。

# JWT

JWT(JSON Web Token)是一种用于在网络应用环境间传递声明的开放标准(RFC 7519)。该token被设计为紧凑且安全的,以便作为HTTP请求头中传递。JWT由header、payload和signature三部分组成,中间以点(.)分隔。

# shiro

Shiro是一个Java安全框架,提供了身份验证、授权、会话管理、加密、Web支持等功能。

# spring security

Spring Security是一个开源的Java安全框架,提供了身份验证、授权、会话管理、加密、Web支持等功能。