【无标题】

在 Web 应用的开发中,登录 token 的合理生成、存储、拦截处理以及相关配置是保障系统安全性和用户体验的重要环节。下面将详细介绍这一完整流程。

一、登录 Token 的生成

每次登录时,token 的生成遵循以下三个步骤:

  1. 首先,创建一个新的 HashMap 用于存储相关数据。
  2. 接着,生成一个随机的 UUID(Universally Unique Identifier,通用唯一标识符),并使用 - 进行隔开,以增加其唯一性和复杂性。
  3. 最后,将生成的 UUID 以及一些用户信息放入 map 中,然后通过 JwtUtils.createToken 方法生成 jwtToken

二、登录 Token 的存储

生成的 token 会被存储在前端。前端在获取到请求结果中的 jwtToken 后,通过 localStorage.setItem("token") 将其保存起来。

在 request.js 文件中,会进行进一步的处理。在请求发送之前,通过以下代码将 token 放入请求头中:

service.interceptors.request.use(
    config => {
        if(localStorage.getItem("token")) {
            config.headers.token = localStorage.getItem("token");
        }
        return config;
    },

这样,每次请求操作都会携带这个 token,作为证明用户身份的“钥匙”。

三、登录 Token 的拦截处理

以下是拦截器的代码实现:

public class LoginInterceptor extends HandlerInterceptorAdapter {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // 处理预检
        if(request.getMethod().equals(HttpMethod.OPTIONS.name())) {
            response.setStatus(HttpStatus.NO_CONTENT.value());
            return true;
        }
        String token = request.getHeader("token");
        if(token == null || "".equals(token)) {
            throw new BussinessException(ResultCode.ERROR_TOKEN);
        }
        // 解析token,能拿到令牌中载荷部分的数据
        Claims claims = JwtUtils.parseToken(token);
        String uuid = (String) claims.get("uuid");
        String username = (String) claims.get("username");
        log.info("uuid: " + uuid);
        log.info("username: " + username);
        // redis中通过uuid获取当前用户是否存在,如果存在,而且时间没过期,放行。
        // 如果存在,时间还剩五分钟,续期。
        // 如果不存在,redis中保存的信息过期了。需要重新登录。
        return true;
    }
}

四、配置类

@Configuration
public class WebConfig extends WebMvcConfigurationSupport {

    @Autowired
    private LoginInterceptor loginInterceptor;

    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(loginInterceptor)
              .addPathPatterns("/**"); // 配置拦截器拦截的路径
    }
}

通过以上的机制,我们实现了登录 token 从生成、存储到拦截处理的完整流程,以及相应的配置,有效地保障了系统的安全性和稳定性,为用户提供了可靠的服务。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值