当前位置: 首页 > news >正文

做别人一摸一样的网站犯法吗网站制作费计入什么科目

做别人一摸一样的网站犯法吗,网站制作费计入什么科目,宁波网络推广推荐机构,学校官网网页制作一、Spring Cloud Gateway网关的整体架构 Spring Cloud Gateway 是 Spring Cloud 官方推出的网关解决方案#xff0c;旨在替代 Netflix Zuul 1.x。其底层基于 Spring WebFlux Reactor 模型 构建#xff0c;具备响应式、异步非阻塞的高性能特点。 1. 整体架构图 ----------…一、Spring Cloud Gateway网关的整体架构 Spring Cloud Gateway 是 Spring Cloud 官方推出的网关解决方案旨在替代 Netflix Zuul 1.x。其底层基于 Spring WebFlux Reactor 模型 构建具备响应式、异步非阻塞的高性能特点。 1. 整体架构图 -------------Client --- | Netty HTTP | --- Filter Chain --- Route Matching------------- ↓URI Rewrite↓Load Balancer / WebClient↓Target Service2. 核心组件剖析 1. Netty Server底层通信 基于 Spring WebFlux Netty 实现异步非阻塞的请求接入。 Reactor Netty 作为服务器取代 Tomcat使用 NIO 支持高并发处理。 请求通过 HttpServer 接入并封装为 ServerWebExchange 对象。 2. Route路由定义 核心配置单位决定请求的转发目标。 路由配置组成 spring:cloud:gateway:routes:- id: my-routeuri: http://localhost:8081predicates:- Path/api/**filters:- AddRequestHeadertoken, my-token路由核心类 Route: 单个路由对象包含 id、uri、predicate、filter 等信息。 RouteDefinition: YAML 或 Java DSL 中定义的原始配置。 RouteLocator: 路由查找器默认实现是 CachingRouteLocator缓存所有 Route。 3. Predicate断言 用于匹配请求是否符合某个路由。 每个断言是一个实现了 GatewayPredicate 的类底层是 PredicateServerWebExchange。 常见内置断言Path, Method, Header, Host, Query, RemoteAddr 等。 示例 exchange - exchange.getRequest().getURI().getPath().startsWith(/api/)4. Filter过滤器 过滤器链结构 Spring Cloud Gateway 采用 责任链模式 管理所有过滤器。 分为两类 全局过滤器GlobalFilter作用于所有请求如 NettyRoutingFilter, LoadBalancerClientFilter。 局部过滤器GatewayFilter作用于具体的 Route。 核心类 GatewayFilterChain: 核心接口调用 filter(ServerWebExchange, GatewayFilterChain) 方法。 OrderedGatewayFilter: 带排序的过滤器包装类。 FilterDefinition: YAML 中的过滤器配置项。 过滤器执行流程图 Client -- GlobalFilter1 -- GatewayFilterA -- GatewayFilterB -- GlobalFilter2 -- Backend内置过滤器示例 AddRequestHeaderGatewayFilterFactory RewritePathGatewayFilterFactory HystrixGatewayFilterFactorySpring Cloud CircuitBreaker 5. ServerWebExchange上下文封装 封装请求 (ServerHttpRequest) 和响应 (ServerHttpResponse)。 贯穿整个生命周期类似于 Servlet 中的 HttpServletRequest/Response。 6. 转发请求NettyRoutingFilter 或 LoadBalancerClientFilter NettyRoutingFilter: 默认将请求转发给目标 URI。 LoadBalancerClientFilter: 在 URI 为 lb:// 时调用注册中心负载均衡集成 Ribbon、Spring Cloud LoadBalancer。 示例 // 基于 WebClient 发起转发请求WebFlux 非阻塞客户端 webClient.method(request.getMethod()).uri(targetUri).headers(httpHeaders - ...).exchange()3. 执行流程详解 请求处理核心流程 Step 1: Netty 接收请求并生成 ServerWebExchange Step 2: RouteLocator 匹配路由 Step 3: 断言 Predicate 判断是否命中路由 Step 4: 构造过滤器链全局 路由 Step 5: 执行 GatewayFilterChain Step 6: 最终由 NettyRoutingFilter 或 LoadBalancerClientFilter 发起转发 Step 7: 响应回传至客户端4. 响应式编程模型核心基础 Spring Cloud Gateway 是基于 Reactor 模型构建响应式、非阻塞、背压友好。 Filter 链通过 Mono.defer(() - filter(...)).then(...) 串联。 所有逻辑必须是非阻塞否则会违背设计初衷导致性能问题。 5. 扩展点 扩展点接口或类说明自定义断言RoutePredicateFactory继承 AbstractRoutePredicateFactory自定义过滤器GatewayFilterFactory继承 AbstractGatewayFilterFactory自定义全局过滤器GlobalFilter直接实现即可动态路由注册实现 RouteDefinitionLocator 接口支持 Nacos、数据库等动态配置自定义负载均衡策略ReactiveLoadBalancerSpring Cloud LoadBalancer 接口 6. 与 Spring 生态集成 注册中心集成通过 Spring Cloud DiscoveryClient LoadBalancerClientFilter 实现服务名解析。 熔断限流结合 Sentinel、Resilience4j、RateLimiter内置 TokenBucket 限流器实现。 链路追踪集成 Sleuth自动注入 TraceId 进入 header。 认证鉴权通过局部或全局过滤器在 Filter 中实现 JWT 校验、权限认证。 7. 性能优势 特性Spring Cloud Gateway 优势异步非阻塞基于 Reactor 模型比 Zuul 1.x 阻塞式性能更优支持服务发现与 Spring Cloud 原生集成灵活可扩展Filter 和 Predicate 都易于扩展强大配置能力基于 YAML/Java DSL 路由配置能力 8. 底层与 Zuul 对比 对比项Spring Cloud GatewayNetflix Zuul 1.x编程模型响应式WebFlux阻塞Servlet性能高并发、低延迟适中路由配置方式灵活支持 PredicateFilter相对单一可扩展性非常强一般 二、深入剖析断言Predicate Spring Cloud Gateway 中的 断言Predicate 是路由匹配的核心机制之一作用是判断当前请求是否满足条件是否应该命中该路由。断言具备强大的表达能力底层通过组合式 Predicate 实现。 1. 断言Predicate概念简述 本质是 PredicateServerWebExchange判断当前请求上下文是否满足某些规则。 每个路由可以配置多个断言必须全部通过才会命中路由逻辑与关系。 断言通过配置文件或 Java DSL 配置最终转为 RoutePredicateFactory 执行逻辑。 2. 核心断言分类内置 PredicateFactory Spring Cloud Gateway 提供了丰富的内置断言工厂可扩展。下面按功能分类剖析它们的参数和底层实现 1. Path 断言 功能基于请求路径进行匹配。 配置示例 predicates:- Path/api/v1/**,/admin/**参数解析 接收一个或多个 Ant 风格路径。 支持通配符 * 和 **。 会自动与 Request.Path 比较。 底层类 PathRoutePredicateFactory 实现 apply(Config config) 返回 exchange - pathMatcher.match(pathPattern, requestPath) 2. Method 断言 功能匹配 HTTP 方法。 配置示例 predicates:- MethodGET,POST底层类MethodRoutePredicateFactory 参数说明 枚举形式传入如 GET、POST、PUT、DELETE 等。 会转换为 HttpMethod 比较 exchange.getRequest().getMethod()。 3. Header 断言 功能匹配请求头信息。 配置示例 predicates:- HeaderX-Request-Id, ^[0-9]$参数说明 第一个参数为请求头 key第二个为正则表达式。 正则匹配请求头的值。 底层类HeaderRoutePredicateFactory 4. Query 断言 功能匹配请求 query 参数。 配置示例 predicates:- Queryversion, ^v1$底层类QueryRoutePredicateFactory 说明 key 是 query 参数名。 value 是正则表达式用于匹配参数值。 5. Host 断言 功能匹配请求中的 Host 头部。 配置示例 predicates:- Host**.example.org底层类HostRoutePredicateFactory 说明 支持通配符*.example.org。 实际读取 Host 头部进行匹配。 6. RemoteAddr 断言 功能基于 IP 地址匹配。 配置示例 predicates:- RemoteAddr192.168.1.0/24底层类RemoteAddrRoutePredicateFactory 说明 支持 CIDR 表达式子网匹配。 注意必须配置 X-Forwarded-For 支持或确保 Netty 获取真实 IP。 7. After / Before / Between 断言基于时间 predicates:- After2025-01-01T00:00:0008:00- Before2025-12-31T23:59:5908:00底层类 AfterRoutePredicateFactory BeforeRoutePredicateFactory BetweenRoutePredicateFactory 说明 ISO-8601 时间格式必须包含时区。 匹配当前请求时间是否在设定时间点之前、之后或区间内。 8. Cookie 断言 predicates:- Cookiesession, ^[a-z0-9]$底层类CookieRoutePredicateFactory 说明 断言某个 Cookie 存在并满足正则匹配。 3. Predicate 参数结构 YAML 配置风格 - Namearg1,arg2,arg3内部通过 Spring Boot 自动绑定为 RoutePredicateFactory.Config 子类。 例如 public class HeaderRoutePredicateFactoryextends AbstractRoutePredicateFactoryHeaderConfig {public static class HeaderConfig {private String header;private String regexp;}public PredicateServerWebExchange apply(HeaderConfig config) {return exchange - {ListString values exchange.getRequest().getHeaders().get(config.getHeader());return values ! null values.stream().anyMatch(v - v.matches(config.getRegexp()));};} }4. 自定义 Predicate 实现 1. 实现类继承方式 继承 public class MyCustomRoutePredicateFactoryextends AbstractRoutePredicateFactoryMyConfig {public PredicateServerWebExchange apply(MyConfig config) {return exchange - {// 自定义判断逻辑return true;};} }2. 配置方式 predicates:- MyCustomconfigValue1,configValue23. 自动注册 只要类名以 RoutePredicateFactory 结尾Spring 会自动注册。 5. 组合断言多断言逻辑与 predicates:- Path/api/**- MethodGET- HeaderX-Auth-Token, .执行顺序按配置顺序逐一判断全部为 true 才匹配成功。 6. 调试技巧与陷阱 问题类型原因或建议路由不匹配断言顺序中某一个未通过时间断言失败时区不一致或格式错误IP 断言无效网关前有代理建议配置 ForwardedHeaderFilter多参数不生效多个 query/header 应用多个断言条目而不是一个断言多个值正则不匹配注意正则表达式要转义避免 YAML 被错误解析 三、深入剖析过滤器Filter 1. 执行总流程概览 Spring Cloud Gateway 请求生命周期 1. 客户端发起请求 2. Netty 接收请求并封装为 ServerWebExchange 3. RouteLocator 查找所有 Route含断言 Predicate 4. Predicate 执行逐个判断全部通过才命中 Route 5. 构建 GatewayFilterChain全局过滤器 路由过滤器 6. 依序执行过滤器链前置逻辑 → 发起请求转发 → 后置逻辑 7. 收到目标服务响应经过过滤器返回响应2. 断言执行原理与顺序 断言是路由匹配的前置条件执行在过滤器构造 之前 ✅ 原理分析 所有 Route 由 RouteLocator 管理比如 CachingRouteLocator。 每个 RouteDefinition 包含一组 PredicateDefinition。 加载时这些断言通过对应的 RoutePredicateFactory 转换为 PredicateServerWebExchange。 网关请求处理器 RoutePredicateHandlerMapping 会将所有路由依次尝试匹配这些 Predicate。 // RoutePredicateHandlerMapping 中的匹配逻辑简化 for (Route route : this.routeLocator.getRoutes()) {if (route.getPredicate().test(exchange)) {return route;} }✅ 顺序与逻辑 按路由在配置文件中定义的顺序查找。 每个路由内部的多个断言为 AND 逻辑所有断言返回 true 才命中。 匹配成功后立即终止查找执行对应的过滤器链。 3. 过滤器执行原理与顺序 过滤器构成了 真正的处理链所有请求响应的处理均由其决定。 ✅ 执行模型 过滤器链使用 责任链模式 构建封装为 GatewayFilterChain。 本质是通过递归调用 filter(exchange, chain) 来串联执行。 public MonoVoid filter(ServerWebExchange exchange) {return filter0(0, exchange); }private MonoVoid filter0(int index, ServerWebExchange exchange) {if (index filters.size()) {return Mono.empty(); // 结束链}GatewayFilter filter filters.get(index);return filter.filter(exchange, e - filter0(index 1, exchange)); }4. 过滤器类型与排序机制 两类过滤器 类型接口应用范围全局过滤器GlobalFilter所有请求局部过滤器GatewayFilterFactory匹配路由 排序机制统一使用 Spring 的 Ordered 接口 过滤器最终封装为 OrderedGatewayFilter具有 getOrder() 值。 数字越小优先级越高先执行。 默认值参考 NettyRoutingFilter: Ordered.LOWEST_PRECEDENCE最后执行实际转发 LoadBalancerClientFilter: 10150 RemoveRequestHeaderFilter: 1 5. 过滤器执行阶段划分 每个过滤器可以分为两个阶段 阶段方法位置功能说明前置处理filter(exchange, chain) 方法前部逻辑修改请求、日志、校验、安全等后置处理chain.filter(exchange).then(...)记录响应日志、处理响应内容等 示例 public MonoVoid filter(ServerWebExchange exchange, GatewayFilterChain chain) {log.info(前置逻辑);return chain.filter(exchange).then(Mono.fromRunnable(() - {log.info(后置逻辑);})); }6. 断言 vs 过滤器的执行顺序对比 执行组件执行阶段是否参与实际请求处理是否可修改请求是否参与响应处理Predicate路由匹配前❌只判断不处理✅间接地❌Filter路由匹配后✅✅✅ ✅ 总结顺序 [1] 路由列表加载 [2] Predicate 按序执行判断是否命中所有断言 AND 关系 [3] 命中后构造 GatewayFilterChain全局 路由 [4] 按 Ordered 排序执行 filter责任链递归调用7. 实战示意图 ------------------- | Client Request | -------------------↓ [RoutePredicateHandlerMapping]↓ [Predicate1] → true [Predicate2] → true↓ 命中路由↓ 构造 Ordered GatewayFilterChain↓ → GlobalFilter1 (order1) → GatewayFilterA (order5) → GatewayFilterB (order10) → LoadBalancerClientFilter (order10150) → NettyRoutingFilter (orderLOWEST)↓ [发起 HTTP 请求]↓ [响应处理 → 倒序执行后置逻辑]8. 调试建议 目的调试方式查看是否匹配路由打印路由断言执行日志或开启 debug 日志查看过滤器执行顺序自定义过滤器实现 Ordered打日志确认链执行顺序排查过滤器不生效检查是否被早期过滤器 short-circuit 或未加到 route 中 9. 补充Spring Gateway 源码关键类 功能类名路由匹配RoutePredicateHandlerMapping断言执行AbstractRoutePredicateFactory 子类路由构建RouteLocator, CachingRouteLocator全局过滤器GlobalFilter 接口路由过滤器GatewayFilterFactory, GatewayFilter过滤器执行链GatewayFilterChain, OrderedGatewayFilter 四、自定义断言和过滤器的实现 1. 自定义断言Route Predicate 1️⃣ 断言作用 断言用于匹配路由规则只有当断言通过时路由才会被选中。 2️⃣ 实现步骤 Step 1创建断言工厂类 必须继承 AbstractRoutePredicateFactoryYourConfig示例只有在早上9点后才允许路由生效 Component public class TimeAfterRoutePredicateFactory extends AbstractRoutePredicateFactoryTimeAfterRoutePredicateFactory.Config {public TimeAfterRoutePredicateFactory() {super(Config.class);}public static class Config {private LocalTime after;public LocalTime getAfter() { return after; }public void setAfter(LocalTime after) { this.after after; }}Overridepublic PredicateServerWebExchange apply(Config config) {return exchange - {LocalTime now LocalTime.now();return now.isAfter(config.getAfter());};}// 可选用于 YAML 参数绑定顺序Overridepublic ListString shortcutFieldOrder() {return List.of(after);} }3️⃣ 使用配置方式 在 application.yml 中 spring:cloud:gateway:routes:- id: time-limited-routeuri: http://localhost:8081predicates:- Path/time/**- TimeAfter09:00:00⚠️ 注意 TimeAfter 对应的是工厂类名去掉 RoutePredicateFactory 后的部分。 参数顺序来自 shortcutFieldOrder() 方法。 2. 自定义过滤器GatewayFilter 1️⃣ 过滤器作用 用于增强请求处理逻辑鉴权、日志、限流、重写路径、头部处理等。 2️⃣ 实现步骤 Step 1创建过滤器工厂类 继承 AbstractGatewayFilterFactoryYourConfig示例记录请求日志 Component public class LogGatewayFilterFactory extends AbstractGatewayFilterFactoryLogGatewayFilterFactory.Config {public LogGatewayFilterFactory() {super(Config.class);}public static class Config {private String baseMessage;private boolean preLogger;private boolean postLogger;// Getter/Setter}Overridepublic ListString shortcutFieldOrder() {return List.of(baseMessage, preLogger, postLogger);}Overridepublic GatewayFilter apply(Config config) {return (exchange, chain) - {if (config.preLogger) {System.out.println([PRE] config.baseMessage 请求路径: exchange.getRequest().getURI());}return chain.filter(exchange).then(Mono.fromRunnable(() - {if (config.postLogger) {System.out.println([POST] 响应码: exchange.getResponse().getStatusCode());}}));};} }3️⃣ 使用配置方式 在 application.yml 中 spring:cloud:gateway:routes:- id: log-filter-routeuri: http://localhost:8081predicates:- Path/log/**filters:- Log访问日志,true,true解释 Log 对应类名 LogGatewayFilterFactory 配置参数顺序由 shortcutFieldOrder 决定 3. 执行顺序说明 路由 → Predicate 判断是否命中 → 构建 GatewayFilterChain GatewayFilterChain 按 Ordered 顺序执行 自定义过滤器可以通过实现 OrderedGatewayFilter 指定优先级 示例设置顺序 return new OrderedGatewayFilter((exchange, chain) - {// filter logic }, 10); // 优先级为 104. 调试技巧 目的方法确认断言是否生效在断言中加日志打印 / 使用 Spring Boot DevTools确认过滤器执行顺序打印日志 设置 Ordered 显式顺序参数绑定失败检查 shortcutFieldOrder() 参数名一致性多个过滤器调试用不同前缀标识并组合多个过滤器调试执行链 5. 小结对比 维度断言Predicate过滤器Filter用途路由选择条件请求/响应增强逻辑执行时机在请求处理链构建之前在请求处理链中间扩展方式继承 AbstractRoutePredicateFactory继承 AbstractGatewayFilterFactory配置方式predicates: - CustomNameval1,...filters: - CustomNameval1,...控制顺序不支持顺序控制都是 AND支持顺序需使用 OrderedGatewayFilter示例用途限定时间、Header、Method、IP 白名单等鉴权、加解密、日志记录、限流、路径重写、CORS 等等 五、自定义过滤器断言组合成拦截器链 1. 核心理念拦截器链的行为建模 在 Gateway 中 拦截器功能对应概念特点匹配请求断言Predicate用于路由匹配条件匹配失败就跳过拦截处理过滤器GatewayFilter支持链式处理、前置、后置逻辑 它们组合使用时形成如下拦截流程 客户端请求↓ 全局过滤器GlobalFilter↓ 断言1 → 不满足则跳过当前Route 断言2 → 不满足则跳过当前Route ... 满足所有断言命中路由↓ GatewayFilter1 → GatewayFilter2 → ...↓ 目标服务URI↓ 响应时倒序执行后置逻辑2. 自定义断言 自定义过滤器组合示例 目标只允许在上午时间段访问 /secure/** 接口并打印日志、添加请求头。 1️⃣ 自定义断言TimeRangeRoutePredicateFactory Component public class TimeRangeRoutePredicateFactory extends AbstractRoutePredicateFactoryTimeRangeRoutePredicateFactory.Config {public TimeRangeRoutePredicateFactory() {super(Config.class);}public static class Config {private LocalTime from;private LocalTime to;public LocalTime getFrom() { return from; }public void setFrom(LocalTime from) { this.from from; }public LocalTime getTo() { return to; }public void setTo(LocalTime to) { this.to to; }}Overridepublic PredicateServerWebExchange apply(Config config) {return exchange - {LocalTime now LocalTime.now();return now.isAfter(config.getFrom()) now.isBefore(config.getTo());};}Overridepublic ListString shortcutFieldOrder() {return List.of(from, to);} }2️⃣ 自定义过滤器AddHeaderAndLogGatewayFilterFactory Component public class AddHeaderAndLogGatewayFilterFactory extends AbstractGatewayFilterFactoryAddHeaderAndLogGatewayFilterFactory.Config {public AddHeaderAndLogGatewayFilterFactory() {super(Config.class);}public static class Config {private String headerName;private String headerValue;}Overridepublic ListString shortcutFieldOrder() {return List.of(headerName, headerValue);}Overridepublic GatewayFilter apply(Config config) {return (exchange, chain) - {System.out.println([前置] 添加Header: config.headerName);exchange.getRequest().mutate().header(config.headerName, config.headerValue).build();return chain.filter(exchange).then(Mono.fromRunnable(() - System.out.println([后置] 响应完成)));};} }3️⃣ 配置使用application.yml spring:cloud:gateway:routes:- id: secure-routeuri: http://localhost:8081predicates:- Path/secure/**- TimeRange08:00,12:00filters:- AddHeaderAndLogX-Request-Source,Gateway3. 执行流程图拦截器链建模 请求 /secure/hello↓ 断言 Path/secure/** ✔ 断言 TimeRange08:00-12:00 ✔↓ 执行过滤器链- AddHeaderAndLog 前置日志 添加请求头- 请求转发- AddHeaderAndLog 后置日志↓ 目标服务响应4. 高阶扩展建议 功能需求处理方式多条件断言组合自定义组合 Predicate 实现或多个 predicate 同时配置动态参数过滤支持 SpEL 或读取配置中心值拦截 鉴权 路由打标将断言 Filter Header 添加等组合构成完整网关管控链多个过滤器组合顺序控制new OrderedGatewayFilter(filter, order) 明确顺序 5. 小结 模块功能说明组合效果断言判断请求是否应被处理路由条件拦截器链头部条件筛选过滤器对匹配的请求执行前后处理逻辑拦截器链的核心执行流程组合条件满足 → 执行链式请求增强类似 Spring MVC 的拦截器链 六、实现基于 Token 的认证逻辑 在 Spring Cloud Gateway 中实现基于 Token 的认证逻辑核心思路是 使用**自定义过滤器GatewayFilter**对请求进行拦截提取 Token → 验签/解析 → 决定是否放行。 场景目标 网关层实现对所有请求的 Token 验证校验失败直接返回 401无需进入下游服务。 1. 技术选型 ✅ 使用 JWTJSON Web Token 作为 Token 格式 ✅ 自定义 GatewayFilter 拦截请求校验 JWT 合法性 ✅ 校验通过 → 继续路由 ✅ 校验失败 → 返回统一错误响应 2. Token 示例JWT eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9. eyJzdWIiOiJ1c2VyMSIsImlhdCI6MTY5MjAwMDAwMCwiZXhwIjoxNjkyMDAzNjAwfQ. Nf8cnRku7k7lDghnK8kluhXbZ1bIsvPrKjD7v4-HqDU3. 自定义 Token 过滤器实现 1. JWT 工具类可使用 jjwt public class JwtUtil {private static final String SECRET_KEY my-secret;public static Claims parseToken(String token) throws JwtException {return Jwts.parser().setSigningKey(SECRET_KEY.getBytes(StandardCharsets.UTF_8)).parseClaimsJws(token).getBody();} }2. 自定义过滤器 TokenAuthGatewayFilterFactory Component public class TokenAuthGatewayFilterFactory extends AbstractGatewayFilterFactoryTokenAuthGatewayFilterFactory.Config {public TokenAuthGatewayFilterFactory() {super(Config.class);}public static class Config {private boolean enabled;}Overridepublic ListString shortcutFieldOrder() {return List.of(enabled);}Overridepublic GatewayFilter apply(Config config) {return (exchange, chain) - {if (!config.enabled) {return chain.filter(exchange);}ServerHttpRequest request exchange.getRequest();String token request.getHeaders().getFirst(HttpHeaders.AUTHORIZATION);if (token null || !token.startsWith(Bearer )) {return unauthorized(exchange, Token missing or malformed);}try {Claims claims JwtUtil.parseToken(token.replace(Bearer , ));// 可将用户信息写入 Header 或请求属性中request exchange.getRequest().mutate().header(X-User-Id, claims.getSubject()).build();return chain.filter(exchange.mutate().request(request).build());} catch (JwtException e) {return unauthorized(exchange, Token invalid: e.getMessage());}};}private MonoVoid unauthorized(ServerWebExchange exchange, String message) {exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);exchange.getResponse().getHeaders().setContentType(MediaType.APPLICATION_JSON);byte[] bytes ({\error\: \ message \}).getBytes(StandardCharsets.UTF_8);return exchange.getResponse().writeWith(Mono.just(exchange.getResponse().bufferFactory().wrap(bytes)));} }4. 配置使用示例 application.yml spring:cloud:gateway:routes:- id: secure-apiuri: http://localhost:8081predicates:- Path/secure/**filters:- TokenAuthtrue5. 认证流程图 请求 /secure/hello→ 进入 Gateway→ 匹配断言 Path/secure/**→ 执行过滤器 TokenAuth→ 从 Header 中提取 Bearer Token→ 校验签名 有效期→ 失败返回 401→ 成功添加用户信息继续路由→ 路由到后端服务6. Token 认证增强建议可选 需求实现建议白名单路径免认证配置 if 条件跳过部分 Path支持 Redis Token 存储Token 可存 Redis 校验时检查有效性如登出或禁用支持权限角色检查claims 中附带 roles → 写入 Header → 后端根据角色判定权限动态开关鉴权application.yml 配置 flag 或使用 Nacos 动态刷新统一异常处理 返回结构配合 GlobalFilter 实现通用异常响应包装逻辑 7. 测试示例 curl -H Authorization: Bearer your-token http://localhost:8080/secure/hello8. 依赖库参考 在 pom.xml 中添加 dependencygroupIdio.jsonwebtoken/groupIdartifactIdjjwt/artifactIdversion0.9.1/version /dependency9. 小结 项目实现组件鉴权入口自定义 GatewayFilterToken 格式JWT签名加密后传递鉴权失败响应自定义 401 输出用户透传将用户信息加入 header 传递下游可组合性可与断言组合使用形成安全控制链
http://www.w-s-a.com/news/504457/

