Java 项目实战: 交友项目 - 网关:统一鉴权思路

国际版图文短视频交友系统源码:JAVA多语言商用方案 社交产品的核心竞争力在于内容供给与国际化适配。图文降低创作门槛,短视频提升沉浸体验,两种形态互补才能保证社区活跃度。在国际市场中,多语言、时区、支付和内容合规成为刚性需求,技术架构必须具备灵活的扩展能力。基于JAVA技术栈的微服务架构,配合Spring Boot、MySQL、Redis、Elasticsearch等组件,可实现业务模块解耦、数据高可用与搜索性能优化;采用Kubernetes容器化编排则让多区域部署与弹性伸缩更简单。此类方案适用于面向海外用户的交友社区、内容平台等场景,帮助团队缩短开发周期,降 阅读详情

概述

把 mf-gateway 网关搭起来之后,要解决的问题是:原来散落在每个服务里的 token 校验代码,怎么收拢到网关统一做。这里讲清「鉴权放哪、怎么放行白名单、失败怎么响应」这套思路,完整代码实现见后续的网关统一鉴权代码实现。

纲要

  • 为什么要统一鉴权:N 个服务 N 套拦截器的痛
  • 早期做法:每个 MVC 服务配 TokenInterceptor
  • 演进方向:鉴权上移到网关,后端「信任网关」
  • 网关过滤器的工作原理
  • GlobalFilter:全局过滤器,所有路由的请求都经过
  • 处理流程:读 Authorization 头 → 剥 Bearer 前缀 → JwtUtils.verifyToken → 失败 401 + JSON
  • 白名单:gateway.excludedUrls 配在 yml,@Value 注入 List
  • 响应式编程模型的特殊处理:GlobalFilter 里不能直接 return,要用 ServerHttpResponse + Mono 写响应
  • 保留还是移除后端拦截器:两个选项的取舍(附工程实测结论)
  • 双体系鉴权:一个过滤器管 app 端和 admin 端两套 token

回顾早期的做法:mf-app-server 里写了一个 TokenInterceptor(MVC 拦截器),在 preHandle 里校验 token,失效就返回 401;再写一个 WebConfig 把它注册进 Spring MVC,还要配 excludePathPatterns 放行登录接口。当时只有一个服务,这套写法没什么问题。
但现在服务多起来了。app 端服务要校验用户 token,后台管理服务要校验管理员 token,将来再加一个新服务,就得再来一遍:引 mf-commons 拿到 JwtUtils、写拦截器、写注册配置、维护一份白名单。每个项目都复制一套校验代码,改一次规则就要改 N 个地方。

所以把权限校验的代码抽取出来,放到网关去做:客户端的请求先到网关,网关先做权限校验,校验通过再路由转发。这就是统一鉴权。

用图对比改造前后:

改造后:网关统一拦截

校验通过 路由转发

校验通过 路由转发

校验失败 401

客户端

mf-gateway
AuthFilter 统一校验 token

mf-app-server

mf-admin

请求被拦截,不进入后端

改造前:每个服务各配一套拦截器

客户端

请求分散直达各服务

mf-app-server
TokenInterceptor + WebConfig + 白名单

mf-admin
再写一套 TokenInterceptor

未来新增服务
再复制一套

一套过滤器代码,管住所有进来的请求,这就是收益。

网关过滤器的工作原理

用 GlobalFilter 而不是 GatewayFilter

