最新资讯

  • Java JWT权威指南:原理实战与案例

Java JWT权威指南:原理实战与案例

2026-02-04 21:00:39 栏目:最新资讯 11 阅读

这是一份非常详细、实用、通俗易懂、权威且全面的 Java JWT 指南,涵盖了其方方面面,包含原理解释、最佳实战代码和可直接运行的完整系统案例。

Java JWT 全面指南:原理、实战与案例

目录

  1. 理解 JWT:基础概念 1.1 什么是 JWT? 1.2 为什么需要 JWT? 1.3 JWT 的核心优势 1.4 JWT 的典型应用场景
  2. JWT 的结构剖析 2.1 Header (头部) 2.2 Payload (载荷/声明) 2.3 Signature (签名) 2.4 组合与传输:JWT 字符串
  3. Java 中的 JWT 实现库 3.1 主流库介绍与选择 (Java-JWT, jose4j, Nimbus-JOSE-JWT) 3.2 重点推荐:java-jwt (auth0)
  4. 实战:创建和验证 JWT 4.1 环境准备 (依赖引入) 4.2 密钥/密钥对生成与管理 4.3 创建 JWT (Token 生成) 4.4 解析与验证 JWT (Token 验证) 4.5 处理过期 (exp) 和其他声明
  5. 最佳实践与进阶技巧 5.1 密钥安全:存储与轮换 5.2 令牌刷新机制 5.3 选择合适的签名算法 (HS256, RS256, ES256) 5.4 自定义声明 (Claims) 5.5 处理令牌失效与异常 5.6 安全注意事项 (防止 XSS, CSRF, 令牌盗用)
  6. 完整案例一:基于 JWT 的 Web 应用 API 保护 (Spring Boot) 6.1 项目初始化与依赖 6.2 用户登录与 JWT 签发 6.3 JWT 验证过滤器实现 6.4 受保护 API 端点示例 6.5 运行与测试
  7. 完整案例二:微服务间 JWT 认证 7.1 场景描述 (服务 A -> 服务 B) 7.2 服务 A:生成包含特定声明的 JWT 7.3 服务 B:验证 JWT 并提取声明授权 7.4 代码实现与交互流程
  8. 总结与资源

1. 理解 JWT:基础概念

1.1 什么是 JWT?

JWT (JSON Web Token) 是一个开放标准 (RFC 7519),它定义了一种紧凑的自包含的方式,用于在各方之间作为 JSON 对象安全地传输信息。这些信息可以被验证信任,因为它是经过数字签名的。

通俗地说,JWT 就像一张加密的身份证通行证。服务器在用户登录成功后,生成这张“身份证”发给用户(通常是客户端,如浏览器或移动 App)。之后,用户每次向服务器请求需要认证的资源时,都需要出示这张“身份证”。服务器通过验证这张“身份证”的真伪(签名)和有效性(如是否过期),就能确认用户的身份和权限,而无需再次查询数据库或会话存储。

1.2 为什么需要 JWT?

在传统 Web 应用中,通常使用 Session-Cookie 机制来管理用户状态:

  • 用户登录,服务器创建 Session 并存储(通常在内存或数据库),将 Session ID 通过 Cookie 返回给浏览器。
  • 后续请求,浏览器自动带上 Cookie (包含 Session ID),服务器根据 ID 查找 Session 验证身份。

这种方式存在一些痛点:

  • 扩展性:当应用需要分布式部署或使用多台服务器时,Session 需要共享(如使用 Redis),增加了复杂性和维护成本。
  • 跨域问题 (CORS):在前后端分离或跨域 API 调用时,Cookie 的处理可能更复杂。
  • 移动端适配:原生 App 对 Cookie 的支持不如浏览器原生。
  • 无状态性:服务器端需要维护 Session 状态。

JWT 旨在解决这些问题:

  • 无状态/自包含:JWT 本身包含了所有需要的信息(用户标识、权限、有效期等),服务器无需存储会话状态。验证只需根据 JWT 本身和密钥进行。
  • 跨域友好:JWT 通常通过 HTTP Header (如 Authorization: Bearer ) 传输,天然支持跨域。
  • 移动端友好:易于在移动 App 中存储和传输。
  • 标准化:基于开放标准,语言无关,易于在不同系统间交换。

1.3 JWT 的核心优势

  • 无状态性 (Stateless):服务器不需要存储会话信息,简化架构,易于水平扩展。
  • 跨域支持 (CORS):易于在单页应用 (SPA)、原生移动应用和跨域 API 中使用。
  • 信息自包含:Token 内可包含用户标识、角色、权限等必要信息,减少数据库查询。
  • 安全性:通过数字签名保证 Token 的完整性和来源可信,防止篡改。
  • 标准化与通用性:遵循 RFC 7519 标准,各种编程语言都有成熟库支持。

1.4 JWT 的典型应用场景

  • 用户认证 (Authentication):最常见的场景。用户登录后获取 JWT,后续请求携带 JWT 访问受保护资源。
  • 授权 (Authorization):JWT 的 Payload 中可以包含用户的角色 (role) 或权限 (scope) 信息,服务器据此决定用户是否有权执行操作。
  • 信息交换 (Information Exchange):安全地在各方之间传递经过签名和(可选)加密的信息。
  • 单点登录 (SSO):在多个相关但独立的系统间实现一次登录,通行所有系统。JWT 可作为凭证在系统间传递。
  • API 认证:保护 RESTful API 或 GraphQL 端点。
  • 微服务间认证:服务 A 调用服务 B 时,携带一个由可信授权服务器签发的 JWT 证明其身份和权限。

2. JWT 的结构剖析

一个 JWT 由三部分组成,用点 (.) 分隔:

Header.Payload.Signature

例如:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

2.1 Header (头部)

头部通常由两部分组成:

  • typ (Type):令牌类型,这里固定为 JWT
  • alg (Algorithm):签名算法,如 HS256 (HMAC SHA-256), RS256 (RSA SHA-256), ES256 (ECDSA SHA-256) 等。它告诉服务器使用哪种算法来验证签名。

Header 是一个 JSON 对象,例如:

{
  "alg": "HS256",
  "typ": "JWT"
}

这个 JSON 对象会被 Base64Url 编码,形成 JWT 的第一部分。

2.2 Payload (载荷/声明)

Payload 包含关于实体(通常是用户)的声明和其他元数据。声明有三种类型:

  • 注册声明 (Registered Claims):预定义的、建议但不是强制的声明。常用有:
    • iss (Issuer):签发者。
    • sub (Subject):主题,通常是用户 ID。
    • aud (Audience):受众,接收该 JWT 的一方。
    • exp (Expiration Time):过期时间戳 (Unix time)。非常重要!
    • nbf (Not Before):生效时间戳。
    • iat (Issued At):签发时间戳。
    • jti (JWT ID):唯一标识符,防止重放攻击。
  • 公共声明 (Public Claims):可以自定义的名称,但应在 IANA JSON Web Token Registry 中定义或使用防冲突命名空间(如以域名开头)。
  • 私有声明 (Private Claims):自定义的声明,用于在同意使用它们的各方之间共享信息。

一个 Payload 示例:

{
  "sub": "1234567890",
  "name": "John Doe",
  "admin": true,
  "iat": 1516239022,
  "exp": 1516239022 + 3600 // 例如,签发后一小时过期
}

这个 JSON 对象也会被 Base64Url 编码,形成 JWT 的第二部分。

注意:Payload 只是进行了 Base64Url 编码,并未加密!任何人都可以解码查看其内容(这就是为什么它叫 “载荷” 而不是 “主体”)。因此,不要在 Payload 中放置敏感信息(如密码)。如果需要保密,应使用 JWE (JSON Web Encryption) 对 JWT 进行加密。

2.3 Signature (签名)

签名部分用于验证消息在传输过程中没有被篡改,并且(对于使用私钥签名的令牌)验证发送者是否可信。

生成签名需要:

  1. 将编码后的 Header 和编码后的 Payload 用点 (.) 连接起来: base64UrlEncode(header) + "." + base64UrlEncode(payload)
  2. 使用 Header 中指定的签名算法 (alg),以及一个密钥(对于 HS256 是共享密钥;对于 RS256 是私钥),对上一步生成的字符串进行签名。
  3. 对签名结果进行 Base64Url 编码。

例如,对于 HS256 (HMAC SHA-256): $$ signature = HMAC_{SHA256}(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret) $$

签名是 JWT 最关键的部分。接收方在验证 JWT 时,会使用相同的算法和密钥(或公钥,对于非对称算法)重新计算签名,并与收到的 Signature 进行比较。如果匹配,说明 Token 未被篡改且来源可信。

2.4 组合与传输:JWT 字符串

最终,将 Base64Url 编码后的 Header、Payload 和 Signature 用两个点 (.) 连接起来,就构成了完整的 JWT: $$ JWT = base64UrlEncode(header) + '.' + base64UrlEncode(payload) + '.' + base64UrlEncode(signature) $$

在 HTTP 请求中传输时,通常放在 Authorization 请求头中,使用 Bearer 模式:

Authorization: Bearer 

3. Java 中的 JWT 实现库

Java 生态中有多个成熟的 JWT 库。选择时需考虑活跃度、功能完整性、易用性和社区支持。

3.1 主流库介绍

  • java-jwt (auth0)
    • 由 Auth0 公司维护。
    • 功能全面,支持创建、解析、验证 JWT。
    • 支持多种签名算法 (HS256, RS256, ES256 等)。
    • 支持自定义声明。
    • 易于集成到 Spring Boot 等框架。
    • 推荐理由:文档清晰,API 直观,维护活跃,社区广泛。
  • jjwt (Java JWT by Stormpath, 后移交至 Okta)
    • 早期流行库,现在由 Okta 维护。
    • 同样功能丰富,API 设计略有不同。
  • nimbus-jose-jwt
    • 功能非常强大,不仅支持 JWT (JWS),还支持 JWE (加密)、JWA、JWK 等全套 JOSE 规范。
    • 适合需要高级功能或完整 JOSE 支持的项目。
    • 学习曲线可能稍陡。
  • jose4j (Bitbucket)
    • 另一个功能强大的 JOSE 库,支持 JWT、JWE、JWK 等。
    • 稳定且功能完备。

3.2 重点推荐:java-jwt (auth0)

本指南后续的代码示例将主要使用 java-jwt 库,因其易用性和流行度。可以通过 Maven 或 Gradle 引入:

Maven:


    com.auth0
    java-jwt
    4.4.0 

Gradle:

implementation 'com.auth0:java-jwt:4.4.0' // 请检查并使用最新版本

4. 实战:创建和验证 JWT

4.1 环境准备 (依赖引入)

确保项目中已添加 java-jwt 依赖(如上所示)。

4.2 密钥/密钥对生成与管理

对称签名 (如 HS256):

  • 使用一个共享的、高强度的密钥字符串(Secret)。这个密钥必须保密!长度建议至少 32 字节 (256位)。
  • 生成示例:
    String secret = "your-very-long-and-secure-secret-key-at-least-32-characters"; // 实践中应从安全配置源获取
    

