发布时间:2026/8/28 18:39:54
私有资源认证 一、 架构设计与请求流转核心流程图客户端(浏览器)│ ▼(1. 请求受保护资源 /secure/data.pdf 或 /api/user/info)┌─────────────────────────────────────────────────────┐ │ Nginx(反向代理静态资源服务器)│ │ ├─(2)拦截请求发起内部子请求(auth_request)│ │ │ └─转发至 /_auth(携带 Cookie/Token, 原始URI)│ │ │ │ │ ├─(3)接收 Spring Boot 鉴权结果 │ │ │ ├─200OK: 提取用户信息放行请求 │ │ │ ├─401Unauthorized: 重定向到登录页或返回401 │ │ │ └─403Forbidden: 返回无权限页面 │ │ │ │ │ └─(4)鉴权通过将请求转发给后端业务服务或返回静态文件│ └─────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────┐ ┌─────────────────────────┐ │ Spring Boot(鉴权服务)│ │ Spring Boot(业务服务)│ │ - 校验 Token/JWT │ │ - 直接读取 Nginx 传来的 │ │ - 校验 URL/RBAC 权限 │ │ X-User-Id 等 Header │ │ - 返回200/401/403 │ │ - 无需再解析 Token │ └─────────────────────────┘ └─────────────────────────┘二、 Nginx 生产级配置在生产环境中Nginx 配置需要处理凭证传递、原始 URI 传递、错误重定向、以及跨域预检OPTIONS放行。. --with-http_auth_request_module 添加auth模块# 定义上游服务upstream auth_backend{server127.0.0.1:8080;# Spring Boot 鉴权服务keepalive64;# 生产环境必须开启长连接降低子请求延迟}upstream biz_backend{server127.0.0.1:8081;# Spring Boot 业务服务keepalive64;}server{listen443ssl http2;server_name example.com;# --- 生产环境安全基础配置 ---ssl_certificate /etc/nginx/ssl/example.com.crt;ssl_certificate_key /etc/nginx/ssl/example.com.key;ssl_protocols TLSv1.2 TLSv1.3;add_header X-Frame-OptionsSAMEORIGINalways;add_header X-Content-Type-Optionsnosniffalways;# 1. 公开资源 (登录页、静态JS/CSS/图片等不走鉴权)location /public/{root /var/www/html;expires 7d;# 强缓存}# 2. 受保护的前端页面或静态资源 (如内部报表、敏感文档)location /secure/{# 开启鉴权子请求auth_request /_auth;# 鉴权失败处理error_page401/public/login.html;# 未登录重定向到登录页error_page403/public/403.html;# 无权限提示页# 【关键】将鉴权子请求返回的用户信息注入到转发给后端的 Header 中auth_request_set$user_id$upstream_http_x_user_id;auth_request_set$user_role$upstream_http_x_user_role;# 如果是代理到后端业务服务传递用户信息proxy_set_header X-User-Id$user_id;proxy_set_header X-User-Role$user_role;# 如果是直接返回静态文件则不需要 proxy_passalias/var/www/secure_files/;}# 3. 受保护的 API 接口location /api/{auth_request /_auth;auth_request_set$user_id$upstream_http_x_user_id;proxy_set_header X-User-Id$user_id;proxy_pass http://biz_backend;}# 4. 核心鉴权子请求接口 (内部隐藏)location/_auth{internal;# 禁止外部直接访问此路径proxy_pass http://auth_backend/api/auth/check;# 生产环境性能优化不传递 Body只传 Headerproxy_pass_request_body off;proxy_set_header Content-Length;# 传递客户端真实 IPproxy_set_header X-Real-IP$remote_addr;proxy_set_header X-Forwarded-For$proxy_add_x_forwarded_for;# 【关键】传递原始请求的 URI 和 Method供 Spring Boot 做细粒度 RBAC 校验proxy_set_header X-Original-URI$request_uri;proxy_set_header X-Original-Method$request_method;# 【关键】传递鉴权凭证 (Cookie 或 Authorization Header)proxy_set_header Cookie$http_cookie;proxy_set_header Authorization$http_authorization;# 保持长连接proxy_http_version1.1;proxy_set_header Connection;}}三、 生产级案例在生产环境中对私有资源认证。server{listen1443ssl;server_name localhost;ssl_certificate../ssl/chat.crt;ssl_certificate_key../ssl/chat.key;ssl_session_cache shared:SSL:1m;ssl_session_timeout 5m;ssl_ciphers HIGH:!aNULL:!MD5;ssl_prefer_server_ciphers on;location/_auth{internal;proxy_pass http://127.0.0.1:8080/auth/check;proxy_pass_request_body off;proxy_set_header Content-Length;proxy_set_header X-Real-IP$remote_addr;proxy_set_header X-Forwarded-For$proxy_add_x_forwarded_for;proxy_set_header X-Original-URI$request_uri;proxy_set_header X-Original-Method$request_method;proxy_set_header Cookie$http_cookie;proxy_set_header Authorization$http_authorization;proxy_set_header Token$http_token;proxy_http_version1.1;proxy_set_header Connection;}location /public{root html;index index.html index.htm;}location /private{set$main_args$args;auth_request /_auth;error_page401/public/index_401.html;error_page403/public/index_403.html;auth_request_set$user_id$upstream_http_x_user_id;auth_request_set$user_role$upstream_http_x_user_role;proxy_set_header X-User-Id$user_id;proxy_set_header X-User-Role$user_role;root html;index index.html index.htm;}}鉴权实现。packagecom.app.sso.user;importcom.app.sso.component.RequestUtil;importlombok.extern.slf4j.Slf4j;importorg.apache.commons.lang3.StringUtils;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RestController;importorg.springframework.web.util.UriComponents;importorg.springframework.web.util.UriComponentsBuilder;importjavax.annotation.Resource;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjava.util.Enumeration;importjava.util.HashMap;importjava.util.Map;/** * author wym13 */Slf4jRestControllerRequestMapping(/auth)publicclassUserAuthController{ResourceprivateRequestUtilrequestUtil;privatestaticfinalStringMSG_MISSING_TOKEN未携带token;privatestaticfinalStringMSG_AUTH_SUCCESS认证成功;privatestaticfinalStringMSG_INVALID_TOKEN无权访问;GetMapping(/check)publicMapString,Objectauth(HttpServletRequestrequest,HttpServletResponseresponse){HashMapString,ObjectresultnewHashMap(2);Stringtokenrequest.getHeader(token);if(StringUtils.isBlank(token)){StringoriginalUrirequest.getHeader(X-Original-URI);if(StringUtils.isNotBlank(originalUri)){try{UriComponentscomponentsUriComponentsBuilder.fromUriString(http://dummyoriginalUri).build();tokencomponents.getQueryParams().getFirst(token);}finally{log.info(originalUri{},queryParamsToken{},originalUri,token);}}}if(StringUtils.isBlank(token)){log.info(鉴权失败token为空, IP{}, URI{},getClientIp(request),request.getRequestURI());response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);result.put(code,HttpServletResponse.SC_UNAUTHORIZED);result.put(msg,MSG_MISSING_TOKEN);returnresult;}else{if(requestUtil.checkToken(token)){response.setStatus(HttpServletResponse.SC_OK);result.put(code,HttpServletResponse.SC_OK);result.put(msg,MSG_AUTH_SUCCESS);}else{response.setStatus(HttpServletResponse.SC_FORBIDDEN);result.put(code,HttpServletResponse.SC_FORBIDDEN);result.put(msg,MSG_INVALID_TOKEN);log.info(鉴权失败token无效, IP{},getClientIp(request));}}returnresult;}// 工具方法获取客户端IPprivateStringgetClientIp(HttpServletRequestrequest){Stringiprequest.getHeader(X-Forwarded-For);if(StringUtils.isBlank(ip)||unknown.equalsIgnoreCase(ip)){iprequest.getRemoteAddr();}returnip;}}