Spring Cloud Gateway 里定义过滤器有两条路:GatewayFilter 作用于某一条路由,要在路由配置里逐条指定;GlobalFilter 是全局过滤器,所有路由的请求都会经过。统一鉴权显然是全局需求,不管请求是 /app/** 还是 /admin/**,都要过同一道校验,所以实现 GlobalFilter 接口。

同时实现 Ordered 接口,通过 getOrder() 指定执行顺序。网关里可以配多个过滤器(跨域的 CorsWebFilter 就是一个),getOrder() 的返回值决定谁先执行。

处理流程

请求进入网关后,过滤器按四步走:

  1. 取当前请求路径,判断是否在白名单里,在就直接放行转发(登录、验证码接口不需要鉴权);
  2. 从请求头取 token:读 Authorization 头。后台管理页面(vue 工程)发请求时 token 带 Bearer 前缀,需要剥掉;
  3. 校验 token:调用 mf-commons 里的 JwtUtils.verifyToken(token);
  4. 失效就拦截:返回 401 状态码 + JSON 错误信息,请求不再往后走;有效则 chain.filter(exchange) 放行。

是

否

是

否

是

否

客户端请求

进入网关 AuthFilter

路径在 excludedUrls
白名单里?

直接放行 路由转发

Authorization 头
存在且非空?

剥掉 Bearer 前缀

token 为空

JwtUtils.verifyToken
校验通过?

设置 401 状态码
写 JSON 错误响应

响应返回客户端
请求终止

白名单配置化

白名单不是硬编码在过滤器里,而是配在 yml 中,过滤器里用 @Value 注入成 List<String>:

# 自定义配置,定义不需要校验 token 的连接
gateway:
  excludedUrls: /user/login,/user/loginVerification,/system/users/verification,/system/users/login
@Value("${gateway.excludedUrls}")
private List<String> excludedUrls; //需要配置不校验的连接

逗号分隔的字符串会被 Spring 自动绑定成 List<String>。过滤器里一行 excludedUrls.contains(path) 就完成判断。配置化带来的好处很直接:以后新增一个公开接口,改一行配置就行,不用动代码、不用重新编译。

注意白名单的精确匹配:contains(path) 要求路径完全相等,/user/login 能放行,但 /user/login/xxx 或带查询参数的路径放不了行。这是课程方案的简化,够用,但要知道边界在哪。

这份配置在工程里并不在本地 bootstrap.yml,而是放到了 Nacos 配置中心(mf-gateway-prod.yml),路由规则也在那里:

spring:
  cloud:
    gateway:
      routes:
        # 手机端访问
        - id: mf-app-server
          uri: lb://mf-app-server
          predicates:
            - Path=/app/**
          filters:
            - StripPrefix= 1
        # 管理后台
        - id: mf-admin
          uri: lb://mf-admin
          predicates:
            - Path=/admin/**
          filters:
            - StripPrefix= 1
gateway:
  excludedUrls: /user/login,/user/loginVerification,/system/users/verification,/system/users/login

路由按路径前缀分成两条:/app/** 转发到 mf-app-server,/admin/** 转发到 mf-admin,StripPrefix=1 转发前剥掉第一级前缀。

响应式编程模型:为什么不能像拦截器那样写

这是从 MVC 迁移到网关最容易踩的坑。Gateway 基于 WebFlux,是响应式的,编程模型和 MVC 完全不同。

MVC 拦截器的 preHandle 返回 boolean:true 放行,false 拦截,同步阻塞式,想写响应直接操作 response 对象就行。而 GlobalFilter.filter() 返回 Mono<Void>,一个异步的响应式流,没有 boolean 可返回,也没有「同步写完响应再返回」的机会。放行是 return chain.filter(exchange)(把请求交给过滤器链继续传);拦截则要自己往 ServerHttpResponse 里写数据:

ServerHttpResponse response = exchange.getResponse();
// 用 ObjectMapper 把 Map 转成 JSON 字节数组
byte[] data = objectMapper.writeValueAsBytes(responseData);
// 包装成响应式世界的 DataBuffer
DataBuffer buffer = response.bufferFactory().wrap(data);
response.setStatusCode(HttpStatus.UNAUTHORIZED);
response.getHeaders().add("Content-Type", "application/json;charset=UTF-8");
// 用 Mono 把 buffer 写进响应体
return response.writeWith(Mono.just(buffer));

两套编程模型的对照:

对比项MVC 拦截器网关 GlobalFilter
接口HandlerInterceptorGlobalFilter + Ordered
所在技术栈Servlet / Spring MVC(阻塞式)WebFlux / Reactor(响应式)
核心方法preHandlefilter
返回值boolean:true 放行 / false 拦截Mono<Void>:放行返回 chain.filter(exchange)
写响应直接操作 HttpServletResponseServerHttpResponse + DataBuffer + writeWith(Mono)
响应体response.getWriter().write(...)字节转 DataBuffer,包在 Mono.just() 里
拦截语义返回 false 即终止不调用 chain.filter 即终止
理解了「响应式世界没有同步 return」这一点,代码实现就只剩照着流程填空了。

保留还是移除后端拦截器

网关做了校验之后,后端服务里原有的 TokenInterceptor 怎么办?两个选项:

方案做法优点代价
移除后端拦截器校验完全信任网关,服务里不留校验代码最简洁,服务零鉴权代码有服务被绕过网关直连,就完全不设防;服务内部也无法拿到当前用户信息
保留双层网关拦一道,服务内拦截器留一道纵深防御:网关被绕过仍有兜底公共模块和拦截器配置还是得引,代码没有真正减掉

看工程快照的实际做法,后端拦截器保留了,但瘦了身。mf-app-server 的 TokenInterceptor 里,校验 token 并返回 401 的那段代码被注释掉了,只剩下解析 token、把用户信息放进 ThreadLocal 的部分:

public class TokenInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //1、获取请求头
        String token = request.getHeader("Authorization");
        //(校验逻辑已上移到网关:JwtUtils.verifyToken + 401 拦截被注释)

        //解析token,获取id和手机号码,构造User对象,存入Threadlocal
        Claims claims = JwtUtils.getClaims(token);
        String mobile = (String) claims.get("mobile");
        // 数值字段按大小选型:小值反序列化为 Integer,真实雪花 ID(远超 2^31)为 Long,统一按 Object 读取再 toString
        Object idObj = claims.get("id");
        Long id = Long.valueOf(idObj.toString());

        User user = new User();
        user.setId(id);
        user.setMobile(mobile);

        UserHolder.set(user);

        return true;
    }
}

WebConfig 也还在,excludePathPatterns 里的登录接口白名单也还在,它和网关的 excludedUrls 是两份配置,要手动保持一致。

也就是说课程实际采用的是**「校验上移 + 解析下沉」的分工**:

职责执行者
token 是否有效(验签、过期判断)网关 AuthFilter,失败 401
token 里的用户信息解析出来放进 ThreadLocal服务内 TokenInterceptor(降级为解析器)

这个分工是课程的教学简化:业务代码里大量使用 UserHolder.getUserId(),解析逻辑必须留在服务里;而校验逻辑挪到网关后,每个服务少维护一份 401 拦截。但要清楚,严格说这不是完整意义上的纵深防御,后端拦截器里 JwtUtils.getClaims(token) 解析一个无效 token 仍可能抛异常,真正的双层校验应该在服务内也重新验签。生产环境的常见选择是保留双层完整校验,或者走网关透传用户 ID + 服务内网隔离的路线。课程方案理解了取舍,怎么选就是需求问题。

双体系鉴权:一个过滤器管两套 token

系统里有两类身份:app 端用户(手机号登录)和后台管理员(账号密码登录),token 的 claims 内容不同(用户放 id/mobile,管理员放 id/username)。网关是同一个 AuthFilter 统一校验,没有按身份拆过滤器。

隔离靠的是路由前缀 + 白名单:

  • app 端请求走 /app/** 路由,公开接口是 /user/login、/user/loginVerification;
  • admin 端请求走 /admin/** 路由(网关剥前缀后实际路径是 /system/users/...),公开接口是 /system/users/verification、/system/users/login。

四条白名单放两个体系的登录入口,其余请求不分身份一律验签。过滤器只回答「token 有没有效」,不关心「是用户还是管理员」,身份语义由后端各自的拦截器解析。

异常与边界

场景现象处理
请求不带 Authorization 头token 为 nullverifyToken(null) 返回 false,401 拦截
token 过期或被篡改验签失败401 + {"errCode":401,"errMessage":"用户未登录"}
白名单漏配登录接口登录请求也要求 token,登录都进不去,系统直接不可用检查 Nacos 里 excludedUrls 是否包含该路径;这是排障第一入口
白名单多配了路径本该保护的接口裸奔上线前核对白名单清单,白名单只放公开接口
剥 Bearer 前缀遗漏app 端 token 无前缀没问题,vue 后台带 Bearer 的 token 验签必失败统一在过滤器里 replace("Bearer ", "")
响应式写响应编码问题中文错误信息乱码显式设置 Content-Type: application/json;charset=UTF-8,JSON 按 UTF-8 字节写入
直接绕过网关访问后端服务后端只剩解析逻辑,无效 token 解析时抛异常生产环境应限制后端服务仅内网可达,或恢复服务内校验

验证思路

网关起起来、Nacos 配置加载好之后,可以按预期结果逐条验证:

用例操作预期
白名单放行不带 token POST /system/users/login200,正常登录
未登录拦截不带 token GET /app/users/findUserById/1401,响应体含 errCode 401
带有效 token带 Authorization 头访问业务接口200,正常返回数据
带失效 token携带过期或伪造的 token401

注意请求地址要用网关端口(讲义示例 8888,工程 prod 配置为 9997),且路径带 /app、/admin 前缀,所有请求统一从网关进出。具体代码实现与实测过程,见下一篇。

常见误解澄清

误解事实
「GlobalFilter 就是 GatewayFilter 的别名」两者不同:GatewayFilter 作用于单条路由,需在路由里配置;GlobalFilter 对所有路由生效,注册为 Bean 即自动加载
「网关校验后,后端拦截器就该全删」工程里删掉的是校验逻辑,解析逻辑保留(ThreadLocal 依赖它);全删后服务拿不到当前用户
「网关里可以像 MVC 那样 response.setStatus(401); return false;」WebFlux 响应式模型没有这些同步 API,必须用 ServerHttpResponse.writeWith(Mono)
「白名单写在过滤器代码里更安全」写 yml/Nacos 才能不改代码调整;配置变更要走审查,和安全性不冲突
「双重配置(网关 excludedUrls + 拦截器 excludePathPatterns)是冗余 bug」两层各管各的放行:网关拦全局入口,拦截器管服务内注册,课程方案下需手动保持一致

官方文档

总结

  • 统一鉴权的动机:N 个服务各写一套拦截器不可维护,把校验抽到网关做一次,后端「信任网关」。
  • 实现载体是 GlobalFilter + Ordered:全局生效、可排序;流程为白名单判断 → 读 Authorization 头 → 剥 Bearer → JwtUtils.verifyToken → 失败 401 + JSON。
  • 白名单配置化(gateway.excludedUrls + @Value 注入),登录、验证码等公开接口免校验,新增公开接口只改配置。
  • Gateway 是 WebFlux 响应式栈,拦截逻辑用 Mono/DataBuffer 写响应,与 MVC 拦截器的 boolean 模型是两套世界观。
  • 后端拦截器去留的答案在工程里:校验上移网关,解析下沉保留(ThreadLocal),理解这是课程简化,生产可按需恢复双层验签。
  • 一个 AuthFilter 通过 /app/、/admin/ 路由前缀与四条白名单,同时管住用户和管理员两套 token 体系。

下一篇网关:统一鉴权代码实现把 AuthFilter 的完整代码逐行落地并实测。

探花交友平台源码拆解:Spring Boot + Dubbo 微服务架构实战 微服务架构通过将复杂业务拆分为独立服务,解决了单体应用扩展性差、维护成本高的问题。在分布式系统中,服务间高效通信是关键,RPC(远程过程调用)框架应运而生,它屏蔽了网络传输细节,让开发者像调用本地方法一样调用远程服务。Dubbo 作为高性能 Java RPC 框架,结合 Nacos 注册中心实现服务自动发现与配置管理,能够显著提升系统的可维护性和可扩展性。本文以探花交友平台源码为例,深入拆解其基于 Spring Boot 和 Dubbo 的微服务实践,涵盖服务拆分、接口粒度设计、Provider/Consu 阅读详情

相关推荐

社交交友源码解析:双端原生IM与音视频通话架构设计

在移动社交领域,即时通讯(IM)和音视频通话能力是产品体验的基石。从基础概念来看,IM系统需要解决长连接维护、消息可靠传输与服务端时序控制等核心问题,而语音视频通话则涉及信令协商、媒体传输与音频焦点管理等底层机制。理解这些技术原理,有助于评估一套双端原生APP源码的工程价值。在实际业务中,一套完整的陌生人社交解决方案,通常包含用户匹配、实时聊天、一对一通话、直播间互动等多个模块,其架构选型直接决定了后续的扩展成本与运营稳定性。同时,原生开发在音视频性能、Android后台保活及隐私合规方面具备显著优势。无论

weixin_34054931的博客 454

Spring Boot交友平台项目全解析:从数据库设计到部署答辩

Spring Boot 作为 Java Web 工程实践的主流框架,以自动配置和简化部署大幅降低了业务系统搭建门槛。在高校课程设计与毕业设计中,交友平台这类社交类项目因其业务链路完整——涵盖用户注册登录、资料推荐、动态发布、私信聊天和管理后台审核——成为理想的练手场景。实现时可基于 MyBatis-Plus 完成动态条件匹配查询,用 Redis 缓存验证码与登录 Token,结合 JWT 实现无状态鉴权,并通过合理的表结构设计支撑关注、评论、私信等核心关系数据。单体架构足以应对演示规模,部署时可选择 jar

weixin_30231327的博客 225

陌生人视频匹配App源码解析:Java服务端与WebRTC信令实战

在泛娱乐社交应用中,视频匹配是最考验后端并发与实时通信能力的场景之一。其核心并非简单的音视频传输,而是匹配调度、信令交换与状态一致性等系统性问题。Java技术栈凭借成熟的并发处理能力和生态,常被用于构建这类高实时性服务。Redis作为内存数据库,为匹配队列和在线状态提供了毫秒级响应的基础;WebSocket则承担了低延迟信令通道的角色,与WebRTC相结合,才能实现从配对到通话的完整链路。理解这套机制,不仅有助于优化陌生人社交产品的体验,也能为即时通讯系统的工程设计提供参考。本文基于一套Java服务端与An

weixin_31421613的博客 227

Java 项目实战: 交友项目 - SpringCloud 整合 Dubbo 的方案概述

本文探讨Feign与Dubbo整合的必要性与实现路径:针对Feign HTTP+JSON性能瓶颈与Dubbo生态缺失,提出“治理归SpringCloud、调用归Dubbo”的融合策略。核心在于通过dubbo.registry.address=spring-cloud://localhost将注册发现委托给SpringCloud,实现一套注册中心、双框架共用。整合后,服务以SpringCloud身份注册,内部调用采用Dubbo二进制协议,兼顾生态完整与高性能。架构上形成注册走Nacos、调用走Dubbo的双通

Wang的专栏 112

PHP社交圈子系统架构设计与实战:从数据模型到语音直播落地

在社交产品开发中,社区、即时通讯、语音房与语音直播往往被视为独立领域,但一套完整的社交圈子系统需要将它们统一在同一个用户体系与关系链之下。PHP作为成熟的后端语言,在业务承载上具备天然优势,但长连接与高并发场景需借助独立IM服务或云厂商能力。本文从通用社交架构切入,梳理圈子数据建模、内容审核流程、后台权限与审计机制,并针对语音房状态同步、文件上传失败、推送到达率低等典型问题给出工程化解法,最终收敛到多客圈子系统的PHP后台实现思路,为中小型团队搭建类似社交应用提供可落地的参考。

weixin_30430677的博客 261

RL调参侠之BipedalWalker BipedalWalkerHardcore SAC

前几天用PPO训练了个很一般的agent: RL调参侠之BipedalWalker PPO 我看SpinningUp上面说PPO和SAC是两个领域里各自的State_of_the_art的方法,所以就打算跑SAC试试看,之前因为Open AI Five的原因,一直感觉PPO很牛掰,实际上现在很多自动驾驶的算法也是用PPO在跑,毕竟有一个“必定能够提升期望”的理论保证在这里,我理解这对做项目很大的诱惑。 不过我跑出来的结果明显是SAC更好。 调参侠时间 策略熵的权重alpha用的0.2,我一开始没有看SAC的

weixin_48370148的博客 2101

Python征婚系统婚恋交友设计与实现(Pycharm Flask Django Vue mysql)

前台框架:主要采用Vue技术:这是基于整个Python体系设计开发Web的技术,我们利用这一技术可以建立的动态网站是安全、先进并能跨平台。

QQ402205496的博客 1242

基于YOLOv5的隧道衬砌缺陷智能检测系统

计算机视觉在工程检测领域正发挥越来越重要的作用,特别是目标检测技术通过深度学习算法实现了对复杂场景的智能分析。YOLOv5作为当前主流的目标检测框架,通过改进网络结构和训练策略,可以显著提升检测精度和效率。在隧道工程领域,结合通道注意力机制和多尺度特征融合技术,能够有效解决衬砌缺陷识别中的小目标检测难题。这种AI检测系统相比传统人工判读地质雷达图像,不仅将效率提升20倍,还能将识别准确率提高到92.3%,特别适用于3cm以上结构缺陷的自动化检测。系统通过深度可分离卷积等优化,实现了模型轻量化,便于在边缘计算

weixin_29064103的博客 326

Java 项目实战: 交友项目 - Dubbo 简介

本文系统介绍Dubbo作为高性能Java RPC框架的核心原理与应用实践。从RPC基础概念出发,阐明远程调用需解决的“寻址、序列化、结果回传”三大问题,对比HTTP调用在效率与语义上的差异。详述Dubbo的定位——兼具透明远程调用与服务治理能力,并梳理其从阿里内部到Apache顶级项目的演进历程。重点解析其两种典型应用场景:早期SOA拆分中的服务间调用,以及当前与SpringCloud融合以提升微服务间通信效率的实践模式。最后明确二者非替代关系,而是可互补的协同架构,为后续代码落地奠定理论基础。

Wang的专栏 117

uniapp实现app版本发现新版本后,自动更新

app实现自动更新

oldolder的博客 1283

芯片硅前验证技术与驱动工程师实战指南

硅前验证是芯片开发流程中的关键环节,通过pre-silicon simulation等技术手段在流片前验证设计正确性。其核心技术包括软件仿真、FPGA原型验证和硬件仿真器解决方案,涉及Linux驱动开发、芯片架构理解和波形分析等核心技能。作为连接芯片设计与系统集成的桥梁,硅前验证能早期发现设计缺陷,节省数百万美元流片成本。以Cadence Palladium为代表的硬件仿真器,通过专用服务器系统实现比纯软件方案快100-1000倍的仿真速度,为驱动工程师提供完整的外设模型验证环境。掌握硅前验证技术可显著提升

weixin_42522857的博客 324

2026版Java零基础到精通学习路线:保姆级教程+实战项目

Java作为面向对象编程语言的核心代表,其跨平台特性和健壮性使其成为企业级应用开发的主流选择。通过掌握Java基本语法、集合框架和多线程等基础原理,开发者能够构建稳定可靠的后端系统。在微服务架构和云原生趋势下,SpringBoot和SpringCloud等技术栈显著提升了分布式系统的开发效率。结合Docker容器化部署和Redis缓存优化,Java在电商、金融等高并发场景中展现出强大的技术价值。本教程基于黑马程序员官方路线,为零基础学习者提供从Java基础到微服务实战的完整进阶路径,涵盖瑞吉外卖、iHRM人

weixin_33709609的博客 412

DIY天文摄影:如何用NMP溶剂安全去除佳能CMOS传感器的拜耳滤镜(附详细步骤)

本文为天文摄影爱好者提供了一份详尽的DIY指南,介绍如何使用NMP溶剂安全去除佳能CMOS传感器的拜耳滤镜,将其改造为高灵敏度单色相机。文章深入剖析了NMP溶剂的作用原理与关键风险,并系统性地拆解了从材料准备、分步操作到后期验证的完整实践流程,旨在帮助具备动手能力的爱好者实现深空天体摄影的进阶目标。

w3x4y的博客 308

Python基于Vue框架的婚恋相亲交友网站

本课题遵循软件工程开发周期进行,包括需求分析、总体方案制定、详细设计和功能规划、编程实现、调试等;研究方法和研究步骤基本合理,难度适中,本选题是学生所学专业知识的延续,符合学生专业发展方向,对于提高学生的基本知识和技能以及钻研能力有益。该学生能够在预定时间内完成该课题的设计。研究的选题立意明确,结构合理,研究内容充实,研究方法准确有效。前端页面的设计与数据的直观可视化展示。所开的系统能正常运行在所选的平台上,并实现相关模块的功能。

QQ402205496的博客 686

【ArcGIS微课1000例】0118:一文讲清楚tif(geotiff)栅格数据格式

TIFF(Tagged Image File Format)是一种常见的图像文件格式,它被广泛用于存储和传输各种类型的图像数据。图像存储:TIFF格式可以存储多通道的位图图像,包括灰度图、彩色图和透明度图等。它支持不同的像素深度,可以是8位、16位、24位或32位等。因此,TIFF格式非常适合存储高质量的图像数据,包括照片、卫星图像、医学影像等。无损压缩:TIFF格式支持无损压缩,这意味着图像可以被压缩而无需损失任何像素信息。这种压缩方式可以减小文件大小,而不会降低图像的质量。

智慧空间实验室 2822

华为OD机试 - 敌情监控 - 滑动窗口(Java 双机位C卷 200分)

说明 第一行第一个正整数5,表示敌人有5个营地,第二个正整数2,表示连续营地 的数量是2, 第3个正整数3, 表示后续会有3条查询的命令;接下来一行有 5个正整数,分别表示每个营地里开始的人的数,第1个营地开始有1个人,第 2个营地开始有2个人,第3个营地开始有2个人,第4个营地开始有3个人,第 5 个营地开始有3个人;第3条命令:Query 2 4 表示查询第2到第4个营地的总人数,结果:2+8=10 第一个输出是: 10,注意这里第3个营地人数在第2条命令中增加了6。第一行3个正整数:N K L。

学Java,找哪吒 765

视频教程-SpringCloud常用5个组件入门-Java

SpringCloud常用5个组件入门 北京科技大学硕士研究生,北京某教育培...

weixin_34259768的博客 160

AI自动化时代:一人公司的崛起与商业机会

AI技术正在重塑商业格局,催生"一人公司"创业新模式。这种轻资产、高效率的商业模式通过AI自动化运营,让个人创业者能以极低成本挑战传统企业。核心机会包括:1)AI自主公司替代人力密集型业务;2)为企业提供AI转型解决方案;3)利用AI工具实现个人创业。创业者需快速验证创意,聚焦人机协作,把握当前AI发展窗口期。未来,AI赋能的"一人公司"将成为商业新常态,带来更高的专业化和灵活性。抓住AI红利,学会人机协作,是个人创业成功的关键。

这里汇聚了前沿的技术分享与实用的开发技巧,带你探索从创意到企业的技术创业之路。 520

【Java】需要设计一款基于LBS的交友系统,如何设计地理空间邻近算法?

交友与婚恋是人们最基本的需求之一。随着互联网时代的不断发展,移动社交软件已经成为了人们生活中必不可少的一部分。然而,熟人社交并不能完全满足年轻人的社交与情感需求,于是陌生人交友平台悄然兴起。我们决定开发一款基于地理位置服务(LBS)的应用,为用户匹配邻近的、互相感兴趣的好友,应用名称为“Liao”。Liao面临的技术挑战包括:面对海量的用户,如何为其快速找到邻近的人,可以选择的地理空间邻近算法有哪些?Liao如何在这些算法中选择出最合适的那个?

alen101的博客 1000

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

微服务分布式SpringBoot+Vue+Springcloud小程序朋辈心理健康互助交友聊天平台

该平台基于SpringBoot+Vue+SpringCloud的微服务架构,结合小程序端,构建了一个朋辈心理健康互助交友系统。通过分布式技术实现高并发、高可用性,满足用户实时心理咨询、社交互动与情绪管理的需求。技术架构后端采用SpringCloud Alibaba实现服务注册与发现(Nacos)、分布式配置(Nacos Config)、服务熔断(Sentinel)及API网关(Gateway)。

QQ511008285的博客 746

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

SpringBoot+Vue3相亲系统全栈实战:从数据库设计到部署避坑指南

前后端分离架构已成为现代Web开发的标配,它通过解耦前端与后端,显著提升开发效率与部署灵活性。在技术选型时,稳定优先于激进,例如SpringBoot 2.7.x作为成熟稳定版本,能有效规避因springboot版本太高带来的第三方组件兼容性风险。同时,Vue3的Composition API结合computed计算属性,可高效实现动态数据展示与状态管理。数据库设计则需围绕业务核心拆表建索引,通过标签体系与心动匹配表构建完整关系闭环。这类全栈实践广泛应用于社交、招聘、婚恋等平台,本文以相亲网站为实例,从项目规

weixin_29009401的博客 220

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

SpringBoot+Vue防诈知识在线学习系统:从设计到部署全解析

在数字化学习平台逐步成为安全教育基础设施的今天,如何将零散的防诈科普内容转化为可量化、可追踪的在线学习体系,是高校、社区和企业共同面对的工程化课题。围绕这一需求,基于SpringBoot与Vue的前后端分离架构提供了成熟且高效的解决方案:后端利用SpringBoot的自动配置与MyBatis-Plus快速构建RESTful接口,通过JWT鉴权和拦截器保障系统安全;前端借助Vue的组件化开发与Element Plus搭建交互式答题、错题本及管理后台。这种组合不仅覆盖了知识分类、章节测验、学习统计等核心业务闭环

weixin_32576389的博客 191

基于Java技术栈的无人台球室管理系统架构与实战

在实体经济与数字化融合的浪潮中,物联网技术为传统娱乐场所的智能化改造提供了全新路径。Java生态凭借其成熟的企业级开发框架与高并发处理能力,成为构建此类系统的理想选择。通过Spring Boot整合MyBatis-Plus、Redis、Netty等核心组件,开发者可以搭建一套覆盖设备控制、订单计时、用户社交与支付结算的完整业务闭环。本文从系统架构设计出发,深入解析设备长连接通信、状态机管理、分布式锁与数据一致性等关键技术原理,并结合真实工程案例展示其技术价值。这种以Java技术栈为核心的无人化解决方案,不仅

weixin_26985923的博客 109

微服务分布式SpringBoot+Vue+Springcloud小程序在线社交大学生交友平台

该生选题结合当前行业最新的热点,具有一定的实际应用价值,对现实中的系统开发能够提供较为有效的解决方案,满足了用户的日常生活日益增长的需求,能够对该生在计算机科学与技术专业学习的知识和技术进行有效的综合实践和检验。该选题的难度适中、工作量饱满、进度安排合理、前期基础或工作条件能够支撑选题研究,接下来按照功能模块进行了系统的详细设计与实现,在开发过程中,注重代码的规范性和可维护性,并进行了充分的测试以确保系统的稳定性和安全性,最后对系统进行了全面的测试与评估,包括功能测试、性能测试、安全测试等。

Q_Q511008285的博客 911

Spring Boot与Flowable实战:构建可落地的相亲网站核心系统

在开发在线交友或婚恋系统时,如何保证用户信任与交互体验是关键。工作流引擎Flowable提供了一套完整的状态流转与人工审核机制,使其在实名认证、举报仲裁等场景中替代繁琐的硬编码。而Spring Boot作为主流Java框架,凭借其生态成熟、配置简洁的特性,成为快速构建这类业务闭环的理想选择。本文从双向心动匹配的并发处理、基于Redis的实时推荐、WebSocket私信聊天等核心模块出发,结合真实源码与部署经验,剖析了相亲网站从注册登录到审核上线的完整链路。无论是技术选型还是Flowable流程设计,都为开发

weixin_42520374的博客 248

从一个小需求谈谈如何锻炼编程思维

一个改变一生的编程思维,你学费了吗?

程序员青戈 3690
上一篇: Java 项目实战: 交友项目 - 完善项目架构:搭建网关工程
下一篇: Java 项目实战: 交友项目 - 网关:统一鉴权代码实现
Wang's Blog
博客等级 码龄12年 7433粉丝 2413原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值