Skip to content

Commit

Permalink
[FIX] fcm token expiration
Browse files Browse the repository at this point in the history
  • Loading branch information
ChoiJHyuk committed Oct 27, 2024
1 parent 21ce832 commit fa1c330
Show file tree
Hide file tree
Showing 6 changed files with 39 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import com.fourback.bemajor.domain.user.dto.response.UserInquiryResponseDto;
import com.fourback.bemajor.domain.user.entity.UserEntity;
import com.fourback.bemajor.domain.user.repository.UserRepository;
import com.fourback.bemajor.global.common.enums.ExpiredTimeEnum;
import com.fourback.bemajor.global.common.enums.RedisKeyPrefixEnum;
import com.fourback.bemajor.global.common.service.RedisService;
import com.fourback.bemajor.global.exception.kind.NotFoundException;
Expand Down Expand Up @@ -37,7 +38,8 @@ public List<Pair<String, String>> save(UserLoginRequestDto requestDto) {
UserEntity user = this.findOrCreateUser(oauth2Id);
this.restoreUserIfDeleted(user);

redisService.setValue(RedisKeyPrefixEnum.FCM, user.getId(), requestDto.getFcmToken());
redisService.setValueWithExpiredTime(RedisKeyPrefixEnum.FCM, user.getId(),
requestDto.getFcmToken(), ExpiredTimeEnum.FCM.getExpiredTime());

return jwtUtil.createTokens(user.getId(), user.getRole());
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.fourback.bemajor.global.common.enums;

import lombok.Getter;

@Getter
public enum ExpiredTimeEnum {
ACCESS(600000L),
REFRESH(86400000L),
FCM(86460000L);

private final long expiredTime;

ExpiredTimeEnum(long expiredTime) {
this.expiredTime = expiredTime;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,8 @@
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.web.socket.WebSocketSession;

import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;

@Service
Expand All @@ -24,8 +22,8 @@ public void setValueWithExpiredTime(RedisKeyPrefixEnum prefixEnum, Long id,
value, expiredTime, TimeUnit.MILLISECONDS);
}

public void setValue(RedisKeyPrefixEnum prefixEnum, Long id, String value) {
stringRedisTemplate.opsForValue().set(prefixEnum.getDescription() + id, value);
public void extendExpiration(RedisKeyPrefixEnum prefixEnum, Long id, long expiredTime) {
stringRedisTemplate.expire(prefixEnum.getDescription() + id, expiredTime, TimeUnit.MILLISECONDS);
}

public void deleteKey(RedisKeyPrefixEnum prefixEnum, Long id) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
.addFilterBefore(new JWTExceptionFilter(objectMapper), CustomLogoutFilter.class);

http
.addFilterAfter(new ReissueTokenFilter(jwtUtil), JWTFilter.class);
.addFilterAfter(new ReissueTokenFilter(jwtUtil, redisService), JWTFilter.class);

return http.build();
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.fourback.bemajor.global.security.jwt;

import com.fourback.bemajor.global.common.enums.ExpiredTimeEnum;
import com.fourback.bemajor.global.common.enums.RedisKeyPrefixEnum;
import com.fourback.bemajor.global.common.service.RedisService;
import io.jsonwebtoken.Jwts;
Expand Down Expand Up @@ -49,16 +50,17 @@ public List<Pair<String, String>> createTokens(Long userId, String role) {
String access = "access";
String refresh = "refresh";

long expiredTime = 86400000L;

List<Pair<String, String>> tokens = new ArrayList<>(2);

tokens.add(Pair.of(access, this.createToken(access, userId, role, 600000L)));
tokens.add(Pair.of(access, this.createToken(
access, userId, role, ExpiredTimeEnum.ACCESS.getExpiredTime())));

String refreshToken = this.createToken(refresh, userId, role, ExpiredTimeEnum.REFRESH.getExpiredTime());

String refreshToken = this.createToken(refresh, userId, role, expiredTime);
tokens.add(Pair.of(refresh, refreshToken));

redisService.setValueWithExpiredTime(RedisKeyPrefixEnum.REFRESH, userId, refreshToken, expiredTime);
redisService.setValueWithExpiredTime(
RedisKeyPrefixEnum.REFRESH, userId, refreshToken, ExpiredTimeEnum.REFRESH.getExpiredTime());

return tokens;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package com.fourback.bemajor.global.security.jwt;

import com.fourback.bemajor.global.common.enums.ExpiredTimeEnum;
import com.fourback.bemajor.global.common.enums.RedisKeyPrefixEnum;
import com.fourback.bemajor.global.common.service.RedisService;
import com.fourback.bemajor.global.exception.kind.InvalidTokenException;
import com.fourback.bemajor.global.exception.kind.TokenExpiredException;
import io.jsonwebtoken.ExpiredJwtException;
Expand All @@ -17,9 +20,11 @@
@Slf4j
public class ReissueTokenFilter extends OncePerRequestFilter {
private final JWTUtil jwtUtil;
private final RedisService redisService;

public ReissueTokenFilter(final JWTUtil jwtUtil) {
public ReissueTokenFilter(final JWTUtil jwtUtil, RedisService redisService) {
this.jwtUtil = jwtUtil;
this.redisService = redisService;
}

@Override
Expand Down Expand Up @@ -49,6 +54,9 @@ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse
List<Pair<String, String>> pairs = jwtUtil.createTokens(userId, role);
pairs.forEach(pair -> response.setHeader(pair.getLeft(), pair.getRight()));

redisService.extendExpiration(
RedisKeyPrefixEnum.FCM, userId, ExpiredTimeEnum.FCM.getExpiredTime());

response.setStatus(HttpServletResponse.SC_OK);
return;
}
Expand Down

0 comments on commit fa1c330

Please sign in to comment.