相关新闻

2026/8/28 18:39:54

EMSA凝胶迁移实验技术服务 | 生物素标记法 · 钟鼎生物

什么是EMSA凝胶迁移实验? EMSA(Electrophoretic Mobility Shift Assay,电泳迁移率实验) ,又称凝胶迁移实验或凝胶阻滞实验,是分子生物学领域研究蛋白质与核酸相互作用的经典技术手段。该技术广泛应用于转录…

2026/8/28 18:39:54

蓝桥杯国赛Python备考:从真题分析到高效刷题策略

1. 从“刷题”到“破局”:我的蓝桥杯国赛Python备赛心路最近后台和社群里,问蓝桥杯Python国赛怎么准备的同学特别多。很多人手里攒了一堆真题,但刷来刷去感觉还是原地踏步,遇到新题还是发懵。这感觉我太懂了,当年我也是…

2026/8/28 18:39:54

【全栈开发】----Mysql基本配置与使用

本篇是在已下载Mysql的情况下进行的,若还未下载或未创建Mysql服务,请转到这篇:> > 2024 年 MySQL 8.0.40 安装配置、Workbench汉化教程最简易(保姆级)_mysql8.0.40下载安装教程-CSDN博客本文对于mysql的操作均使用控制台sql…

2026/8/28 19:20:00

