首页 > 其他分享 >JWT登录认证-项目BotBattle

JWT登录认证-项目BotBattle

时间:2024-03-19 20:33:21浏览次数:26  
标签:浏览器 请求 登录 BotBattle JWT SessionID 认证 Token

目录

实现目标:在没有判断登录认证的情况下,访问任意界面,直接跳转到登录界面。

添加Spring Security依赖来实现登录认证

session 授权认证原理

实现config.SecurityConfig

SessionID 相当于给浏览器颁发的一张临时身份证,之后浏览器在执行业务操作的时候,都要随身携带这个身份证。

1.sessionID 生成与保存
login 页面登录成功后,后端生成 SessionID,将其同时保存在后端数据库与浏览器的 Cookie 中
2.sessionID 和请求一起传送给后端
每次向后端 Springboot 发送请求的同时,会从 Cookie 中取出将 SessionID 一起传送给后端 Springboot。Springboot 通过向数据库查询判断当前 SessionID 是否存在以及是否过期


  • PS:后端查询判断
    如果存在,将有关 SessionID 的信息(包括对应的用户名、过期时间)从数据库中取出,判断是否过期。
    若 SessionID 过期或者根本不存在,则返回给用户登录页重新登录。
    若 SessionID 没有过期,则通过 SessionID 与用户信息 userInfo 的映射关系,将对应的 User 提取到上下文中(在 Contoller 中就可以通过一些 API 来拿到 User),成功进行授权页面的访问。

  • 来源 https://gitee.com/XZHongAN

密码存储与加密

config.SecurityConfig类中,实现用户密码的加密存储

放行登录、注册等接口
如果直接用明文密码来存储,需要在数据库中加上{noop}标记,代表不需要加密直接判断

  • BCrypt 是 一种用于密码哈希的安全算法。借助BCryptPasswordEncoderencode()方法更新数据库中的明文密码

  • 要在添加阶段就直接存储加密阶段的代码,用到 PasswordEncoder

jwt(JSON Web Token)验证

对于前后端分离的情况,使用 session 可能会出现跨域问题。
浏览器的同源策略(Same-Origin Policy)限制了来自不同源(即不同的协议、域名或端口)互相之间的某些操作。

想象你住在一个严格管理的小区里(浏览器),而小区有一条规定:你只能和住在同一栋楼里的邻居(同源服务器)自由交流和分享东西(数据请求)。现在,你想要和住在隔壁楼的一个邻居交换东西(跨域请求),但是物业(浏览器的同源策略)不允许你这么做,除非隔壁楼的邻居明确告诉物业,他们愿意接受你,并且确认这次交换是安全的(CORS 策略)。如果你想通过物业的特殊通行证(Cookie)证明你的身份来进行这次交换,物业还需要验证这个通行证是不是也被邻居接受的(允许携带 Cookie 的跨域请求)。在使用 Session 认证时,如果没有正确处理这些安全策略,你就无法成功地和不同楼栋的邻居交换东西了。

比如 Ajax 请求数据。当你的前端应用尝试从一个源向另一个源的服务器发送请求时,就会遇到跨域问题。

JWT 的无状态认证机制

JWT 的 T 是指包含认证信息的 Token。这个 Token 是在用户成功登录后生成的,包含了一系列的声明(Claims),例如用户的 ID、Token 的发行者、过期时间等。

这个 Token 会被服务器数字签名后发送给客户端,客户端随后的每个请求都会携带这个 Token。

服务器通过验证这个 Token 的签名来认证用户的请求,而不需要保存任何用户状态信息。服务器不需要保存任何用户状态信息,也就是“无状态的认证机制”的“无状态”。


jwt 验证的优点

  • 容易实现跨域
  • 不需要在服务器端存储
  • 对于有多个服务器的情况,就可以实现用一个令牌来登录多个服务器

添加依赖:

jjwt-api
jjwt-impl
jjwt-jackson

对于 url 可以分为两大类:

  • 公开可以访问(本项目中,对于登录和注册的 URL,公开可以访问)
  • 需要授权才能访问

实践与调试

实现utils.JwtUtil类,创建、解析 jwt token
实现config.filter.JwtAuthenticationTokenFilter类,用来验证 jwt token 是否合法有效,如果验证成功,则将 User 信息注入上下文中
配置config.SecurityConfig类,放行登录、注册等接口

登录一般是 post 请求。

登录如果是 get 请求,会将用户名和密码参数放在 url 链接中,明文传输。显然不能这样。
选择 Post 请求,就没法从浏览器输入 URL 的方式进行访问,不能在浏览器中调试。有 2 种调试方式

  1. 前端 ajax 调试
  2. 用 postman(以后学习)