非对称签名 (如 RS256):

  • 使用一对密钥:私钥用于签名,公钥用于验证。
  • 生成密钥对:
    import java.security.KeyPair;
    import java.security.KeyPairGenerator;
    import java.security.NoSuchAlgorithmException;
    
    public KeyPair generateKeyPair() throws NoSuchAlgorithmException {
        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
        keyPairGenerator.initialize(2048); // 密钥大小,推荐 2048 或以上
        return keyPairGenerator.generateKeyPair();
    }
    
  • 安全存储:私钥必须严格保密(使用密钥库、环境变量、安全配置服务器)。公钥可以公开分发给需要验证 Token 的服务。

4.3 创建 JWT (Token 生成)

使用 java-jwt 创建 JWT 非常直观。

示例:使用 HS256 创建 JWT

import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;
import java.util.Date;

public class JwtCreator {

    public static String createJwtToken(String userId, String secret) {
        // 定义过期时间 (例如,1小时后过期)
        Date expiresAt = new Date(System.currentTimeMillis() + 3600000); // 3600000 ms = 1 hour

        // 创建并返回 JWT Token
        return JWT.create()
                .withSubject(userId) // 主题 (通常是用户ID)
                .withIssuer("your-issuer-name") // 签发者
                .withIssuedAt(new Date()) // 签发时间
                .withExpiresAt(expiresAt) // 过期时间
                .withClaim("name", "John Doe") // 自定义声明
                .withClaim("role", "admin") // 自定义声明
                .sign(Algorithm.HMAC256(secret)); // 使用 HS256 算法和密钥签名
    }

    public static void main(String[] args) {
        String secret = "your-very-long-and-secure-secret-key";
        String userId = "123456";
        String jwtToken = createJwtToken(userId, secret);
        System.out.println("Generated JWT Token:");
        System.out.println(jwtToken);
    }
}

示例:使用 RS256 创建 JWT

import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.interfaces.RSAPrivateKey;
import java.util.Date;

public class JwtCreatorRsa {

    public static String createJwtTokenRsa(String userId, RSAPrivateKey privateKey) {
        Date expiresAt = new Date(System.currentTimeMillis() + 3600000);
        return JWT.create()
                .withSubject(userId)
                .withIssuer("your-issuer-name")
                .withIssuedAt(new Date())
                .withExpiresAt(expiresAt)
                .sign(Algorithm.RSA256(null, privateKey)); // 使用 RSA256 和私钥签名 (公钥设为null,仅用于签名)
    }

    public static void main(String[] args) throws NoSuchAlgorithmException {
        // 生成密钥对 (实际应用中私钥应安全存储)
        KeyPair keyPair = generateKeyPair(); // 使用前面定义的 generateKeyPair 方法
        RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();

        String userId = "123456";
        String jwtToken = createJwtTokenRsa(userId, privateKey);
        System.out.println("Generated JWT Token (RS256):");
        System.out.println(jwtToken);
    }
}

4.4 解析与验证 JWT (Token 验证)

验证 JWT 包括:

  1. 解析 Token 结构 (Header, Payload)。
  2. 验证签名是否正确(防止篡改)。
  3. 验证注册声明(特别是 exp 过期时间)。
  4. (可选)验证其他声明(如 iss, aud)。

示例:验证 HS256 JWT

import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.exceptions.JWTVerificationException;
import com.auth0.jwt.interfaces.DecodedJWT;

public class JwtValidator {

    public static DecodedJWT validateJwtToken(String jwtToken, String secret) throws JWTVerificationException {
        // 创建验证器,指定算法和密钥
        Algorithm algorithm = Algorithm.HMAC256(secret);
        JWTVerifier verifier = JWT.require(algorithm)
                .withIssuer("your-issuer-name") // 验证签发者
                .build(); // 可添加更多验证条件,如 .withSubject(...), .withAudience(...)

        // 验证 Token: 签名 + 声明 (如 exp)
        return verifier.verify(jwtToken); // 如果验证失败,抛出 JWTVerificationException
    }

    public static void main(String[] args) {
        String secret = "your-very-long-and-secure-secret-key";
        String jwtToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."; // 替换为实际Token

        try {
            DecodedJWT decodedJWT = validateJwtToken(jwtToken, secret);
            System.out.println("Token is valid!");
            System.out.println("Subject (User ID): " + decodedJWT.getSubject());
            System.out.println("Expires at: " + decodedJWT.getExpiresAt());
            System.out.println("Custom Claim 'role': " + decodedJWT.getClaim("role").asString());
        } catch (JWTVerificationException e) {
            System.err.println("Token verification failed: " + e.getMessage());
        }
    }
}

示例:验证 RS256 JWT

import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.exceptions.JWTVerificationException;
import com.auth0.jwt.interfaces.DecodedJWT;
import java.security.interfaces.RSAPublicKey;

public class JwtValidatorRsa {

    public static DecodedJWT validateJwtTokenRsa(String jwtToken, RSAPublicKey publicKey) throws JWTVerificationException {
        Algorithm algorithm = Algorithm.RSA256(publicKey, null); // 使用 RSA256 和公钥验证
        JWTVerifier verifier = JWT.require(algorithm)
                .withIssuer("your-issuer-name")
                .build();

        return verifier.verify(jwtToken);
    }

    public static void main(String[] args) {
        // 假设 publicKey 已从安全来源获取
        RSAPublicKey publicKey = ...; // 获取公钥
        String jwtToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."; // 替换为实际Token

        try {
            DecodedJWT decodedJWT = validateJwtTokenRsa(jwtToken, publicKey);
            System.out.println("Token is valid (RS256)!");
            // ... 提取信息
        } catch (JWTVerificationException e) {
            System.err.println("Token verification failed: " + e.getMessage());
        }
    }
}

4.5 处理过期 (exp) 和其他声明

库在调用 verifier.verify(token) 时会自动检查 expnbf 声明(如果存在)。如果 Token 已过期或尚未生效,将抛出 TokenExpiredExceptionInvalidClaimException

你可以在 JWTVerifier 构建器中添加额外的声明验证:

JWTVerifier verifier = JWT.require(algorithm)
        .withIssuer("your-issuer-name")
        .withAudience("your-audience") // 验证受众
        .withClaim("role", "admin") // 验证自定义声明存在且值匹配
        .build();

使用 DecodedJWT 对象可以方便地获取声明值:

String subject = decodedJWT.getSubject(); // 获取标准声明
String role = decodedJWT.getClaim("role").asString(); // 获取自定义声明
Date expiresAt = decodedJWT.getExpiresAt();
Map allClaims = decodedJWT.getClaims(); // 获取所有声明

5. 最佳实践与进阶技巧

5.1 密钥安全:存储与轮换

  • 对称密钥 (HS256)
    • 使用足够长的随机字符串(至少 32 字节)。
    • 绝不能硬编码在代码中!
    • 使用安全的配置源:环境变量、专用配置服务器(如 Spring Cloud Config)、密钥管理系统(KMS)、或受保护的配置文件(在部署时注入)。
  • 非对称密钥 (RS256, ES256)
    • 私钥的安全级别要求更高。优先使用密钥管理系统 (KMS) 或硬件安全模块 (HSM)。
    • 公钥可以安全地分发给验证方(例如,通过 JWK Set 端点)。
  • 密钥轮换
    • 定期更换密钥以降低泄露风险。
    • 设计时考虑支持多密钥版本(例如,在验证时尝试用新、旧两个密钥验证)。
    • 轮换期间,新 Token 使用新密钥签发,旧 Token 在过期前仍可用旧密钥验证。

5.2 令牌刷新机制

JWT 本身是无状态的,过期时间 (exp) 是固定的。实现类似 Session 的持续活跃需要刷新机制:

  • 颁发两个 Token:
    • Access Token:有效期较短(如 15-30 分钟),用于访问资源。
    • Refresh Token:有效期较长(如几天或几周),存储在安全的持久化存储(如数据库),仅用于获取新的 Access Token。
  • 当 Access Token 过期时,客户端使用 Refresh Token 向特定的 /refresh 端点请求新的 Access Token。
  • 服务器验证 Refresh Token 的有效性(检查是否被撤销或过期),然后颁发新的 Access Token。
  • Refresh Token 本身也应可过期并可撤销。用户登出时,应使相关 Refresh Token 失效。

5.3 选择合适的签名算法

  • HS256 (HMAC SHA-256)
    • 优点:计算速度快,实现简单。
    • 缺点:对称算法,使用同一个密钥进行签名和验证。密钥必须在签发方和所有验证方之间安全共享。如果密钥泄露,攻击者可以签发任意 Token。适用于单服务或可信环境。
  • RS256 / RS512 (RSA SHA-256/512)
    • 优点:非对称算法,私钥签名,公钥验证。公钥可以公开分发。私钥泄露只影响签发,不影响验证。公钥泄露无风险。安全性更高。
    • 缺点:RSA 计算比 HMAC 慢。
    • 推荐:适用于多服务、分布式系统、公钥基础设施 (PKI) 场景。是最常用的算法。
  • ES256 / ES512 (ECDSA SHA-256/512)
    • 优点:非对称算法,与 RSA 类似,但使用椭圆曲线加密 (ECC)。同等安全强度下,密钥长度比 RSA 短,签名也更短。
    • 缺点:支持度可能略低于 RSA,性能取决于具体实现。
    • 推荐:对 Token 大小敏感的场景(如移动端)。

5.4 自定义声明 (Claims)

  • 使用 .withClaim("claimName", value) 方法添加自定义声明。
  • value 可以是 String, Integer, Long, Double, Boolean, Date
  • 避免过大:Payload 过大会增加网络开销。
  • 避免敏感信息:如前所述,Payload 是 Base64Url 编码,不是加密!
  • 命名规范:使用有意义的名称。对于可能冲突的名称,建议使用命名空间(如 "https://yourdomain.com/claims/userType")。

5.5 处理令牌失效与异常

在验证时,verifier.verify(token) 可能抛出多种异常:

  • JWTVerificationException:通用验证失败。
  • AlgorithmMismatchException:Token 的 alg 声明与验证器要求不匹配。
  • SignatureVerificationException:签名验证失败(Token 被篡改)。
  • TokenExpiredException:Token 已过期 (exp)。
  • InvalidClaimException:某个声明验证失败(如 iss, aud, nbf, 或自定义声明不匹配)。

应在代码中妥善捕获这些异常,并返回适当的错误响应(如 HTTP 401 Unauthorized 或 403 Forbidden)。

5.6 安全注意事项

  • HTTPS:始终在 HTTPS 上传输 JWT,防止中间人攻击窃听 Token。
  • 令牌存储
    • 浏览器:存储在 HttpOnlySecure 的 Cookie 中(防 XSS 读取)。或者使用 localStorage/sessionStorage 但要防范 XSS(需应用本身做好 XSS 防护)。
    • 移动 App:使用安全的存储机制(如 Android Keystore, iOS Keychain)。
  • 令牌盗用:如果 Token 被盗,攻击者可以冒充用户。缩短 Token 有效期(Access Token)和使用 Refresh Token 机制可以降低风险。对于极高安全要求,可结合其他因素(如 IP 绑定)。
  • 登出/令牌撤销:JWT 在有效期内始终有效。实现即时失效通常需要额外机制(如令牌黑名单、短有效期 + Refresh Token 控制)。在 Refresh Token 机制中,使 Refresh Token 失效即可阻止获取新 Access Token。
  • XSS (跨站脚本攻击):如果 Token 存储在 localStorage 且网站存在 XSS 漏洞,攻击者可能窃取 Token。确保应用安全无 XSS。
  • CSRF (跨站请求伪造):如果使用 Cookie 存储 JWT,需防范 CSRF(例如,使用 SameSite Cookie 属性、CSRF Token)。使用 Authorization: Bearer 头则不受 CSRF 影响。
  • 密钥管理:再次强调,保护好你的密钥!

