0
点赞
收藏
分享

微信扫一扫

java 登录 token过期

Java登录Token过期处理

1. 流程概述

为了保证系统的安全性和用户信息的保护,很多Web应用都会采用Token认证方式来实现用户登录。Token是一种用于身份验证的令牌,通常由服务器生成并返回给客户端,客户端在后续的请求中携带该Token来进行身份校验。为了保证安全性,Token通常具有一定的过期时间,一旦Token过期,客户端需要重新获取新的Token来继续访问。

下面将介绍一种常见的实现Java登录Token过期处理的方法,帮助刚入行的小白快速掌握该技术。

2. 实现步骤

步骤 描述
1 用户通过用户名和密码提交登录请求
2 服务器验证用户名和密码的正确性
3 服务器生成Token,并设置过期时间
4 服务器将Token返回给客户端
5 客户端在后续请求中携带Token
6 服务器校验Token的有效性和过期时间
7 若Token有效且未过期,则继续处理请求
8 若Token无效或已过期,则要求客户端重新登录

3. 具体实现

3.1. 登录请求处理

首先,我们需要处理用户的登录请求。以下是一个简化的示例代码,用于验证用户名和密码的正确性:

@PostMapping("/login")
public String login(@RequestParam("username") String username, @RequestParam("password") String password) {
    // TODO: 根据用户名和密码验证用户的正确性,此处省略具体实现
    boolean isValidUser = validateUser(username, password);

    if (isValidUser) {
        // 生成并返回Token
        String token = generateToken(username);
        return token;
    } else {
        return "登录失败,用户名或密码错误";
    }
}

3.2. Token生成与过期时间设置

当用户登录成功后,我们需要生成Token并设置过期时间。以下是一个示例代码:

private String generateToken(String username) {
    // 生成Token
    String token = UUID.randomUUID().toString();

    // 设置Token的过期时间
    long expireTime = System.currentTimeMillis() + TOKEN_EXPIRATION_TIME;
    redis.set(token, username);
    redis.expire(token, TOKEN_EXPIRATION_TIME);

    return token;
}

在上述代码中,我们使用UUID生成一个唯一的Token,并将Token和用户名存储到缓存中(这里假设使用Redis作为缓存),然后设置Token的过期时间为当前时间加上一个固定的时间间隔(例如30分钟)。这样,Token就具有了一定的有效期。

3.3. 请求处理与Token校验

当客户端在后续的请求中携带Token时,我们需要对Token进行校验,判断其是否有效以及是否过期。以下是一个示例代码:

@RequestMapping("/api")
public String handleRequest(@RequestParam("token") String token) {
    // 校验Token的有效性和过期时间
    boolean isValidToken = validateToken(token);

    if (isValidToken) {
        // Token有效,继续处理请求
        return "处理请求";
    } else {
        // Token无效或已过期,要求客户端重新登录
        return "Token无效或已过期,请重新登录";
    }
}

private boolean validateToken(String token) {
    // 判断Token是否存在
    if (!redis.exists(token)) {
        return false;
    }
    
    // 判断Token是否过期
    long expireTime = redis.getExpire(token);
    if (expireTime <= 0) {
        return false;
    }

    // 更新Token的过期时间
    redis.expire(token, TOKEN_EXPIRATION_TIME);

    return true;
}

在上述代码中,我们首先判断Token是否存在,如果Token不存在,则说明无效;接着判断Token是否过期,如果过期则说明无效;最后,更新Token的过期时间,延长Token的生命周期。

3.4. 客户端重新登录

当Token无效或已过期时,我们需要要求客户端重新登录。这可以通过返回一个特定的状态码或错误信息来实现。以下是一个示例代码:

@GetMapping
举报

相关推荐

0 条评论