对于返回的 token
比如:
"eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI5OWE5ZThjZDNlZDI0OTI3YTZiMWMzNDk5MDU1ZDljMyIsInN1YiI6IjEiLCJpc3MiOiJzZyIsImlhdCI6MTY1ODk3MjYzMCwiZXhwIjoxNjYwMTgyMjMwfQ.iioSQLuAyzpYLPzTgGuhs1ODb6mYIzpqnz6K8VQqbWc"
https://jwt.io/进行解析,可以得到对应的 userID。

标签:浏览器,请求,登录,BotBattle,JWT,SessionID,认证,Token
From: https://www.cnblogs.com/aijisjtu/p/18083892

相关文章

  • 访问数据库-BotBattle项目
    目录访问数据库流程Java框架各层级4层对象的调用流程耦合性与分层访问数据库流程flowchartLR开发人员-->C(连接数据库JDBC)C-->D(MyBatis-Plus映射和执行SQL)D-->E(数据库被访问)flowchartRLA(数据库)--查询结果-->B(MyBatis-Plus)B--将这些数据转换成Java......
  • 身份证文字识别ocr免费-身份证实名认证接口-护照识别-Java调用代码
    文字识别技术是针对图片上的文字进行提取,免去人们手动输入的繁琐。针对证件,翔云提供了身份证识别接口、身份证实名认证接口、护照识别接口,身份证识别接口自动提取身份证信息、身份证实名认证接口实时联网查验身份证的真伪。以身份证识别接口Java语言代码为例,欢迎免费体验:pac......
  • 配置MySQL-项目BotBattle
    目录数据库配置常用操作项目地址:https://github.com/aijisjtu/Bot-BattlegraphLRA[配置数据源]-->B[建立连接]B-->C[执行SQL语句]C-->D[处理结果]D-->E[关闭连接]配置数据源:设置数据库地址、用户名和密码等。建立连接:与数据库服务器建立通信通道......
  • JS前后端交互(1)-项目BotBattle
    目录JS前后端交互交互逻辑图解后端前端JS前后端交互交互逻辑图解后端RequestMapping("/pk/")publicclassBotInfoController{@RequestMapping("getbotinfo/")publicMap<String,String>getBotInfo(){Map<String,String>bot1=newHashMap<>(......
  • HDFSRPC安全认证Kerberos篇推广
    本文主要阐述HDFSRPC安全认证相关的实现。主要介绍Kerberos相关的实现。写在前面相关blog可以先看一下https://segmentfault.com/a/1190000039085046?sort=newesthttps://blog.csdn.net/qq_35995514/article/details/106348765https://blog.csdn.net/S1124654/article/detail......
  • ISIS接口MD5 算法认证实验简述
    默认情况下,ISIS接口认证通过在ISIS协议数据单元(PDU)中添加认证字段,例如:MD5算法,用于验证发送方的身份。ISIS接口认证防止未经授权的设备加入到网络中,并确保邻居之间的通信是可信的。它可以有效地防止路由欺骗和其他恶意攻击。MD5(MessageDigestAlgorithm5)是一种常用的信......
  • 2024年企业架构TOGAF认证培训
    企业架构TOGAF培训简介TOGAF证书介绍企业架构可依据业务战略形成顶层设计,帮助企业形成数字化规划。目前,业界最有名的企业架构框架是TOGAF(TheOpenGroupArchitectureFramework)。TOGAF由国际标准权威组织TheOpenGroup制定。TheOpenGroup于1993年开始应客户要求制定系......
  • 网络实名制接口-GO语言身份核验接口代码-身份证实名认证
    互联网时代,人工识别身份证信息的方式已不适用于当下社会的发展需求,更需要高效精准的科技程序来支持,在线身份证实名认证接口必不可少。翔云身份证实名认证接口,可助力线上平台与消费者信用相关联,建立完善的客户资源与网络用户的管理。翔云身份证实名认证接口,实时联网核验用......
  • C++实名认证接口教程-好集成的身份证实名认证接口-三要素认证
    现如今,随着实名制的实施,各行各业都将进行人员身份的核查,如家政、保洁、物流、金融、电商等,身份证实名认证接口主要是验证个人用户提交的姓名、人像和身份证号码信息,和公安数据库内对应的数据是否匹配一致,可以验证个人身份证信息的真伪。以下是C++语言调用翔云身份证实名......
  • C++实名认证接口教程-好集成的身份证实名认证接口-三要素认证
    现如今,随着实名制的实施,各行各业都将进行人员身份的核查,如家政、保洁、物流、金融、电商等,身份证实名认证接口主要是验证个人用户提交的姓名、人像和身份证号码信息,和公安数据库内对应的数据是否匹配一致,可以验证个人身份证信息的真伪。以下是C++语言调用翔云身份证实名认......