Skip to content

  • 体验新版
    • 正在加载...
  • 登录
  • KnowledgePlanet
  • docdoc
  • Issue
  • #40

doc
doc
  • 项目概览

KnowledgePlanet / doc

通知 1303
Star 822
Fork 117
  • 代码
    • 文件
    • 提交
    • 分支
    • Tags
    • 贡献者
    • 分支图
    • Diff
  • Issue 42
    • 列表
    • 看板
    • 标记
    • 里程碑
  • 合并请求 0
  • DevOps
    • 流水线
    • 流水线任务
    • 计划
  • Wiki 2
    • Wiki
  • 分析
    • 仓库
    • DevOps
  • 项目成员
  • Pages
doc
doc
  • 项目概览
    • 项目概览
    • 详情
    • 发布
  • 仓库
    • 仓库
    • 文件
    • 提交
    • 分支
    • 标签
    • 贡献者
    • 分支图
    • 比较
  • Issue 42
    • Issue 42
    • 列表
    • 看板
    • 标记
    • 里程碑
  • 合并请求 0
    • 合并请求 0
  • Pages
  • DevOps
    • DevOps
    • 流水线
    • 流水线任务
    • 计划
  • 分析
    • 分析
    • 仓库分析
    • DevOps
  • Wiki 2
    • Wiki
  • 成员
    • 成员
  • 收起侧边栏
  • 动态
  • 分支图
  • 创建新Issue
  • 流水线任务
  • 提交
  • Issue看板
已关闭
开放中
Opened 4月 07, 2024 by 小傅哥@Yao__Shun__Yu⛹Owner

token 缓存 cookie 登录案例

在Spring Boot中实现一次性token通常涉及以下步骤:

  1. 生成Token:当用户首次登录时,生成一个唯一的token,并将其存储在服务器端,比如数据库或内存缓存中。

  2. 发送Token:将生成的token发送给客户端,可以通过响应体、响应头或者重定向URL的参数等方式。

  3. 验证Token:当客户端使用token请求服务器时,服务器需要验证token的有效性。如果token有效,服务器将执行相应的操作(比如登录用户)。

  4. Token失效:一旦token被使用,服务器需要立即使其失效,确保它不能被再次使用。

  5. 设置Cookie:在token验证通过后,服务器可以生成一个session或者其他形式的cookie,发送给客户端用于后续的自动登录。

下面是一个简化的示例流程:

@RestController
@RequestMapping("/auth")
public class AuthController {

    private final TokenService tokenService;
    private final UserService userService;

    // 构造器注入服务
    public AuthController(TokenService tokenService, UserService userService) {
        this.tokenService = tokenService;
        this.userService = userService;
    }

    // 登录接口,生成一次性token
    @PostMapping("/login")
    public ResponseEntity<?> login(@RequestBody LoginRequest loginRequest, HttpServletResponse response) {
        // 验证用户凭证
        User user = userService.validateUser(loginRequest.getUsername(), loginRequest.getPassword());
        if (user != null) {
            // 生成token
            String token = tokenService.createToken(user);
            // 发送token给客户端
            return ResponseEntity.ok().body(Collections.singletonMap("token", token));
        }
        return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build();
    }

    // 使用token自动登录接口
    @GetMapping("/auto-login")
    public ResponseEntity<?> autoLogin(@RequestParam("token") String token, HttpServletResponse response) {
        // 验证token
        if (tokenService.validateToken(token)) {
            // token验证成功,获取用户信息
            User user = tokenService.getUserFromToken(token);
            // 设置cookie
            Cookie cookie = new Cookie("SESSIONID", userService.createSession(user));
            response.addCookie(cookie);
            // 使token失效
            tokenService.invalidateToken(token);
            // 返回成功响应
            return ResponseEntity.ok().build();
        }
        return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build();
    }
}

在上面的代码中,TokenService 负责创建、验证和使token失效的逻辑,而UserService 负责用户的验证和session的创建。这只是一个示例,实际的实现可能会涉及更多的安全考虑,比如token的加密、存储和过期策略等。

请注意,这个示例没有包含所有的细节,比如异常处理、日志记录、安全性增强等。在实际应用中,你可能需要使用Spring Security或其他安全框架来帮助你更安全、更方便地实现这些功能。

指派人
分配到
无
里程碑
无
分配里程碑
工时统计
无
截止日期
无
标识: KnowledgePlanet/doc#40
渝ICP备2023009037号

京公网安备11010502055752号

网络110报警服务 Powered by GitLab CE v13.7
开源知识
Git 入门 Pro Git 电子书 在线学 Git
Markdown 基础入门 IT 技术知识开源图谱
帮助
使用手册 反馈建议 博客
《GitCode 隐私声明》 《GitCode 服务条款》 关于GitCode
Powered by GitLab CE v13.7