1. Token 详解

Token(通常指JWT)是一种用于身份验证和授权的令牌机制,包含三部分:

  • Header:算法和类型

  • Payload:携带的用户信息(如用户ID、权限)

  • Signature:签名验证完整性

特点:

  • 无状态,服务端无需存储会话

  • 可包含过期时间,支持跨域


2. Refresh Token 的作用
  • 用途:当Access Token过期时,通过Refresh Token重新获取新的Access Token,无需用户重新登录

  • 流程

    1. 客户端使用过期的Access Token请求资源

    2. 服务端返回Token过期错误

    3. 客户端使用Refresh Token申请新Access Token

    4. 服务端验证Refresh Token并返回新Token

  • 优势:提升安全性,减少用户频繁登录


3. Cookie 和 Session 的区别
特性CookieSession
存储位置客户端浏览器服务端内存或数据库
安全性较低(可能被篡改)较高(服务端控制)
存储容量较小(约4KB)较大(受服务端资源限制)
跨域支持可配置域名限制默认不支持
性能影响无服务端存储开销需服务端存储和查询

4. 文件上传实现与 Spring 解析

前端实现

html

<form method="POST" enctype="multipart/form-data">
  <input type="file" name="file">
  <button type="submit">上传</button>
</form>

Spring 解析

  • 使用 MultipartFile 接口处理上传文件:

java

@PostMapping("/upload")
public String upload(@RequestParam("file") MultipartFile file) {
    String fileName = file.getOriginalFilename();
    file.transferTo(new File("/path/" + fileName));
    return "上传成功";
}
  • 配置 MultipartResolver(如 StandardServletMultipartResolver)解析 multipart/form-data 请求


5. 常见安全漏洞
  1. SQL 注入
    防护:使用预编译语句(MyBatis #{})、ORM 框架

  2. XSS(跨站脚本)
    防护:转义用户输入(如 HtmlUtils.htmlEscape()

  3. CSRF(跨站请求伪造)
    防护:Spring Security 的 CSRF Token

  4. 越权访问
    防护:方法级注解(如 @PreAuthorize

  5. 文件上传漏洞
    防护:校验文件类型、限制上传目录执行权限


6. 秒传实现原理
  • 核心:通过文件哈希值(如 MD5、SHA-1)判断是否已存在相同文件

  • 步骤

    1. 前端计算文件哈希并发送到服务端

    2. 服务端查询哈希值是否存在:

      • 存在 → 直接关联用户与现有文件(秒传成功)

      • 不存在 → 执行完整上传流程

  • 优势:节省存储空间与上传时间


7. 项目架构图示例

text

[客户端] 
    ↓ (HTTP/HTTPS)
[负载均衡器 (Nginx)] 
    ↓
[网关 (Spring Cloud Gateway)]
    ↓
[微服务集群] 
    ├── 用户服务
    ├── 订单服务
    └── 文件服务
    ↓
[公共组件]
    ├── 认证中心 (JWT)
    ├── 配置中心 (Nacos)
    └── 消息队列 (RabbitMQ)
    ↓
[数据存储]
    ├── MySQL (业务数据)
    ├── Redis (缓存)
    └── OSS (文件存储)

8. 家庭服务外部访问方案
  1. 动态DNS服务(如花生壳):

    • 解决家庭宽带无固定公网IP问题

  2. 路由器端口转发

    • 将公网IP的端口映射到内网服务器

  3. 内网穿透工具(如 frp、ngrok):

    • 通过第三方服务器中转流量

  4. 云服务器反向代理

    • 通过云服务器将请求转发到家庭网络


9. DSL(领域特定语言)了解
  • 定义:针对特定领域设计的专用计算机语言

  • 分类

    • 内部DSL:基于宿主语言(如Java Stream API)

    • 外部DSL:独立语法(如SQL、正则表达式)

  • 应用场景

    • Spring Integration 的集成流程配置

    • Elasticsearch 的查询语法

    • Gradle 构建脚本

Logo

欢迎大家加入成都城市开发者社区,“和我在成都的街头走一走”,让我们一起携手,汇聚IT技术潮流,共建社区文明生态!

更多推荐