相关文章:

  • 网站建设与管理是干嘛的中国新闻社是什么单位
  • 帮别人做视频剪辑的网站传业做微采商城网站
  • 设计一个网站开发方案宣传片制作企业
  • 新网站收录多少关键词免费一键网站
  • 网页制作与网站建设 在线作业手表网站制作照片
  • 电商网站开发技术与维护重庆建筑工程交易信息网
  • 人和马做的网站线上营销推广方式
  • 青海教育厅门户网站有赞商城
  • 网站建设多语种自动翻译插件wordpress谷歌翻译插件
  • 泰安高级网站建设推广wordpress教程 好看
  • 我自己的网站怎么做关键词优化泰安网站建设dxkjw
  • 平面设计做画册用网站泰州seo平台
  • 申请一个域名后怎么做网站evernote wordpress
  • 网站左侧导航栏设计网站开发后台数据怎么来
  • 临西做网站报价网站建设需要写语句吗
  • 建设网站网站首页购物网站开发代码
  • 淘宝客怎么建立网站网站360优化
  • 安徽建海建设工程有限公司网站网站空间和域名价格
  • 农产品网站建设策划哪里有做枪网站的
  • 更改各网站企业信息怎么做张家港企业网站制作
  • 郑州网站建设咨询银川做网站哪家好
  • 微信网站 微信支付合肥seo排名收费
  • 织梦做的网站如何上线广东省广州市番禺区南村镇
  • 网站设计的导航栏怎么做太原有网站工程公司吗
  • 苏州虎丘区建设局网站如何在一个数据库做两个网站
  • 淘宝天猫优惠券网站建设费用腾讯邮箱企业邮箱登录
  • 深圳福田做网站公司海航科技网站建设
  • 网站降权查询wordpress更换文章背景色
  • 大型电商网站开发金融企业网站建设公司
  • 成都营销型网站建设价格化妆品品牌推广方案