6. 完整案例一:基于 JWT 的 Web 应用 API 保护 (Spring Boot)

场景:实现一个简单的 Spring Boot 应用,用户通过 /login 接口使用用户名密码登录,成功则返回 JWT。后续访问 /protected 接口需在 Authorization: Bearer 头中携带有效 JWT。

6.1 项目初始化与依赖

  1. 创建 Spring Boot 项目 (可使用 Spring Initializr)。
  2. 添加依赖:
    • spring-boot-starter-web
    • spring-boot-starter-security (可选,用于简化安全配置,但本示例手动处理)
    • com.auth0:java-jwt (如前所述)

pom.xml 片段:


    
        org.springframework.boot
        spring-boot-starter-web
    
    
    
        org.springframework.boot
        spring-boot-starter-security
    
    
        com.auth0
        java-jwt
        4.4.0
    

6.2 用户登录与 JWT 签发

UserService (模拟用户存储):

import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import java.util.HashMap;
import java.util.Map;

@Service
public class UserService {

    private final PasswordEncoder passwordEncoder;
    private final Map userDatabase = new HashMap<>(); // 模拟数据库

    public UserService(PasswordEncoder passwordEncoder) {
        this.passwordEncoder = passwordEncoder;
    }

    @PostConstruct
    public void init() {
        // 初始化一个测试用户
        String username = "user";
        String rawPassword = "password";
        String encodedPassword = passwordEncoder.encode(rawPassword);
        userDatabase.put(username, encodedPassword);
    }

    public boolean validateUser(String username, String password) {
        String storedPassword = userDatabase.get(username);
        return storedPassword != null && passwordEncoder.matches(password, storedPassword);
    }
}

AuthController (处理登录):

import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.Date;

@RestController
public class AuthController {

    private final UserService userService;

    @Value("${jwt.secret}") // 从 application.properties 注入
    private String jwtSecret;

    @Value("${jwt.issuer}")
    private String jwtIssuer;

    public AuthController(UserService userService) {
        this.userService = userService;
    }

    @PostMapping("/login")
    public String login(@RequestParam String username, @RequestParam String password) {
        // 验证用户凭证
        if (userService.validateUser(username, password)) {
            // 生成 JWT
            Date expiresAt = new Date(System.currentTimeMillis() + 3600000); // 1小时
            Algorithm algorithm = Algorithm.HMAC256(jwtSecret);
            String token = JWT.create()
                    .withSubject(username) // 这里用用户名做subject
                    .withIssuer(jwtIssuer)
                    .withExpiresAt(expiresAt)
                    .sign(algorithm);
            return token; // 实际应用中,可以返回一个包含 token 的 JSON 对象
        } else {
            throw new RuntimeException("Invalid credentials");
        }
    }
}

application.properties:

jwt.secret=your-very-very-secure-hs256-secret-key # 生产环境应从安全来源获取
jwt.issuer=my-spring-boot-app

6.3 JWT 验证过滤器实现

创建一个 Filter 来拦截请求,验证 JWT。

JwtAuthorizationFilter:

import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.exceptions.JWTVerificationException;
import com.auth0.jwt.interfaces.DecodedJWT;
import org.springframework.http.HttpHeaders;
import org.springframework.web.filter.OncePerRequestFilter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class JwtAuthorizationFilter extends OncePerRequestFilter {

    private static final String BEARER_PREFIX = "Bearer ";
    private final String jwtSecret;
    private final String jwtIssuer;

    public JwtAuthorizationFilter(String jwtSecret, String jwtIssuer) {
        this.jwtSecret = jwtSecret;
        this.jwtIssuer = jwtIssuer;
    }

    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain)
            throws ServletException, IOException {
        String authorizationHeader = request.getHeader(HttpHeaders.AUTHORIZATION);

        if (authorizationHeader == null || !authorizationHeader.startsWith(BEARER_PREFIX)) {
            // 没有Token,继续执行过滤器链 (后续可能被其他安全机制拦截)
            chain.doFilter(request, response);
            return;
        }

        String jwtToken = authorizationHeader.substring(BEARER_PREFIX.length());
        try {
            // 验证 Token
            Algorithm algorithm = Algorithm.HMAC256(jwtSecret);
            JWTVerifier verifier = JWT.require(algorithm)
                    .withIssuer(jwtIssuer)
                    .build();
            DecodedJWT decodedJWT = verifier.verify(jwtToken);
            // 验证成功,可以将用户信息(如 subject/username)设置在请求属性中,供后续控制器使用
            request.setAttribute("username", decodedJWT.getSubject());
            chain.doFilter(request, response); // 继续执行
        } catch (JWTVerificationException e) {
            // Token 无效
            response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); // 401
            response.getWriter().write("Invalid JWT token: " + e.getMessage());
        }
    }
}

注册过滤器 (WebConfig):

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebConfig implements WebMvcConfigurer {

    private final String jwtSecret;
    private final String jwtIssuer;

    public WebConfig(@Value("${jwt.secret}") String jwtSecret, @Value("${jwt.issuer}") String jwtIssuer) {
        this.jwtSecret = jwtSecret;
        this.jwtIssuer = jwtIssuer;
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 更常见的做法是使用 Filter,这里演示用 Interceptor 注册 Filter (Spring Boot 支持)
        // 实际项目中更推荐使用 FilterRegistrationBean 注册 Servlet Filter
    }

    // 使用 FilterRegistrationBean 更标准 (在 Spring Boot 主类或配置类中)
    @Bean
    public FilterRegistrationBean jwtFilter() {
        FilterRegistrationBean registrationBean = new FilterRegistrationBean<>();
        registrationBean.setFilter(new JwtAuthorizationFilter(jwtSecret, jwtIssuer));
        registrationBean.addUrlPatterns("/protected/*"); // 只保护 /protected 下的路径
        return registrationBean;
    }
}

6.4 受保护 API 端点示例

ProtectedController:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestAttribute;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;

@RestController
public class ProtectedController {

    @GetMapping("/protected/hello")
    public String sayHello(@RequestAttribute("username") String username) {
        return "Hello, " + username + "! This is a protected resource.";
    }
}

6.5 运行与测试

  1. 启动 Spring Boot 应用。
  2. 获取 Token
    • 使用 Postman 或 curl 发送 POST 请求到 http://localhost:8080/login
      POST /login HTTP/1.1
      Content-Type: application/x-www-form-urlencoded
      
      username=user&password=password
      
    • 响应应包含 JWT Token。
  3. 访问受保护资源
    • 使用 Postman 或 curl 发送 GET 请求到 http://localhost:8080/protected/hello,并设置 Header:
      Authorization: Bearer 
      
    • 应收到 "Hello, user! This is a protected resource." 响应。
  4. 测试无效 Token
    • 修改 Token 或过期后重试,应收到 401 Unauthorized 错误。

7. 完整案例二:微服务间 JWT 认证

场景:有两个服务,ServiceAServiceBServiceA 需要调用 ServiceB 的一个受保护接口 /serviceb/resourceServiceA 使用一个由双方信任的 AuthService 签发的 JWT 来证明其身份和权限。

7.1 场景描述

  • AuthService:负责签发 JWT。它持有私钥 (RS256)。
  • ServiceA
    • 需要调用 ServiceB。
    • 向 AuthService 请求一个 JWT (包含 iss, sub (ServiceA ID), aud (ServiceB), 可能还有权限声明)。
    • 在调用 ServiceB 时,在 Authorization: Bearer 头中携带此 JWT。
  • ServiceB
    • 暴露受保护的接口 /serviceb/resource
    • 持有 AuthService 的公钥。
    • 验证 JWT 的签名、issaudexp 等。
    • 根据 JWT 中的声明(如 sub 和自定义权限)决定是否授权请求。

7.2 服务 A:生成包含特定声明的 JWT

假设 ServiceA 已经通过某种安全方式从 AuthService 获取了 JWT。这里模拟在 ServiceA 内部生成(实际中应由 AuthService 签发)。

ServiceAController (模拟获取Token并调用B):

import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import java.security.interfaces.RSAPrivateKey; // 假设已获取
import java.util.Date;

@RestController
public class ServiceAController {

    @Value("${auth.service.issuer}")
    private String issuer;
    @Value("${serviceb.audience}")
    private String servicebAudience;
    private final RestTemplate restTemplate = new RestTemplate();

    // 假设 privateKey 已注入 (例如从配置)
    private final RSAPrivateKey privateKey;

    public ServiceAController(RSAPrivateKey privateKey) {
        this.privateKey = privateKey;
    }

    @GetMapping("/call-serviceb")
    public String callServiceB() {
        // 1. 生成 JWT (模拟从AuthService获取)
        String jwtToken = generateServiceToken();

        // 2. 使用 RestTemplate 调用 ServiceB,携带 JWT
        String servicebUrl = "http://serviceb-host:port/serviceb/resource";
        org.springframework.http.HttpHeaders headers = new org.springframework.http.HttpHeaders();
        headers.set("Authorization", "Bearer " + jwtToken);
        org.springframework.http.HttpEntity entity = new org.springframework.http.HttpEntity<>(headers);

        return restTemplate.exchange(servicebUrl, org.springframework.http.HttpMethod.GET, entity, String.class).getBody();
    }

    private String generateServiceToken() {
        Date expiresAt = new Date(System.currentTimeMillis() + 60000); // 1分钟有效期 (短)
        Algorithm algorithm = Algorithm.RSA256(null, privateKey); // 使用RS256私钥
        return JWT.create()
                .withIssuer(issuer) // AuthService标识
                .withSubject("service-a-id") // ServiceA的标识
                .withAudience(servicebAudience) // 目标ServiceB
                .withExpiresAt(expiresAt)
                .withClaim("scope", "read:resource") // 自定义权限声明
                .sign(algorithm);
    }
}

7.3 服务 B:验证 JWT 并提取声明授权

ServiceBController:

import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.exceptions.JWTVerificationException;
import com.auth0.jwt.interfaces.DecodedJWT;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.security.interfaces.RSAPublicKey; // 假设已获取

@RestController
public class ServiceBController {

    @Value("${auth.service.issuer}")
    private String expectedIssuer;
    @Value("${serviceb.audience}")
    private String expectedAudience;
    private final RSAPublicKey publicKey;

    public ServiceBController(RSAPublicKey publicKey) {
        this.publicKey = publicKey;
    }

    @GetMapping("/serviceb/resource")
    public String getProtectedResource() {
        // 实际验证逻辑应在 Filter 或 Interceptor 中完成,这里简化演示
        // 假设从请求头获取 Token
        String authHeader = ...; // 从 HttpServletRequest 获取
        if (authHeader == null || !authHeader.startsWith("Bearer ")) {
            throw new RuntimeException("Missing or invalid Authorization header");
        }
        String jwtToken = authHeader.substring(7);

        try {
            // 验证 Token
            Algorithm algorithm = Algorithm.RSA256(publicKey, null);
            JWTVerifier verifier = JWT.require(algorithm)
                    .withIssuer(expectedIssuer)
                    .withAudience(expectedAudience)
                    .build();
            DecodedJWT decodedJWT = verifier.verify(jwtToken);

            // 检查权限声明 (例如 scope)
            String scope = decodedJWT.getClaim("scope").asString();
            if (scope == null || !scope.contains("read:resource")) {
                throw new RuntimeException("Insufficient scope");
            }

            // 授权通过,返回受保护资源
            return "This is the protected resource from ServiceB. Caller: " + decodedJWT.getSubject();
        } catch (JWTVerificationException e) {
            throw new RuntimeException("Invalid JWT: " + e.getMessage(), e);
        }
    }
}

