springboot+jwt 기반 으로 token 리 셋 프로 세 스 분석 실현

3843 단어 springbootjwttoken
얼마 전에 spring boot+jwt 의 통합 에 대해 이 야 기 를 했 지만 일부 원인(개인 이 게 으 름)으로 인해 token 의 갱신 문 제 를 업데이트 하지 않 았 습 니 다.오늘 은 다른 사람과 이 야 기 를 나 누 었 고 업무 중의 token 의 갱신 방식 에 대해 이 야 기 를 나 누 었 습 니 다.그래서 여기 서 제 가 아 는 점 을 기록 하고 필요 한 친구 들 에 게 도움 을 주 고 제안 도 해 주 고 싶 습 니 다.말 이 많 지 않 으 니 코드 를 달 아 라!
1:이러한 방식 은 온라인 리 셋 입 니 다.예 를 들 어 설 정 된 token 유효기간 은 30min 입 니 다.그러면 자원 에 접근 할 때마다 차단기 에서 token 이 만 료 되 었 는 지 판단 합 니 다.만 료 되 지 않 으 면 token 을 리 셋 하 는 시간 은 30min 이 고 그렇지 않 으 면 다시 로그 인 합 니 다.주의해 야 할 것 은 이런 방식 입 니 다.저 는 로그 인 한 후에 token 에 redis 가 존재 합 니 다.

//      token  redis
    String token = JwtUtil.sign(userName,user.getId());
    redisUtil.set(UserConstants.PREFIX_USER_TOKEN + token, token,UserConstants.TOKEN_EXPIRE_TIME);
    Map map=new HashMap();
    map.put("token", token);
    return Result.success(map);
    //       token,   token    
    String token = req.getHeader(UserConstants.ACCESS_TOKEN);
    if (Strings.isNullOrEmpty(token)) {
      return false;
    }
    Object reqToken=redisUtil.get(UserConstants.PREFIX_USER_TOKEN+token);
    if (ObjectUtils.isEmpty(reqToken)) {
      return false;
    }
    if(redisUtil.getExpire(UserConstants.PREFIX_USER_TOKEN+token) <1){
      return false;
    }
    redisUtil.set(UserConstants.PREFIX_USER_TOKEN + token, token,UserConstants.TOKEN_EXPIRE_TIME);
    return true;
2.이런 방식 은 비밀 로그 인 을 면제 하 는 것 입 니 다.다시 말 하면 로그 인 한 후에 계 정 비밀 번 호 를 통 해 로그 인 하지 않 아 도 됩 니 다.사고방식 은 바로 token 을 생 성 할 때 refToken 을 생 성하 여 새로 고침 하 는 것 입 니 다.예 를 들 어 제 token 설정 의 유효기간 은 5 분 이 고 refToken 설정 은 일주일 입 니 다.그러면 요청 할 때 token 이 만 료 되 었 는 지 판단 합 니 다.만 료 되 었 다 면 refToken 의 시간 이 만 료 되 었 는 지,만 료 되 지 않 았 는 지 판단 하고 새로운 token 을 전단 에 생 성 하 는 동시에 이 refToken 을 리 셋 합 니 다.refToken 이 만 료 되 었 다 면 다시 로그 인 합 니 다.주의해 야 할 것 은 이번에 생 성 된 token 은 redis 에 존재 하지 않 고 refToken 을 redis 에 존재 합 니 다.

//   token
    String token = JwtUtil.sign(userName,user.getId());
    //  token,    
    String refToken=UUID.randomUUID().toString().replaceAll("-","");
    redisUtil.set(UserConstants.PREFIX_USER_TOKEN + token, refToken,UserConstants.TOKEN_EXPIRE_TIME);
    Map map=new HashMap();
    map.put("token", token);
    map.put("refToken", refToken);
    return Result.success(map);

    //         token,      ,   redis refToken    
    if (!JwtUtil.verify(token)) {
      if(redisUtil.getExpire(UserConstants.PREFIX_USER_TOKEN+token)>=1){
        HttpServletResponse httpServletResponse = (HttpServletResponse) response;
        String newRefToken=UUID.randomUUID().toString().replaceAll("-","");
        Integer userId=Integer.parseInt(JwtUtil.getUserId(token));
        User user=userService.selectOne(userId);
        String newToken=JwtUtil.sign(user.getUserName(),user.getId());
        httpServletResponse.setHeader("newToken",newToken);
        httpServletResponse.setHeader("newRefToken",newRefToken);
        return true;
      }else{
        return false;
      }
    }
3.내 가 postman 에서 테스트 한 결 과 를 붙인다.
로그 인 후 돌아 오 는 token 과 refToken 입 니 다.

로그 인 성공 후 표시:

여 기 는 token 이 만 료 된 후 refToken 이 새로 고침 한 token 입 니 다.

refToken 이 만 료 된 후 접근 할 때 설정 한 디 스 플레이 입 니 다.

이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기