ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

boot-react REST API 参考:/api/session 认证端点与 x-auth-token 令牌机制详解

boot-react REST API 参考:/api/session 认证端点与 x-auth-token 令牌机制详解 boot-react REST API 参考/api/session 认证端点与 x-auth-token 令牌机制详解【免费下载链接】boot-reactA starter application with spring boot and react项目地址: https://gitcode.com/gh_mirrors/bo/boot-reactboot-react 是一个基于 Spring Boot React 的开源 starter 项目。本文详解其核心 REST API——/api/session认证端点以及基于x-auth-token请求头的无状态令牌机制帮助你快速理解登录、会话查询与登出的完整流程。 一分钟看懂无状态认证的三步流程boot-react 的 API 设计是完全无状态的stateless。前端不依赖浏览器 Cookie而是通过自定义请求头维持登录状态整体流程如下步骤动作说明1️⃣ 登录POST /api/session提交用户名密码服务端校验后签发令牌2️⃣ 携带令牌请求头附加x-auth-token前端把令牌存入 localStorage每次请求自动带上3️⃣ 恢复会话服务端按令牌查 Redis通过令牌从 Redis 中取回会话数据无需 Cookie这种设计的最大好处是会话统一存放在 Redis 中应用可以随意横向扩容到多台服务器任意一台都能识别用户身份。 /api/session 端点详解认证端点的实现集中在 AuthenticationResource.java一个/api/session路径对应三种 HTTP 方法POST /api/session —— 登录接口请求体JSON字段定义见 Credentials.java{ username: user, password: password }成功响应200返回 User.java 对象{ userName: user, token: abc123-session-id, authenticated: true }更关键的是响应头中会携带x-auth-token前端正是从这里拿到令牌。失败响应401密码错误时全局异常处理器 AuthenticationExceptionHandler.java 会返回统一的 ErrorMessage.java 结构{ message: Bad credentials, messageKey: login.error.badLogin }messageKey是一个国际化键前端用它从语言包frontend/assets/lang/中取出对应语言的错误提示支持多语言显示。GET /api/session —— 查询当前会话用于页面刷新后静默恢复登录态只要请求头带有有效的x-auth-token就返回当前User对象未登录时返回null前端据此判断是否跳转到登录页。DELETE /api/session —— 登出接口调用后服务端直接使会话失效session.invalidate()。注意该操作会同时注销所有浏览器中同一账号的会话因为令牌指向的是 Redis 中的同一条会话记录。 x-auth-token 令牌机制的工作原理这是整个项目的灵魂值得拆开看会话策略切换Spring Security 默认用 CookieJSESSIONID绑定会话。boot-react 通过HeaderHttpSessionStrategy把它换成了自定义请求头——两种配置都做了这件事EmbeddedSessionConfig.java开发模式ExternalRedisConfig.javaRedis 模式前端自动附加令牌在 axios.js 中一个 axios 请求拦截器从 localStorage 读取auth-token并自动写入每个请求的x-auth-token头开发者无需手动传参。令牌失效自动跳转同一文件中的响应拦截器axios.js会捕获 403 错误清掉本地令牌并触发登出跳转避免用户卡在失效状态。登录成功后存令牌authentication.js 的loginaction 在请求成功后从响应头取出x-auth-token存入 localStorage再跳转回用户原本想访问的页面。 权限规则一览接口级别的访问控制定义在 SecurityConfiguration.java请求所需权限/api/session登录/登出/查会话无需认证permitAllGET /api/**需登录authenticatedPOST / PUT / DELETE /api/**需 ADMIN 角色项目内置了一个内存测试账号方便上手user / passwordUSER 角色见 SecurityConfiguration.java。后端还有对应测试用例 AuthenticationSpec.groovy 验证未登录访问返回 403、登录后返回 200。️ 会话存储两种模式怎么选模式激活方式存储位置适用场景内存模式默认不激活 redis profile普通 Map本地开发重启即失效Redis 模式--spring.profiles.activeredisRedis 服务器生产环境、多实例部署Redis 模式下建议直接使用根目录的 docker-compose.yml一条docker-compose up -d就能同时拉起应用和 Redis。 快速上手三条命令跑通完整流程以 curl 为例完整体验登录 → 带令牌请求 → 登出# 1. 登录从响应头拿到 x-auth-token curl -i -X POST http://localhost:8080/api/session \ -H Content-Type: application/json \ -d {username:user,password:password} # 2. 携带令牌访问受保护资源 curl http://localhost:8080/api/simple -H x-auth-token: 上一步的令牌 # 3. 登出使令牌失效 curl -X DELETE http://localhost:8080/api/session -H x-auth-token: 令牌 前端如何配合路由守卫前端在 privateRoute.js 中封装了路由守卫受保护页面挂载时会检查 Redux 中的登录状态未登录则自动跳转登录页并记录来源路径登录成功后无缝跳回。登录表单的实现见 LoginForm.js 与 LoginPage.js。 小结/api/session一个端点管三件事POST 登录、GET 查会话、DELETE 登出x-auth-token请求头取代 Cookie让 REST API 真正无状态配合 Redis 可水平扩展权限分层清晰登录接口放行、读接口需登录、写接口需 ADMIN开发用内存模式零依赖生产切 redis profile 即可切换成本极低。这套令牌 Redis 会话的模式麻雀虽小五脏俱全非常适合作为学习 Spring Boot React 前后端认证联调的入门范本。【免费下载链接】boot-reactA starter application with spring boot and react项目地址: https://gitcode.com/gh_mirrors/bo/boot-react创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表