7.4 代码实现与交互流程

  1. 密钥管理
    • AuthService 持有 RSA 私钥。
    • ServiceA 持有 RSA 私钥(仅用于模拟,实际应由 AuthService 签发)。
    • ServiceB 持有 AuthService 的 RSA 公钥(通过安全配置或 JWK 端点获取)。
  2. 交互流程
    1. ServiceA 决定调用 ServiceB
    2. ServiceA 生成(或向 AuthService 请求)一个包含 iss, sub (A), aud (B), exp, scope 的 JWT,并用私钥签名。
    3. ServiceAServiceB/serviceb/resource 发起 HTTP 请求,在 Authorization: Bearer 头中携带 JWT。
    4. ServiceB 接收到请求。
    5. ServiceB 从请求头中提取 JWT。
    6. ServiceB 使用公钥验证 JWT 签名。
    7. ServiceB 验证 iss 是否为可信的 AuthService
    8. ServiceB 验证 aud 是否包含自己(或特定的 audience 值)。
    9. ServiceB 验证 exp 确保 Token 未过期。
    10. ServiceB 提取 scope 声明,检查是否包含 read:resource 权限。
    11. 所有验证通过,ServiceB 处理请求并返回资源数据。
    12. 任何一步验证失败,ServiceB 返回错误(如 401/403)。

注意:实际微服务架构中,ServiceA 不应自己持有私钥签发 Token。通常由独立的认证授权服务器 (AuthService) 负责签发 Token。ServiceA 通过 OAuth2 Client Credentials 等流程从 AuthService 获取 Token。


8. 总结与资源

本指南详细介绍了 Java JWT 的原理、结构、核心概念、主流库 (java-jwt)、实战代码以及两个完整的应用案例(Web API 保护和微服务间认证)。

关键要点回顾

  • JWT 是一种无状态的、自包含的认证和授权令牌机制。
  • 理解 Header、Payload (Claims)、Signature 三部分结构及其作用。
  • 掌握使用 java-jwt 库创建、解析和验证 JWT 的方法。
  • 根据场景选择合适的签名算法 (HS256, RS256)。
  • 遵循密钥安全管理最佳实践。
  • 实现令牌刷新机制以平衡安全性和用户体验。
  • 在 Web 应用中,使用过滤器 (Filter) 验证 JWT 并保护 API。
  • 在微服务间,使用 JWT 携带调用方身份和权限信息。

进一步学习资源

  • RFC 7519 - JSON Web Token (JWT)
  • Auth0 java-jwt GitHub Repository & Documentation
  • jwt.io:在线解码、验证和生成 JWT,查看不同库的支持。
  • Spring Security OAuth2 / OAuth2 Resource Server:Spring 官方对 OAuth2 和 JWT 的支持。

希望这份详尽的指南能帮助你成功地在 Java 应用中集成 JWT!

本文地址:https://www.yitenyun.com/5623.html

搜索文章

Tags

