12.9【java exp4】[study]

  • access_by_lua_block:
    • 使用 Lua 脚本进行鉴权操作。
    • local res = ngx.location.capture("/auth/check", { method = ngx.HTTP_GET, args = { token = ngx.var.http_authorization } }):
      • 发送一个 GET 请求到 /auth/check 路径,传递 token 参数,其值为客户端请求中的 Authorization 头部。
    • if res.status ~= 200 then ngx.exit(res.status) end:
      • 如果鉴权服务器返回的状态码不是 200(即鉴权失败),则直接返回鉴权服务器的响应状态码给客户端。

  1. 带有 Bearer Token 的请求:

     

    http

    GET /api/some-endpoint HTTP/1.1 Host: yourdomain.com Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

  2. 带有 Basic Auth 的请求:

     

    http

    GET /api/some-endpoint HTTP/1.1 Host: yourdomain.com Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=

  3. 带有自定义 Token 的请求:

     

    http

    GET /api/some-endpoint HTTP/1.1 Host: yourdomain.com Authorization: CustomToken 1234567890abcdef

解释

  • Authorization 头部:

    • 这个头部用于传递鉴权信息。在 Nginx 配置中,ngx.var.http_authorization 获取的就是这个头部的值。
    • Bearer 是最常见的 JWT(JSON Web Token)格式。
    • Basic 是 Base64 编码的用户名和密码。
    • CustomToken 是自定义的鉴权格式。

浏览器在发送 HTTP 请求时会自动添加一些请求头,主要包括以下几种:
User-Agent: 提供关于浏览器的信息。
Accept: 指定客户端能够处理的内容类型。
Accept-Language: 指定客户端偏好的语言。
Accept-Encoding: 指定客户端支持的压缩编码格式。
Connection: 控制网络连接的持久性(例如,keep-alive 或 close)。
Host: 指定请求的目标主机和端口。
Referer: 指定当前请求的来源页面。
Origin: 指定请求的源域名,主要用于跨域请求。
Cache-Control: 控制缓存行为。
Cookie: 包含与请求相关的 cookie 信息

Next.js 的 Middleware 是一种中间件机制,允许你在请求到达最终的页面或 API 路由之前拦截和处理这些请求。Middleware 可以用于多种用途,包括身份验证、重定向、修改请求头等

主要功能

  1. 请求拦截:可以在请求到达目标路由之前进行拦截,从而执行一些操作。
  2. 身份验证:检查用户是否已登录,并根据结果决定是否继续处理请求或重定向到登录页面。
  3. 重定向:可以根据条件将请求重定向到其他 URL。
  4. 修改请求头:可以在请求中添加、删除或修改请求头信息。
  5. 缓存控制:可以通过设置响应头来控制缓存行为。
  6. 日志记录:记录每个请求的信息,便于调试和分析。

使用场景

  • 访问控制:限制某些页面只能被特定用户访问。
  • 国际化:根据用户的语言偏好自动重定向到相应的语言版本。
  • 性能优化:通过缓存策略减少服务器负载。
  • 安全性增强:防止恶意请求和攻击。

如何使用

要在 Next.js 中使用 Middleware,你需要创建一个名为 _middleware.js_middleware.ts 文件,并将其放在你想要应用 Middleware 的目录下(例如,在根目录下的 _middleware.js 将应用于所有请求)。

{ ...options, headers }:
这是一个对象字面量,用于配置 fetch 请求的各种选项。
...options:
...options 是对象展开运算符,它将 options 对象的所有属性复制到新的对象中。
例如,如果 options 是 { method: 'POST', body: JSON.stringify({ key: 'value' }) },那么 ...options 会将这些属性展开到新对象中。
headers:
headers 是一个 Headers 对象,包含了请求头信息。
通过这种方式,你可以确保 headers 对象中的所有头部信息都被添加到请求中。
如果 options 对象中已经有一个 headers 属性,那么 headers 对象会覆盖 options 中的 headers 属性。

{ ...options, headers } 会展开 options 对象的所有属性,并添加或覆盖 headers 属性。
最终的对象将类似于:

     {
         method: 'POST',
         body: '{"key":"value"}',
         headers: Headers {
             'Content-Type': 'application/json',
             'Authorization': 'Bearer your-jwt-token'
         }
     }
     

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/492384.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Electron-Vue 开发下 dev/prod/webpack server各种路径设置汇总

背景 在实际开发中,我发现团队对于这几个路径的设置上是纯靠猜的,通过一点点地尝试来找到可行的路径,这是不应该的,我们应该很清晰地了解这几个概念,以下通过截图和代码进行细节讲解。 npm run dev 下的路径如何处理&…

devops和ICCID简介