基于YOLOv8的香烟包装盒检测:从数据集解析到模型训练部署实战

简介:目标检测是计算机视觉的核心任务之一,旨在定位和识别图像中的物体。其核心原理是通过深度学习模型(如YOLO系列)学习图像特征,并预测物体的边界框和类别。这项技术在自动化、安防、零售等领域具有极高的技术价值&a…

2026/8/28 19:20:00

PN结与三极管工作原理全解析:从单向导电到电流放大

1. 从“单向导电”到“电流放大”:PN结与三极管的逻辑跃迁 很多刚接触电子电路的朋友,一上来就被PN结、三极管这些名词搞得晕头转向。教科书上往往先画一个二极管符号,告诉你它正向导通、反向截止;然后画一个三极管,告…

2026/8/28 19:20:00

langchain如何生成python代码自动数据分析

身处数据驱动的当下时代, 自动进行数据分析已然成了企业以及个人用以提升效率的关键之举。它堪称一种具备强大功能的应用程序框架, 能为构建依托大型语言模型也就是LLM的数据分析应用给予全新的解决办法。本文会详细阐述怎样借助生成代码来达成自动数据分析。一、环境准备首先,…

2026/8/28 19:20:00

机器人不是哪里都能去:具身智能商业化,要先找到那条窄缝

这两年,具身智能行业最常听到的一句话是:机器人可以进入千行百业。 这句话当然没错。 工厂需要机器人,仓库需要机器人,养老院需要机器人,医院需要机器人,商场、园区、矿山、电站、农场、家庭,也…

2026/8/28 19:20:00

两个月做了七八个工具:我用 Python 和 VBA 重新认识办公自动化

在最近两个多来月的时间里, 抽空去感受了一番PY880, 期间基本没怎么有好好休息的时刻。制作了好些个小工具, 感觉就普通办公而言, 现今编程基本不存在技术门槛。做了七八个小项目, 大多是之前做不出来的, 而能做出来的vba部分, 起码也得耗费几倍的时间精力。在郑广学老师的插件…

2026/8/28 19:15:00

物理AI工业落地:一个大脑多种本体的系统解法与工程实践

物理AI是最近一年里绕不开的技术热词。从英伟达在GTC上反复强调“物理AI将理解物理世界”,到各类具身智能、工业机器人和自动驾驶项目涌入市场,热度已经到了不需要再普及概念的程度。但真正到了工业现场,事情就没那么性感了:一个变…

2026/8/28 16:16:17

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/28 16:16:21

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/28 16:16:22

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/28 0:00:34

2026学术工具专业测评|Paperxie全维度性能实测报告[特殊字符]

2026年国内高校毕业论文审核体系全面升级,重复率查重AIGC人工智能检测双检机制正式常态化落地,多所高校明确执行“双项一票否决”制度,重复率超标或AI生成痕迹不达标,均直接取消答辩资格。随着抽检力度加大、学术规范要求升级&…

2026/8/28 0:00:34

凭什么稳居论文工具顶流[特殊字符]Paperxie综合实力深度全解析

2026年论文双检内卷严重,市面上AI论文工具层出不穷,但大多只是单一功能凑数、模板化严重、双检高风险、套路收费。 在一众同质化工具里,Paperxie能长期稳居行业顶流、成为应届生公认毕业神器,从来不是靠营销,而是靠实…

2026/8/28 0:00:34

2026论文工具深度测评|为什么Paperxie是目前最稳的学术工具✅

2026高校论文查重AIGC双检严查常态化。 市面上绝大多数AI论文工具依旧存在明显短板:模板感重、AI痕迹超标、改写毁逻辑、收费套路多、查重不准、格式适配差。 在全网工具普遍“偏科”的现状下,Paperxie凭借全维度均衡实力脱颖而出,成为适配…

2026/8/28 16:16:48

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/28 16:16:50

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/28 11:06:45

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…