#飞书 #人工智能 #AI #语言模型 #服务器 #大模型 #ai #ai大模型 #agent #python #pip #conda #log4j #ollama #运维 #私有化部署 #微信 #github #信息与通信 #自然语言处理 #rpa #实时互动 #学习 #产品经理 #AI大模型 #大模型学习 #大模型教程 #linux #云计算 #云原生 #AI编程 #飞牛nas #fnos #企业微信 #AI办公 #智能助手 #kylin #docker #arm #远程工作 #ssh #fastapi #html #css #Trae #IDE #AI 原生集成开发环境 #Trae AI #Telegram机器人 #ClawdBot #多模态翻译 #大模型推理 #ios面试 #ios弱网 #断点续传 #ios开发 #objective-c #ios #ios缓存 #网络 #tcp/ip #mongodb #数据库 #算法 #数据结构 #web安全 #安全 #开发语言 #php #网络安全 #就业指南 #银河麒麟高级服务器操作系统安装 #银河麒麟高级服务器V11配置 #设置基础软件仓库时出错 #银河麒高级服务器系统的实操教程 #生产级部署银河麒麟服务系统教程 #Linux系统的快速上手教程 #rag #langchain #堡垒机 #安恒明御堡垒机 #windterm #深度学习 #vscode #ubuntu #gitee #notepad++ #PyTorch #模型训练 #星图GPU #YOLO #java #spring boot #maven #spring #ARM服务器 # GLM-4.6V # 多模态推理 #微服务 #Oauth2 #分布式 #架构 #配置中心 #SpringCloud #Apollo #kubernetes #笔记 #平面 #容器 #学习方法 香港站群服务器 多IP服务器 香港站群 站群服务器 #大语言模型 #长文本处理 #GLM-4 #Triton推理 #AIGC #开源 #大数据 #职场和发展 #程序员创富 #golang #数据结构与算法 #llama #opencv #神经网络 #科技 #数学建模 #mysql #分库分表 #垂直分库 #水平分表 #雪花算法 #分布式ID #跨库查询 #自动化 #ansible #音视频 #ddos #visual studio #华为云 #部署上线 #动静分离 #Nginx #新人首发 #流程图 #论文阅读 #信息可视化 #hadoop #hbase #hive #zookeeper #spark #kafka #flink #大模型入门 #ide #前端 #javascript #低代码 #爬虫 #pytorch #pycharm #springboot #http #mcp #mcp server #AI实战 #gemini #gemini国内访问 #gemini api #gemini中转搭建 #Cloudflare #lstm #分类 #毕业设计 #C++ #Reactor #程序员 #centos #测试工具 #CFD #RTP over RTSP #RTP over TCP #RTSP服务器 #RTP #TCP发送RTP #阿里云 #OCR #文档识别 #DeepSeek-OCR-2 #信创适配 #node.js #能源 #FRP #MobaXterm #区块链 #测试用例 #生活 #Agent #pjsip #转行 #开源软件 #sql #agi #harmonyos #华为 #重构 #机器学习 #计算机视觉 #网络协议 #cpolar #内网穿透 #scrapy #物联网 #websocket #flutter #鸿蒙 #java-ee #SSM 框架 #孕期健康 #产品服务推荐 #推荐系统 #用户交互 #aws #项目 #高并发 #课程设计 #vue.js #论文 #毕设 #FaceFusion # Token调度 # 显存优化 #windows #进程控制 #redis #nosql #知识图谱 #nginx #MCP #MCP服务器 #openHiTLS #TLCP #DTLCP #密码学 #商用密码算法 #面试 #servlet #git #经验分享 #安卓 #word #umeditor粘贴word #ueditor粘贴word #ueditor复制word #ueditor上传word图片 #Linux #TCP #c++ #线程 #线程池 #RAGFlow #DeepSeek-R1 #Windows 更新 #风控模型 #决策盲区 #fabric #postgresql #国企混改 #国企混改咨询 #国企混改战略规划 #GPU #曦望 #大模型面试 #程序设计 #计算机毕业设计 #程序定制 #源码 #大作业 #chrome #Springboot3.0 #多个客户端访问 #IO多路复用 #回显服务器 #TCP相关API #开源社区 #国产基础软件 #操作系统 #AI框架 #Rust #搜索引擎 #导航网 #矩阵 #线性代数 #AI运算 #向量 #自动化巡检 #蓝桥杯 #Ansible # 自动化部署 # VibeThinker #unity #游戏引擎 #c# #unitask #ai agent #ai大小模型 #小模型 #开源小模型 #8b模型 #国产大模型 #SOTA #后端 #机器人 #分阶段策略 #模型协议 #电脑 #mobaxterm #https #iventoy #VmWare #OpenEuler #HCIA-Datacom #H12-811 #题库 #最新题库 #策略模式 #处理器模块 #现货库存 #价格优惠 #PM864AK01 #3BSE018161R1 #PLC #控制器模块 #RAG #RAG调优 #RAG系统 #召回 #ESP32 #开发环境搭建 #压枪 #驱动开发 #单片机 #stm32 #嵌入式硬件 #电脑故障 #文件系统 #FL Studio #FLStudio #FL Studio2025 #FL Studio2026 #FL Studio25 #FL Studio26 #水果软件 #进程 #android #腾讯云 #内容运营 #产品运营 #c语言 #链表 #django #mvp #个人开发 #设计模式 #鸿蒙PC #dify #vllm #spring cloud #json #Redisson #软件构建 #正则 #正则表达式 #qt #swiftui #swift #LabVIEW #光谱仪 #串口通信 #AQ6370 #vue上传解决方案 #vue断点续传 #vue分片上传下载 #vue分块上传下载 #360AI图片精简版 #看图工具 #电脑看图工具 #360看图工具 #AI看图工具 #Conda # 私有索引 # 包管理 #缓存 #APM #AudioPolicy #音频策略 #计算机网络 #iBMC #UltraISO #性能优化 #bytebase #目标检测 #pyqt #单目测距 #速度估计 #pyqt界面 #注意力机制 #ci/cd #jenkins #gitlab #系统安全 #serverless #数信院生信服务器 #Rstudio #生信入门 #生信云服务器 #硬件工程 #rocketmq #程序人生 #科研 #博士 #信奥赛 #提高组 #csp-s #初赛 #真题 #题解 #microsoft #智能制造 #供应链管理 #工业工程 #DeepSeek #服务器繁忙 #LLM #数据分析 #数据挖掘 #GEO服务 #超算服务器 #算力 #高性能计算 #仿真分析工作站 #lvs #负载均衡 #ecmascript #elementui #le audio #蓝牙 #低功耗音频 #通信 #连接 #jvm #学习笔记 #jdk #内存治理 #Harbor #LangFlow #智能体 #牛客周赛 #PyCharm # 远程调试 # YOLOFuse #flask #银河麒麟操作系统 #信创 #国产化 #jar #numpy #scikit-learn #matplotlib #FutureWarning #Canal #ui #团队开发 #墨刀 #figma #matlab #支持向量机 #TRO #TRO侵权 #TRO和解 #软件工程 #uni-app #微信小程序 #小程序 #建造者模式 #游戏 #散列表 #哈希算法 #ESXi #udp #文心一言 #AI智能体 #sqlmap #autosar #svn #react.js #服务器架构 #AI推理芯片 #华为od #华为od机考真题 #华为od机试真题 #华为OD上机考试真题 #华为OD机试双机位C卷 #华为OD上机考试双机位C卷 #华为ODFLASH坏块监测系统 #godot #leetcode #jetty #全排列 #回溯 #剪枝 #STJ算法 #时序数据库 #gitea #企业开发 #ERP #项目实践 #.NET开发 #C#编程 #编程与数学 #mcu #2026年美赛C题代码 #2026年美赛 #mybatis #后端 #AI写作 #设备驱动 #芯片资料 #网卡 #jmeter #功能测试 #软件测试 #自动化测试 #儿童书籍 #儿童诗歌 #童话故事 #经典好书 #儿童文学 #好书推荐 #经典文学作品 #高仿永硕E盘的个人网盘系统源码 #web #webdav #新浪微博 #前端框架 #go #CISSP #CISSP考点 #信息安全 #CISSP哪里考 #公众号:厦门微思网络 #+微信号:xmweisi #ssl #数字化转型 #实体经济 #中小企业 #商业模式 #软件开发 #青蓝送水模式 #创业干货 #vim #gcc #yum #ProCAST2025 #ProCast #脱模 #顶出 #应力计算 #铸造仿真 #变形计算 #推荐算法 #汽车 #select #typescript #b/s架构 #ssm #移动学习平台 #shell #CPU利用率 #酒店客房管理系统 #stl #dubbo #线性回归 #嵌入式 #汇编 #BIOS中断 #命令模式 #智能家居 #FTP服务器 #边缘计算 #dreamweaver #娱乐 #java大文件上传 #java大文件秒传 #java大文件上传下载 #java文件传输解决方案 #prometheus #grafana #es安装 #肿瘤相关巨噬细胞 #CXCL5 #信号通路 #胃癌 #mTOR #乐备实 #labex #防排烟监控 #消防风机一体化 #BA楼宇自控 #DDC控制器 #IBMS集成系统 #系统架构 #diskinfo # TensorFlow # 磁盘健康 #鸭科夫 #逃离鸭科夫 #鸭科夫联机 #鸭科夫异地联机 #开服 #google #search #Java面试 #Java程序员 #后端开发 #Spring #Gemini #Chatgpt #css3 #三种参数 #参数的校验 #fastAPI #pdf #excel #架构师 #软考 #系统架构师 #Ubuntu服务器 #硬盘扩容 #命令行操作 #VMware #数据仓库 #SSH # ProxyJump # 跳板机 #信号处理 #健康医疗 #远程连接 #math #homework #whisper #我的世界 #游戏私服 #云服务器 #虚幻 #ue5 #同步WebServer服务器 #ESP32网页服务器 #轻量级http服务器 #ESP32物联网 #Dell #PowerEdge620 #内存 #硬盘 #RAID5 #社科数据 #数据统计 #经管数据 #PowerBI #企业 #OBC #wsl #L2C #勒让德到切比雪夫 #visual studio code #postman #easyui #深度优先 #DFS #xss #selenium #SSE #自动驾驶 #Java生成PDF #Freemarker转PDF #PDFBox转图片 #HTML转PDF乱码解决 #transformer #计算机 #连锁药店 #连锁店 #SEO #具身智能 #发展心理学 #运动控制 #内在动机 #镜像神经元 #交叉学科 #数列 #数学 #数论 #洛谷 #openclaw #实在Agent #SQL #编辑器 #全能视频处理软件 #视频裁剪工具 #视频合并工具 #视频压缩工具 #视频字幕提取 #视频处理工具 #职场发展 #压力测试 #ISP Pipeline #行缓冲 #创业创新 #论文笔记 #单元测试 #wpf #3d #金融 #教育电商 #媒体 #prompt #Android #Bluedroid #防毒口罩 #防尘口罩 #七年级上册数学 #有理数 #有理数的加法法则 #绝对值 #sklearn #敏捷流程 #chatgpt #AI大模型应用开发 #无人机 #安全架构 #ffmpeg #数字营销 #seo #Buck #NVIDIA #交错并联 #DGX #本地部署 #vLLM #IPMI #DS随心转 #DisM++ # 系统维护 #钉钉 #逻辑回归 #cnn #零售 #原型模式 #交互 #空间计算 #复数 #macos #rpc #protobuf #googlecloud #企业架构治理 #电力企业IT架构 #IT架构设计 #LangGraph #广播 #组播 #并发服务器 #arm开发 #wps #思维模型 #认知框架 #认知 #语义检索 #文本向量化 #GTE-Pro #企业AI #全栈 #powerpoint #Com #其他 #SEO优化 #模型微调 #智慧校园一体化平台 #智慧校园管理系统 #合肥自友科技-智慧校园 #智慧校园源头厂家 #智慧校园软件供应商 #智慧校园平台服务商 #高性价比智慧校园系统 #MIMO #OFDM #技术原理 #通信算法 #游戏美术 #技术美术 #游戏策划 #游戏程序 #用户体验 #GNC #控制 #姿轨控 # Triton # 高并发 #laravel #SAM3 #目标跟踪 #KMP #labview #集成测试 #打卡 #计算机英语翻译 #bash #adb #rust #车辆排放 #mmap #nio #爱心代码 #表白代码 #爱心 #tkinter #情人节表白代码 #测评 #openresty #lua #MapGIS #云服务 #云门户 #IGServer #sglang #usb #通信协议 #YOLO26 #YOLO11 #vue #ssh登录 #echarts ##程序员和算法的浪漫 #漏洞 #数据安全 #注入漏洞 #js逆向 #逆向 #混淆 #电商 #计算机现代史 #oracle #android-studio #android studio #android runtime #Modbus-TCP #RAID #磁盘 #系统管理 #服务 #阻塞队列 #生产者消费者模型 #服务器崩坏原因 #多线程 #数组 #性能调优策略 #双锁实现细节 #动态分配节点内存 #测试覆盖率 #可用性测试 #智能体从0到1 #新手入门 #powerbi #设计规范 #omv8 #树莓派 #nas #HeyGem # 数字人系统 # 远程部署 #6G #太赫兹 #无线通信 #频谱 #无线 #图像分类 #图像分割 #yolo26算法 #旅游推荐管理系统 #旅游攻略 #clawdbot #QQbot #QQ #AI产品经理 #大模型开发 #IndexTTS2 # 阿里云安骑士 # 木马查杀 #twitter #银河麒麟 #人大金仓 #Kingbase #Java #Spring Boot #Redis #分布式锁 #语音识别 #统信UOS #搜狗输入法 #企业级存储 #网络设备 #算法笔记 #tcp/ip #智能路由器 #JavaScript #osg #海外服务器安装宝塔面板 #Deepseek #gpt-3 #放大电路 #漏洞挖掘 #Exchange #abtest #迁移重构 #代码迁移 #百度 #百度文库 #爱企查 #旋转验证码 #验证码识别 #图像识别 #CNAS #CMA #程序文件 #就业 #tomcat #firefox #STL #string #笔试 #高考 #单例模式 #list #智能路由器 #Playbook #AI服务器 #fastmcp #Mycat #语义搜索 #嵌入模型 #Qwen3 #AI推理 #材料工程 #数码相机 #智能电视 #智能手机 #pipeline #Transformers #NLP #CUDA #Triton #AI运维 #Clawdbot #企业微信集成 #DevOps自动化 #Tetrazine-Acid #1380500-92-4 #贪心算法 #阳台种菜 #园艺手扎 #Nano Banana Pro #sqlserver #ZeroTermux #宝塔面板 #移动服务器 #Linux环境 #html5 #状态模式 #fpga开发 #跳槽 #业界资讯 #vision pro #私域运营 #流量运营 #蓝耘智算 #vue3 #天地图 #403 Forbidden #天地图403错误 #服务器403问题 #天地图API #部署报错 #asp.net #mvc #asp.net大文件上传 #asp.net大文件上传下载 #asp.net大文件上传源码 #ASP.NET断点续传 #r-tree #gpu算力 #考研 #GB/T4857 #GB/T4857.17 #GB/T4857测试 #.net #CCE #Dify-LLM #Flexus #Moltbook #Cpolar #国庆假期 #服务器告警 #SSH代理转发 #Miniconda #远程开发 #spine #网络攻击模型 #AI聊天机器人 #隐私合规 #网络安全保险 #法律风险 #风险管理 #求职招聘 #copilot #bootstrap #容斥原理 #中间件 #社交智慧 #职场生存 #系统思维 #身体管理 #商务宴请 #拒绝油腻 #清醒日常 #svm #amdgpu #kfd #ROCm #可信计算技术 #react native #Smokeping #梁辰兴 #传输连接管理 #计算机网络基础 #elasticsearch #版本控制 #Git入门 #开发工具 #代码托管 #微PE #硬盘克隆 #DiskGenius #sql注入 #GESP4级 #GESP四级 #sort #滑动窗口 #字符串 #守护进程 #复用 #screen #麒麟 #Keycloak #Quarkus #AI编程需求分析 #apache #SSH保活 #everything #esp32 arduino #若依 #quartz #框架 #图书馆 #自习室 #提词器 #芦笋提词器 #risc-v #安全威胁分析 #windows11 #系统修复 #eureka #企业存储 #RustFS #对象存储 #高可用 #聚类 #TCP服务器 #语音控制 #高品质会员管理系统 #收银系统 #同城配送 #最好用的电商系统 #最好用的系统 #推荐的前十系统 #JAVA PHP 小程序 #TURN # WebRTC # HiChatBox #戴尔服务器 #戴尔730 #装系统 #synchronized #锁 #reentrantlock # CUDA #CSDN #DHCP #gpio #排序算法 #idea #Cesium #交互设计 #智能避障 #LoRA # RTX 3090 # lora-scripts #运营 #windbg分析蓝屏教程 #jupyter #vnstat #监控 #todesk #KMS 激活 #OSS #分片上传 #断电续传 #vue2 #测试流程 #金融项目实战 #P2P #门禁 #读卡器 #梯控 #门禁一卡通 #门禁读卡器 #梯控读卡器 #IC卡读卡器 #WT-2026-0001 #QVD-2026-4572 #smartermail #结构体 #Moltbot #2026AI元年 #年度趋势 #算法备案 #ai编程 #源代码管理 #扩展屏应用开发 #前端界面 #京东云 #window10 #window11 #病毒 #DCOM进程 #系统进程资源占用高 #收银台开源 #收银台接口 #东方仙盟 #仙盟创梦IDE #商业开源 #Chat平台 #ARM架构 #weston #x11 #x11显示服务器 #研发管理 #禅道 #禅道云端部署 #计算几何 #斜率 #方向归一化 #叉积 #ajax #winscp #claude #CPU # 双因素认证 #春秋云境 #CVE-2020-5515 #STUN # TURN # NAT穿透 #数据集 #并发 #Docker #Streamlit #Qwen #ROS #uv #铬锐特 #uv胶 #紫外线胶水 #光固化胶水 #胶粘剂 #数据采集 #tensorflow #制造 #企业微信机器人 #本地大模型 #pytest #ipmitool #BMC #embedding #建站 #openvino #手机检测 #课堂手机检测 #WIN32汇编 #非标机械设计 #文本生成 #AI助手 #模板和元编程 #智能合约 #幼儿园 #园长 #幼教 #汇智网盘系统 #企业级云存储 #智能协作 #epoll #余行补位 #意义对谈 #余行论 #领导者定义计划 #智慧社区 #管理系统 #wordpress #雨云 #n8n # IndexTTS 2.0 # 自动化运维 #超算中心 #PBS #lsf #intellij-idea #database #rabbitmq #反向代理 #儿童AI #图像生成 #带宽 #流量 #大带宽 #鸿蒙系统 #车载系统 #n8n解惑 #SSH Agent Forwarding # PyTorch # 容器化 #homelab #Lattepanda #Jellyfin #Plex #Emby #Kodi #Claude #用户运营 #iphone #gpt #Ubuntu #Steam #饥荒联机版 #监测 #ShaderGraph #图形 #Taiji #我的世界服务器搭建 #minecraft # 服务器IP # 端口7860 #以太网温湿度气体多参量传感器 #以太网多合一传感器 #以太网环境监测终端 #可定制气体监测模组 #建筑缺陷 #红外 #junit #KMS激活 #遛狗 #LED #设备树 #GPIO #clickhouse #文字检测 #AI论文写作工具 #学术写作辅助 #论文创作效率提升 #AI写论文实测 #.netcore #部署 # GLM-4.6V-Flash-WEB # AI部署 #sentinel #长文本理解 #glm-4 #推理部署 #proc #Fun-ASR # 语音识别 # WebUI #I/O #Lenyiin #DooTask #cocoa #SIP服务器 #语音服务器 #VoIP #SIP协议 #kmeans #昇腾300I DUO #nmodbus4类库使用教程 #C语言 #标准IO #函数接口 #小白 #sqlite #运维开发 #webrtc #http头信息 #支付 #启发式算法 #智能化测试 #质量效能 #skills #playwright #持续测试 #职业和发展 #未加引号服务路径 #大模型呼叫 #外呼系统 #AI外呼 #外呼系统推荐 #智能客服 #外呼 #泛型 #接口 #抽象类 #面向对象设计 #azure #struts #Kylin-Server #国产操作系统 #服务器安装 #muduo #EventLoop #eclipse #投标 #标书制作 #1024程序员节 #IO #插入排序 #MCP SDK #bond #服务器链路聚合 #网卡绑定 #AI-native #dba #vivado license #2026美国大学生数学建模 #2026美赛 #美赛ICM #美赛ICM Problem F #ICM赛题F #MATLAB #nodejs #旅游 #NPU #CANN #银河麒麟部署 #银河麒麟部署文档 #银河麒麟linux #银河麒麟linux部署教程 #AI电商客服 #江协 #瑞萨 #OLED屏幕移植 #5G #PyTorch 特性 #动态计算图 #张量(Tensor) #自动求导Autograd #GPU 加速 #生态系统与社区支持 #与其他框架的对比 #连接数据库报错 #can #DIY机器人工房 #动态规划 #memcache #pygame #openssh #华为交换机 #信创终端 # OTA升级 # 黄山派 #RustDesk # 黑屏模式 # TTS服务器 #公共MQTT服务器 #IndexTTS 2.0 #本地化部署 #串口服务器 #工业级串口服务器 #串口转以太网 #串口设备联网通讯模块 #串口服务器选型 #blender #设计师 #图像处理 #分布式数据库 #集中式数据库 #业务需求 #选型误 #mariadb #AutoDL使用教程 #AI大模型训练 #linux常用命令 #PaddleOCR训练 #在线培训系统 #防火墙 #RPA #影刀RPA #安全性测试 ##python学习笔记 #python中with语句详解 #paddleocr #生信 #xeon #pencil #pencil.dev #设计 #Zernike #hcipy #光学设计 #像差仿真 #大模型应用 #API调用 #PyInstaller打包运行 #服务端部署 #mapreduce #cpu #数模美赛 #电气工程 #C# #全链路优化 #实战教程 #大学生 #毕设代做 #课设 #决策树 #AI生成 # outputs目录 # 自动化 #openEuler #LE Audio #BAP #sizeof和strlen区别 #sizeof #strlen #计算数据类型字节数 #计算字符串长度 #ocr #lprnet #车牌识别 #crnn #车牌检测 #LabVIEW知识 #LabVIEW程序 #LabVIEW功能 # 显卡驱动备份 #模拟退火算法 #rustdesk #Docsify #技术博客 #智能体来了 #标准化事件委托 #工序流程工艺路径 #业务流程标准化 #聊天小程序 #视频去字幕 #clamav #cursor #uvicorn #uvloop #asgi #event #三维 #3D #三维重建 #榛樿鍒嗙被 #信令服务器 #Janus #MediaSoup #TensorRT # 推理优化 #kong #Kong Audio #Kong Audio3 #KongAudio3 #空音3 #空音 #中国民乐 #Jetty # CosyVoice3 # 嵌入式服务器 #CVE-2025-61686 #路径遍历高危漏洞 #Llama-Factory # 大模型推理 #需求分析 #强化学习 #策略梯度 #REINFORCE #蒙特卡洛 #OpenAI #故障 #优化 #双指针 #健身房预约系统 #健身房管理系统 #健身管理系统 # 公钥认证 #deepseek # GPU租赁 # 自建服务器 #考试系统 #在线考试 #培训考试 #考试练习 #V11 #kylinos #高级IO #MinIO服务器启动与配置详解 #代理 # 服务器IP访问 # 端口映射 #轻量大模型 #流媒体 #NAS #飞牛NAS #NVR #EasyNVR #C₃₂H₄₅N₇O₁₁S₂ #SSH复用 # Miniconda # 远程开发 #AirDrop #GATT服务器 #蓝牙低功耗 #AB包 #机器视觉 #6D位姿 #mssql #学工管理系统 #学工一体化平台 #学工软件二次开发 #学工平台定制开发 #学工系统服务商 #学工系统源头厂家 #智慧校园学工系统 #SRS #API安全 #漏洞修复 #服务器安全 #Tracker 服务器 #响应最快 #torrent 下载 #2026年 #Aria2 可用 #迅雷可用 #BT工具通用 #密码 #m3u8 #HLS #移动端H5网页 #APP安卓苹果ios #监控画面 直播视频流 #seata #TC/TM/RM #Puppet # IndexTTS2 # TTS #vuejs #x-cmd #doubao #kimi #zhipu #claude-code #摩尔线程 # 远程连接 #unix #一人公司 #独立开发者 #gerrit #直流无刷电机 #六步换相 #vp9 #r语言-4.2.1 #r语言 #语言 #系统升级 #指针 #anaconda #虚拟环境 #GB28181 #SIP信令 #SpringBoot #视频监控 #LVDS #高速ADC #DDR #ModelEngine #贝叶斯优化深度学习 #顶刊 #绘图 #研究生 #ueditor导入word #ueditor导入pdf #编程助手 #Gunicorn #WSGI #Flask #并发模型 #容器化 #Python #性能调优 #polkadot #runtmie #1Panel #Fail2ban #SSH防护 #ceph #ambari #markdown #GitPuk #国产开源免费代码管理工具 #Arbess #cicd工具 #一文上手 #时间复杂度 #空间复杂度 #金融投资Agent #muduo库 #Coze工作流 #AI Agent指挥官 #多智能体系统 #平板 #交通物流 #智能硬件 #国产化OS #ida #SSH跳转 #GPU服务器 #邮箱 #postfix #dovecot # IndexTTS # GPU集群 #uniapp #合法域名校验出错 #服务器域名配置不生效 #request域名配置 #已经配置好了但还是报错 #uniapp微信小程序 #Anaconda配置云虚拟环境 #CVE-2025-68143 #CVE-2025-68144 #CVE-2025-68145 #学术论文创作 #论文效率提升 #MBA论文写作 #RSO #机器人操作系统 #编程语言 #ONLYOFFICE #MCP 服务器 #esb接口 #走处理类报异常 #bug菌问答团队 #zabbix #comfyui #8U #硬件架构 #zygote #应用进程 #RAID技术 #存储 #nacos #claude code #codex #code cli #ccusage #p2p #OpenManage #Node.js #漏洞检测 #CVE-2025-27210 # 局域网访问 # 批量处理 #Discord机器人 #云部署 #程序那些事 #mybatis #Ascend #MindIE # 树莓派 # ARM架构 #人流量统计 #roi区域识别 #车辆识别 #电路仿真 #proteus #AD #keil #硬件工程师面试 #静脉曲张 #腿部健康 #web3.py #spring native #远程访问 #远程办公 #飞网 #安全高效 #配置简单 #快递盒检测检测系统 #EDCA OS #可控AI #llm #领域驱动 #iot #笔记本电脑 #麒麟OS #debian #Tokio #异步编程 #系统编程 #Pin #http服务器 #web3 #claudeCode #content7 #galeweather.cn #高精度天气预报数据 #光伏功率预测 #风电功率预测 #高精度气象 #Modbus # 串口服务器 # NPort5630 #多进程 #python技巧 #架构设计 #TcpServer #accept #高并发服务器 #美食 #pve #AI工具 #SEW #赛威 #SEW变频器 #zotero #WebDAV #同步失败 #代理模式 #里氏替换原则 #科普 #JT/T808 #车联网 #车载终端 #模拟器 #仿真器 #开发测试 #LobeChat #GPU加速 #AI赋能盾构隧道巡检 #开启基建安全新篇章 #以注意力为核心 #YOLOv12 #AI隧道盾构场景 #盾构管壁缺陷病害异常检测预警 #隧道病害缺陷检测 #政务 #AI技术 #翻译 #开源工具 #js #卷积神经网络 #参数估计 #矩估计 #概率论 #IT #技术 #宝塔面板部署RustDesk #RustDesk远程控制手机 #手机远程控制 #HistoryServer #Spark #YARN #jobhistory #可再生能源 #绿色算力 #风电 #ZooKeeper #ZooKeeper面试题 #面试宝典 #深入解析 #C/C++ #静态链接 #链接 #Kuikly #openharmony #SSH反向隧道 # Jupyter远程访问 #dlms #dlms协议 #逻辑设备 #逻辑设置间权限 #简单数论 #埃氏筛法 #内存接口 # 澜起科技 # 服务器主板 #api #key #AI作画 #yolov12 #研究生life #Spring AI #AI Agent #开发者工具 #性能 #RAM #全文检索 #计算机外设 #gpu #nvcc #cuda #nvidia #文生视频 #CogVideoX #AI部署 #树莓派4b安装系统 #scanf #printf #getchar #putchar #cin #cout #yolo #知识点 #区间dp #路由器 #RIP #结构体与联合体 #程序员转型 #模块 #gnu #RXT4090显卡 #RTX4090 #深度学习服务器 #硬件选型 #行为模式分析 #数据 #应用层 #跨领域 #敏感信息 #群晖 #音乐 #IntelliJ IDEA #scala #RTSP #Live555 #流媒体服务器 #经济学 #算力一体机 #ai算力服务器 #ThingsBoard MCP #测试网 #erc-20 #独立链 #Helm Chart #devops #408 #线索二叉树 #知识库 #JAVA #ue4 #DedicatedServer #独立服务器 #专用服务器 #tornado #几何学 #拓扑学 #MOXA #宠物 #硬件 #cpp #熵权法 #灰色关联分析 #传统服饰销售平台 #多接口并发 #首页优化 #防毒面罩 #防尘面罩 #UEFI #BIOS #Legacy BIOS #1panel #vmware #python学习路线 #python基础 #python进阶 #python标准库 #vlookup #EMC存储 #存储维护 #NetApp存储 #图论 #Highcharts #插件封装 #docker-compose #fiddler #LangGraph 1.0 #企业级部署 #Kubernetes集群 #生产环境 #ICPC #ip #paddlepaddle #opc ua #opc # 环境迁移 #水利信息化 #智慧水务 #授时服务 #北斗授时服务器 #TTS私有化 # 音色克隆 # GLM-TTS # 数据安全 #IPMB #远程管理 #xshell #host key #Qwen3-14B # ARM服务器 #dash # 远程访问 # 服务器IP配置 #捷配 #pcb工艺 #二进制枚举 #智能一卡通 #消费一卡通 #智能梯控 #一卡通 #超时设置 #客户端/服务器 #网络编程 #机器人运动学 #PyKDL #域名注册 #新媒体运营 #网站建设 #国外域名 #HBA卡 #RAID卡 #改行学it #回归 #TTS #Gateway #认证服务器集成详解 #图 #dijkstra #迪杰斯特拉 #IO编程 #MQTT协议 #实时检测 #HTML #web前端 #网页开发 #VibeVoice # 语音合成 # 批量管理 #glibc #智慧城市 #海外短剧 #海外短剧app开发 #海外短剧系统开发 #短剧APP #短剧APP开发 #短剧系统开发 #海外短剧项目 #MCP服务器注解 #异步支持 #方法筛选 #声明式编程 #自动筛选机制 #数据可视化 #连锁门店核销 #美团团购券核销 #美团核销api #saas平台美团核销 #java接入美团团购 #网路编程 #百万并发 #rtmp #AI写作工具 #教材编写效率提升 #AI教材编写 #教材编写难题解决 #教育领域AI应用 #晶振 #redisson #cmmi #结对编程 #hdfs #xcode #SSH免密登录 #C2000 #TI #实时控制MCU #AI服务器电源 #unity3d #服务器框架 #Fantasy #H5 #跨域 #发布上线后跨域报错 #请求接口跨域问题解决 #跨域请求代理配置 #request浏览器跨域 #进程创建与终止 #React #Next #CVE-2025-55182 #RSC #DNS #JumpServer #Tailscale #移动端h5网页 #调用浏览器摄像头并拍照 #开启摄像头权限 #拍照后查看与上传服务器端 #摄像头黑屏打不开问题 #UDP的API使用 #Dify #内网 #梯控一卡通 #电梯一卡通 #考勤一卡通 #开题报告 #C #游戏机 #振镜 #振镜焊接 #文件IO #输入输出流 #浏览器指纹 #hibernate #逆向工程 #tcpdump #ngrok #工作 #水性三防漆 #UV三防漆 #有机硅三防漆 #聚氨酯三防漆 #醇酸树脂三防漆 #丙烯酸三防漆 # 目标检测 #Nacos #gRPC #注册中心 #win11 #chat #机器人学习 #ms-swift # 大模型 # 模型训练 #网络配置实战 #Web/FTP 服务访问 #计算机网络实验 #外网访问内网服务器 #Cisco 路由器配置 #静态端口映射 #网络运维 #一周会议与活动 #ICLR #CCF #YOLOv13多模态创新改进 #YOLO多模态融合检测改进 #ICCV 2025多模态顶会 #LIF 局部光照感知融合模块 #效融合 RGB 与红外信息 #可见光与红外图像融合目标检测 #CDN #最佳实践 #STDIO协议 #Streamable-HTTP #McpTool注解 #服务器能力 #AutoDL #租显卡 #训练推理 #直播 #OpenHarmony #milvus #Python办公自动化 #Python办公 #实时音视频 #轻量化 #低配服务器 #Anything-LLM #IDC服务器 #贴图 #材质 #工具集 #UDP套接字编程 #UDP协议 #网络测试 #raid #raid阵列 #agentic bi #论文复现 #ArcGIS #批量操作 #地理空间分析 #知识 #journalctl #鼠大侠网络验证系统源码 #AI降重 #快降重 #论文降重 #降AI率 #YOLOFuse # 水冷服务器 # 风冷服务器 #ArkUI #ArkTS #鸿蒙开发 #VoxCPM-1.5-TTS # 云端GPU # PyCharm宕机 #数据迁移 #910B #rdp #cocos2d #图形渲染 #elk #系统安装 #openlayers #bmap #tile #server #reactor反应堆 #xlwings #Excel #虚拟机 #Hadoop #客户端 #运动 #期刊 #SCI #GLM-4.6V-Flash-WEB # AI视觉 # 本地部署 #CosyVoice3 #系统降级 #华为P30 #开关电源 #热敏电阻 #PTC热敏电阻 #文件传输 #电脑文件传输 #电脑传输文件 #电脑怎么传输文件到另一台电脑 #电脑传输文件到另一台电脑 #flume #x86_64 #数字人系统 #银河麒麟aarch64 #范式 #零代码平台 #AI开发 #UDP #Karalon #AI Test #对话框 #Dialog #桌面开发 #MessageDialog #QInputDialog #文件管理 #文件服务器 #国产开源制品管理工具 #Hadess #鲲鹏 #Coturn #环境搭建 #pandas #mamba #凤希AI伴侣 #esp32教程 #remote-ssh #glances #neo4j #NoSQL #工程实践 #bug #毕设定制 #ipv6 #idm #AI应用 #格式工厂 #动画 #流量监控 # 智能运维 # 性能瓶颈分析 # 云服务器 #Spring源码 #simulink #寄存器 #aiohttp #asyncio #异步 #vrrp #脑裂 #keepalived主备 #高可用主备都持有VIP #SMP(软件制作平台) #EOM(企业经营模型) #应用系统 #软件需求 #数据访问 # 模型微调 #自动化运维 #传统行业 #AI赋能 #arm64 #AI零代码开发 #敏捷开发 #自然语言编程 #软件开发范式变革 #MC #链表的销毁 #链表的排序 #链表倒置 #判断链表是否有环 #lucene # 一锤定音 # 大模型微调 #UOS #海光K100 #统信 #safari #黑客技术 #挖漏洞 #日志分析 #b树 #二值化 #Canny边缘检测 #轮廓检测 #透视变换 #SSH公钥认证 # 安全加固 #数据库架构 #React安全 #漏洞分析 #Next.js #反序列化漏洞 #eBPF #Socket #集成学习 #交换机 #三层交换机 #人脸识别 #人脸核身 #活体检测 #身份认证与人脸对比 #微信公众号 #memory mcp #Cursor # 大模型部署 # 私有化AI #IFix #灌封胶 #有机硅灌封胶 #聚氨酯灌封胶 #环氧树脂灌封胶 #电子灌封胶 #c++20 #身体实验室 #健康认知重构 #微行动 #NEAT效应 #亚健康自救 #ICT人 #AI智能棋盘 #Rock Pi S #代码规范 #模型上下文协议 #MultiServerMCPC #load_mcp_tools #load_mcp_prompt #攻防演练 #Java web #红队 #webgl #asp.net上传文件夹 #SSH别名 #screen 命令 #BoringSSL #高精度农业气象 #Cubase #Cubase15 #Cubase14 #Cubase12 #Cubase13 #Cubase 15 Pro #Cubase 14 Pro #智慧校园解决方案 #智慧校园选型 #智慧校园采购 #智慧校园软件 #智慧校园专项资金 #智慧校园定制开发 #4U8卡 AI 服务器 ##AI 服务器选型指南 #GPU 互联 #GPU算力 #黑群晖 #无U盘 #纯小白 #VMware Workstation16 #服务器操作系统 #SSH跳板机 # Python3.11 # 权限修复 #CPU推理 #钟点工管理系统 #数字化管理 #创业管理 #财务管理 #团队协作 #创始人必修课 #数字化决策 #经营管理 #国产PLM #瑞华丽PLM #瑞华丽 #PLM #screen命令 #ping通服务器 #读不了内网数据库 ##租显卡 # 离线AI #蓝湖 #Axure原型发布 #可撤销IBE #服务器辅助 #私钥更新 #安全性证明 #双线性Diffie-Hellman #Android16 #音频性能实战 #音频进阶 #短剧 #短剧小程序 #短剧系统 #微剧 #OWASP #juice-shop #安全漏洞练习靶场 #挖矿 #Linux病毒 #turn #H5网页 #网页白屏 #H5页面空白 #资源加载问题 #打包部署后网页打不开 #HBuilderX # AI翻译机 # 实时翻译 #gaussdb #系统故障 #硬盘修复 #wireshark #SAP #ebs #metaerp #oracle ebs #华为机试 #VS Code调试配置 #Deepoc #具身模型 #开发板 #未来 # GPU服务器 # tmux #机器翻译 #昇腾 #随机森林 #boosting #K8s #镜像 #集群自动化 #框架搭建 #esp32 #mosquito #tdengine #涛思数据 #llvm #练习 #基础练习 #循环 #九九乘法表 #计算机实现 #SQL调优 #EXPLAIN #慢查询日志 #分布式架构 #工厂模式 #Proxmox VE #虚拟化 #后端框架 #N8N #ClaudeCode #AICoder #人工智能编码助手 #证书 #log #EtherCAT #XMC4800 #工业自动化 #硬件设计 #状态空间 #JNI #WinDbg #Windows调试 #内存转储分析 #版本兼容 #API兼容 #西门子 #汇川 #Blazor #spring ai #oauth2 #远程桌面协议 #SPICE #cascadeur #batch #springboot3 #springboot3升级 #Spring Batch #升级Spring Batch #MinIO #AI视频创作系统 #AI视频创作 #AI创作系统 #AI视频生成 #AI创作工具 #fs7TF #夏天云 #夏天云数据 #free #vmstat #sar #力扣 #前缀和 #浏览器自动化 #python #智能检索 #Web of Science #视频 #运维工具 # Base64编码 # 多模态检测 #npu #大剑师 #nodejs面试题 #STDIO传输 #SSE传输 #WebMVC #WebFlux #SPA #单页应用 #服务器IO模型 #非阻塞轮询模型 #多任务并发模型 #异步信号模型 #多路复用模型 #远程桌面 #远程控制 #RK3576 #瑞芯微 #代理服务器 #rsync # 数据同步 #swagger #传感器 #MicroPython #入侵 #日志排查 #懒汉式 #恶汉式 #edge #迭代器模式 #观察者模式 #雨云服务器 #Minecraft服务器 #教程 #MCSM面板 #Apple AI #Apple 人工智能 #FoundationModel #Summarize #SwiftUI #Spring AOP # 服务器配置 # GPU #istio #服务发现 #gateway #CLI #langgraph.json #视觉理解 #Moondream2 #多模态AI #伯希和敦煌石窟笔记 #伯希和 #英语学习 #YOLO识别 #YOLO环境搭建Windows #YOLO环境搭建Ubuntu #HarmonyOS #主板 #电源 #青少年编程 #bigtop #hdp #hue #kerberos #ftp #sftp #开关电源设计 #个人博客 # 键鼠锁定 #bochs #欧拉 #工程设计 #预混 #扩散 #燃烧知识 #层流 #湍流 #WinSCP 下载安装教程 #SFTP #FTP工具 #服务器文件传输 #docker安装seata #Syslog #系统日志 #日志监控 #生产服务器问题查询 #日志过滤 #Autodl私有云 #深度服务器配置 #服务器线程 # SSL通信 # 动态结构体 #报表制作 #职场 #用数据讲故事 #Gazebo #ROS 2 #消息桥接 #机器人仿真 #手机h5网页浏览器 #安卓app #苹果ios APP #手机电脑开启摄像头并排查 #语音生成 #xml #protobuffer #结构化数据序列化机制 #音乐分类 #音频分析 #ViT模型 #Gradio应用 #人脸识别sdk #视频编解码 #canvas层级太高 #canvas遮挡问题 #盖住其他元素 #苹果ios手机 #安卓手机 #调整画布层级 #测速 #iperf #iperf3 #学术生涯规划 #CCF目录 #基金申请 #职称评定 #论文发表 #科研评价 #顶会顶刊 #IIS Crypto #嵌入式编译 #ccache #distcc #KMS #slmgr #铁路桥梁 #DIC技术 #箱梁试验 #裂纹监测 #四点弯曲 #ARM64 # DDColor # ComfyUI #大模型部署 #mindie #ComfyUI # 推理服务器 #express #cherry studio #moltbot #libosinfo #puppeteer #Fluentd #Sonic #日志采集 #面向对象 #taro #AI应用编程 #游戏服务器断线 #haproxy # 服务器迁移 # 回滚方案 #Archcraft #restful #自由表达演说平台 #演说 #nfs #iscsi #anti-content #anti-content分析 #anti-content逆向 #外卖配送 #同态加密 #K8s集群 #LangSmith #YOLOv8 # Docker镜像 #rtsp #转发 #标准化流模型 #概率生成模型 #可逆变换 #概率密度变换 美国站群服务器 美国多IP服务器 美国站群 #ET模式 #非阻塞 #SA-PEKS # 关键词猜测攻击 # 盲签名 # 限速机制 #模版 #函数 #类 #SMARC #ARM # 代理转发 #WEB #CMake #Make #千问 #万悟 #联通元景 #web服务器 #API #排序 # 高并发部署 #vps #Comate #I/O模型 #水平触发、边缘触发 #多路复用 #软件 #本地生活 #电商系统 #商城 #FunASR #语音转文字 #C++ UA Server #SDK #Windows #跨平台开发 #grpc #项目申报系统 #项目申报管理 #项目申报 #企业项目申报 #Unity #游戏服务器 #AI教材写作工具 #AI创作技术 #教材编写实战 #创作效率优化 #北京百思可瑞教育 #百思可瑞教育 #北京百思教育 #webpack #昭和仙君 #渗透测试 #攻击溯源 #编程 #宝塔 #Navidrome #warp #二维数组 #Aluminium #Google #Shiro #CVE-2016-4437 #tekton #2025年 #因果学习 # ControlMaster #联机教程 #局域网联机 #局域网联机教程 #局域网游戏 #视觉检测 #云开发 #Termux #Samba #CS2 #debian13 #npm #asp.net上传大文件 #VPS #搭建 #CVE-2025-13878 #CWE-617 #远程攻击 #土地承包延包 #领码SPARK #aPaaS+iPaaS #智能审核 #档案数字化 #k8s #ICE #信创国产化 #达梦数据库 #API限流 # 频率限制 # 令牌桶算法 #MS #Materials #开发实战 #银河麒麟服务器系统 #网络安全计划 #数字时代 #网站 #截图工具 #批量处理图片 #图片格式转换 #图片裁剪 #温湿度监控 #WhatsApp通知 #IoT #MySQL #网安应急响应 #管道Pipe #system V #人形机器人 #人机交互 #SMTP # 内容安全 # Qwen3Guard #X11转发 #Proteus #UART #嵌入式系统 #数据恢复 #视频恢复 #视频修复 #RAID5恢复 #流媒体服务器恢复 #DDD #tdd #RGFNet多模态目标检测 #可见光-红外图像融合目标检测 #TGRS 2025顶刊论文 #YOLO多模态创新改进 #YOLO多模态融合属于发文热点 #uvx #uv pip #npx #Ruff #程序开发 #插件 #FHSS #服务器开启 TLS v1.2 #IISCrypto 使用教程 #TLS 协议配置 #IIS 安全设置 #服务器运维工具 #心理健康服务平台 #心理健康系统 #心理服务平台 #心理健康小程序 # 远程运维 #性能测试 #LoadRunner #套接字 #I/O多路复用 #字节序 #DAG #云服务器选购 #Saas #samba #TFTP #NSP #下一状态预测 #aigc #ASR #SenseVoice #mtgsig #美团医药 #美团医药mtgsig #美团医药mtgsig1.2 #dynadot #域名 #HarmonyOS APP #基于uni-app的 #校园二手物品交易系统 #smtp #smtp服务器 #PHP #intellij idea #声源定位 #MUSIC #图像检测 #pxe #Couchbase #向量存储 #元数据过滤 #相似性搜索 #JSON文档数据库 #cosmic #resnet50 #分类识别训练 #运维 #atlassian #华为od机试 #华为od机考 #华为od最新上机考试题库 #华为OD题库 #od机考题库 #AI+ #coze #AI入门 #计组 #数电 #智慧医疗 #Python3.11 #AI 推理 #NV #Spire.Office #处理器 #MOSFET #晶圆制造 #芯片制造 #上下文工程 #langgraph #意图识别 #ansys #ansys问题解决办法 # 网络延迟 #ranger #MySQL8.0 #win10 #qemu #远程软件 #reactjs #智能体对传统行业冲击 #行业转型 #teamviewer #RS232 #RS485 #RS422 #vertx #vert.x #vertx4 #runOnContext # Connection refused #WRF #WRFDA #Socket网络编程 #0day漏洞 #DDoS攻击 #漏洞排查 # IP配置 # 0.0.0.0 #嵌入式开发 # DIY主机 # 交叉编译 #appche #VON #分享 #PS #photoshop # 轻量化镜像 # 边缘计算 #大数据分析 #web server #请求处理流程 #勒索病毒 #勒索软件 #加密算法 #.bixi勒索病毒 #数据加密 #OPCUA #CA证书 #星际航行 #Langchain-Chatchat # 国产化服务器 # 信创 #opc模拟服务器 #Minecraft #SpringSecurity #鉴权 #Host #SSRF #Hot100 #求职面试 #N皇后 #解数独 # 批量部署 #Zigzag # ms-swift #PN 结 #ARMv8 #内存模型 #内存屏障 #node #jquery #AITechLab #cpp-python #CUDA版本 #个人助理 #数字员工 #CTF #SQL注入 #WAF绕过 #节日 #ESP32编译服务器 #Ping #DNS域名解析 #麦克风权限 #访问麦克风并录制音频 #麦克风录制音频后在线播放 #用户拒绝访问麦克风权限怎么办 #uniapp 安卓 苹果ios #将音频保存本地或上传服务器 #gmssh # REST API 香港VPS服务器 VPS服务器 香港VPS # keep-alive #闲置物品交易系统 #地理 #遥感 #IPv6 #前端开发 #EN4FE #Linly-Talker # 数字人 # 服务器稳定性 #PaperMC #我的世界服务器 #boltbot #解释器模式 #Claude opus 4.6 #向量嵌入 #电子电气架构 #系统工程与系统架构的内涵 #Routine #人脸活体检测 #live-pusher #动作引导 #张嘴眨眼摇头 #苹果ios安卓完美兼容 #实例分割 #isic2016 #duckdb #模块测试 #多模态 #微调 #超参 #LLamafactory # 硬件配置 #海量数据存储 #阿里云RDS #爬虫实战 #零基础python爬虫教学 #双色球历史开奖数据 #期号红球篮球开奖日期等 #结构化CSV存储 #信息收集 #poll #coffeescript #uni-app x #uts #uvue #跨端开发 #实战 #H3C #磁盘配额 #存储管理 #形考作业 #国家开放大学 #系统运维 #文献综述 #数智红包 #商业变革 #Go并发 #高并发架构 #Goroutine #系统设计 #net core #kestrel #web-server #asp.net-core #Prometheus #Zabbix #语音合成 #FASTMCP #网络 #传媒 #隐函数 #常微分方程 #偏微分方程 #线性微分方程 #线性方程组 #非线性方程组 #复变函数 #高斯溅射 #MC群组服务器 #底层原理 #源码实现 #说话人验证 #声纹识别 #CAM++ #校园志愿者 #c++高并发 #Ward #思爱普 #SAP S/4HANA #ABAP #NetWeaver #云计算运维 #递归 #线性dp #PTP_1588 #gPTP #农产品物流管理 #物流管理系统 #农产品物流系统 #农产品物流 # 鲲鹏 #VSCode # SSH #uip #日志模块 #测量 #进程等待 #wait #waitpid #奈飞工厂算法挑战赛 # GLM # 服务连通性 #文件上传漏洞 #编译原理 #词法分析 #结构与算法 #A2A #GenAI #TLS协议 #HTTPS #运维安全 #LLM大模型部署与微调 #OpenCode #技能系统 #技能模板 #持续部署 #idc #金仓数据库 #数据库平替用金仓 #工控 #效率神器 #办公技巧 #自动化工具 #Windows技巧 #打工人必备 #服务器解析漏洞 #NFC #智能公交 #服务器计费 #FP-增长 #outlook #错误代码2603 #无网络连接 #2603 #算力建设 #数字孪生 #三维可视化 # Qwen3Guard-Gen-8B #ETL管道 #数据预处理 #DocumentReader #FPGA #动态数码管 #Verilog HDL #计时 #DSL #解析器 #SSH密钥 # 高温监控 #ServBay #保姆级教程 #电机正反转 #TMC2240 #DIR引脚控制 #Xshell #Finalshell #生物信息学 #组学 #AI工具集成 #容器化部署 #GESP2级 #GESP二级 #幂 #枚举算法 #Matrox MIL #二次开发 #CMC #odoo #TCP/IP #c #CS336 #Assignment #Experiments #TinyStories #Ablation #量子计算 #车载嵌入式 #Peta #RWK35xx #语音流 #实时传输 #AE #adobe #小智 #Ra-08H #LoRaWAN #TTN # child_process #分子动力学 #化工仿真 #POC #问答 #交付 #Fast R-CNN #深度学习模型 #基础语法 #标识符 #常量与变量 #数据类型 #运算符与表达式 #总体设计 #电源树 #框图 #ACID #多文档事务 #分布式事务 #边缘AI # Kontron # SMARC-sAMX8 #okhttp #starrocks #小艺 #搜索 #SQL注入主机 #L6 #L10 #L9 #Linux多线程 #cesium #可视化 #恒源云 #图形化界面 #Nyquist #控制工程 #频域分析 #VMware创建虚拟机 #远程更新 #缓存更新 #多指令适配 #物料关联计划 #个性化推荐 #BERT模型 #Qwen3-VL # 服务状态监控 # 视觉语言模型 #Bubble chart #气泡图 #环境领域 #UDP服务器 #recvfrom函数 #个人电脑 #Object类 #音诺ai翻译机 #AI翻译机 # Ampere Altra Max #WAN2.2 #Spring Cloud #Grafana #统信操作系统 #ChatPPT #VMWare Tool #电梯 #电梯运力 #电梯门禁 #vncdotool #链接VNC服务器 #如何隐藏光标 #数据报系统 #网络安全大赛 #库存管理 #Typora #状态图 #甘特图 #类图 #时序/序列图 #实体关系ER图 #RK3588 #RK3588J #评估板 #核心板 #高通410 #随身WiFi #OpenWRT #家庭服务器 #caffeine #多级缓存 #xr #AI教程 #JDK #国产技术 #自主可控 #基金 #股票 #ossinsight #fork函数 #进程创建 #进程终止 #session #claudecode #JADX-AI 插件 #Beidou #北斗 #SSR #composer #symfony #java-zookeeper #UID9622 #notion #龍魂系统 #龍骨 #国学易经 #机器狗 #AGV #AMR #机器人乘梯 #DuckDB #协议 #量化交易 #期权分析 #Python金融 #AlphaGBM #金融科技 #CSDN开发云 #Arduino BLDC #核辐射区域探测机器人 #HC05 #蓝牙模块 #体系 #建设 #落地 #云安全 #迁移学习 #密评 #商用密码应用安全性评估