Devops DevOps(Development 和 Operations 的组合)是一种软件开发和 IT 运维的哲学,旨在促进开发、技术运营和质量保障(QA)部门之间的沟通、协作与整合。它强调自动化流程,持续集成(CI&#xf…

[HNCTF 2022 Week1]baby_rsa

源代码: from Crypto.Util.number import bytes_to_long, getPrime from gmpy2 import * from secret import flag m bytes_to_long(flag) p getPrime(128) q getPrime(128) n p * q e 65537 c pow(m,e,n) print(n,c) # 62193160459999883112594854240161159…

12.19问答解析

概述 某中小型企业有四个部门,分别是市场部、行政部、研发部和工程部,请合理规划IP地址和VLAN,实现企业内部能够互联互通,同时要求市场部、行政部和工程部能够访问外网环境(要求使用OSPF协议),研发部不能访问外网环境…

生态学研究中,森林生态系统的结构、功能与稳定性是核心研究

在生态学研究中,森林生态系统的结构、功能与稳定性是核心研究内容之一。这些方面不仅关系到森林动态变化和物种多样性,还直接影响森林提供的生态服务功能及其应对环境变化的能力。森林生态系统的结构主要包括物种组成、树种多样性、树木的空间分布与密度…

springboot445新冠物资管理(论文+源码)_kaic

摘 要 使用旧方法对新冠物资管理的信息进行系统化管理已经不再让人们信赖了,把现在的网络信息技术运用在新冠物资管理的管理上面可以解决许多信息管理上面的难题,比如处理数据时间很长,数据存在错误不能及时纠正等问题。这次开发的新冠物资管…

1.zabbix概述

一、什么是监控 我们的生活里,离不开监控,监控能够最大程度上,发挥如下作用 实时监测,即使你不在电脑前,也能实时掌握监控区域情况,提高工作效率事后录像查询,如果不法事件未能即使发现制止&am…

QT绘图【点】【线】【圆】【矩形】

目录 1. 绘制点、线、圆、文本、矩形3. 调用及更新 1. 绘制点、线、圆、文本、矩形 QPainter painter(this); //实例化绘图 QPen pen(QColor(255,100,155)); //创建绘图工具(画笔) pen.setWidth(2); //画笔宽度 pen.setStyle(Qt::SolidLine); //实线…

知识分享第三十天-力扣343.(整数拆分)

343 整数拆分 给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。 示例 1: 输入: 2 输出: 1 解释: 2 1 1, 1 1 1。 示例 2: 输入: 10 输出: 36 解释: 10 3 3 4, 3 3 4 36。 说明: 你可…

NSDT 3DConvert:高效实现大模型文件在线预览与转换

NSDT 3DConvert 作为一个 WebGL 展示平台,能够实现多种模型格式免费在线预览,并支持大于1GB的OBJ、STL、GLTF、点云等模型进行在线查看与交互,这在3D模型展示领域是一个相当强大的功能。 平台特点 多格式支持 NSDT 3DConvert兼容多种3D模型…

USACO备考书籍合集

USACO,全称United States of America Computing Olympiad,即美国计算机奥林匹克竞赛。 以下是网上查到的关于USACO(美国计算机奥林匹克竞赛)的推荐书籍: 一、国内推荐书籍 有一种观点,冲击USACO铂金&…

汽车IVI中控开发入门及进阶(三十八):HiCar开发

手机投屏轻松实现手机与汽车的无缝连接,导航、音乐、通话等功能应有尽有,还支持更多第三方应用,让车载互联生活更加丰富多彩。 HiCar在兼容性和开放性上更具优势。 手机投屏可以说是车机的杀手级应用,大大拓宽了车机的可用性范围。其中华为推出的HiCar就是非常好用的一种。…

iOS - 超好用的隐私清单修复脚本(持续更新)

文章目录 前言开发环境项目地址下载安装隐私访问报告隐私清单模板最后 前言 在早些时候,提交应用到App Store审核,大家应该都收到过类似这样的邮件: Although submission for App Store review was successful, you may want to correct th…

CSS边框的样式

边框阴影 让元素更有立体感 img {box-shadow: 2px 10px 5px 20px #ff0000;border-radius: 44px;}语法:box-shadow:值1 值2 值3 值4 值5 值1:水平阴影的位置值2:垂直阴影的位置值3:模糊距离值4:阴影的尺寸…

UE5 物体自动跟随主角镜头转向

A、思路 Tick,设置物体世界旋转 旋转数值源于物体自身位置与玩家摄像机位置的差值 效果是物体自动转向,玩家镜头动,则物体也随之调整角度。 适合一些提示文字,如按键提示、帮助之类。 B、参考图

C 语言数据类型详解

目录 一、引言 二、基本数据类型 (一)整型 (二)浮点型 (三)字符型 三、构造数据类型 (一)数组 (二)结构体 (三)联合体&#…

《通信电子电路》入门手册

因为大学这门课好多同学理解不了这门课 于是考完试后花了两天时间整理了这份笔记,在这分享给完全没有学懂这门课的同学,也帮助“理解概念才能学得进去”的同学入门 笔记:通信电子电路 入门手册 —— flowus笔记 对应:《通信电子…

vscode远程服务器运行Jupyter文件时一直无法运行

问题: 在vscode运行jupyter时一直让我选择python版本,选择了之后又没有反应,如下所示: 原因: 服务器上没有安装Jupyter;解决: 运行pip install jupyter 进行安装(或者其他的方式也可…

鸿蒙项目云捐助第十七讲云捐助我的页面上半部分的实现

鸿蒙项目云捐助第十七讲云捐助我的页面上半部分的实现 在一般的应用app中都会有一个“我的”页面,在“我的”页面中可以完成某些设置,也可以完成某些附加功能,如“修改密码”等相关功能。这里的鸿蒙云捐助也有一个“我的”功能页面。这里对“…

网络安全(3)_安全套接字层SSL

4. 安全套接字层 4.1 安全套接字层(SSL)和传输层安全(TLS) (1)SSL/TLS提供的安全服务 ①SSL服务器鉴别,允许用户证实服务器的身份。支持SSL的客户端通过验证来自服务器的证书,来鉴别…