jwt settings service instead jwt settings data object
This commit is contained in:
parent
7c8db6cac7
commit
5ea3c9ff6a
@ -24,7 +24,6 @@ import org.thingsboard.server.common.data.security.model.JwtToken;
|
||||
@ConfigurationProperties(prefix = "security.jwt")
|
||||
@Data
|
||||
public class JwtSettings {
|
||||
|
||||
/**
|
||||
* {@link JwtToken} will expire after this time.
|
||||
*/
|
||||
|
||||
@ -88,7 +88,6 @@ public class ThingsboardInstallService {
|
||||
@Autowired
|
||||
private ConditionValidatorUpgradeService conditionValidatorUpgradeService;
|
||||
|
||||
|
||||
public void performInstall() {
|
||||
try {
|
||||
if (isUpgrade) {
|
||||
|
||||
@ -25,7 +25,7 @@ import org.thingsboard.server.common.data.CacheConstants;
|
||||
import org.thingsboard.server.common.data.id.UserId;
|
||||
import org.thingsboard.server.common.data.security.event.UserAuthDataChangedEvent;
|
||||
import org.thingsboard.server.common.data.security.model.JwtToken;
|
||||
import org.thingsboard.server.config.JwtSettings;
|
||||
import org.thingsboard.server.config.JwtSettingsService;
|
||||
import org.thingsboard.server.service.security.model.token.JwtTokenFactory;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
@ -39,7 +39,7 @@ import static java.util.concurrent.TimeUnit.SECONDS;
|
||||
public class TokenOutdatingService {
|
||||
private final CacheManager cacheManager;
|
||||
private final JwtTokenFactory tokenFactory;
|
||||
private final JwtSettings jwtSettings;
|
||||
private final JwtSettingsService jwtSettingsService;
|
||||
private Cache usersUpdateTimeCache;
|
||||
|
||||
@PostConstruct
|
||||
@ -58,7 +58,7 @@ public class TokenOutdatingService {
|
||||
|
||||
return Optional.ofNullable(usersUpdateTimeCache.get(toKey(userId), Long.class))
|
||||
.map(outdatageTime -> {
|
||||
if (System.currentTimeMillis() - outdatageTime <= SECONDS.toMillis(jwtSettings.getRefreshTokenExpTime())) {
|
||||
if (System.currentTimeMillis() - outdatageTime <= SECONDS.toMillis(jwtSettingsService.getJwtSettings().getRefreshTokenExpTime())) {
|
||||
return MILLISECONDS.toSeconds(issueTime) < MILLISECONDS.toSeconds(outdatageTime);
|
||||
} else {
|
||||
/*
|
||||
|
||||
@ -24,9 +24,9 @@ import io.jsonwebtoken.MalformedJwtException;
|
||||
import io.jsonwebtoken.SignatureAlgorithm;
|
||||
import io.jsonwebtoken.SignatureException;
|
||||
import io.jsonwebtoken.UnsupportedJwtException;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.security.authentication.BadCredentialsException;
|
||||
import org.springframework.security.core.GrantedAuthority;
|
||||
import org.springframework.stereotype.Component;
|
||||
@ -35,7 +35,7 @@ import org.thingsboard.server.common.data.id.TenantId;
|
||||
import org.thingsboard.server.common.data.id.UserId;
|
||||
import org.thingsboard.server.common.data.security.Authority;
|
||||
import org.thingsboard.server.common.data.security.model.JwtToken;
|
||||
import org.thingsboard.server.config.JwtSettings;
|
||||
import org.thingsboard.server.config.JwtSettingsService;
|
||||
import org.thingsboard.server.service.security.exception.JwtExpiredTokenException;
|
||||
import org.thingsboard.server.service.security.model.JwtTokenPair;
|
||||
import org.thingsboard.server.service.security.model.SecurityUser;
|
||||
@ -49,6 +49,7 @@ import java.util.UUID;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Component
|
||||
@RequiredArgsConstructor
|
||||
@Slf4j
|
||||
public class JwtTokenFactory {
|
||||
|
||||
@ -61,12 +62,7 @@ public class JwtTokenFactory {
|
||||
private static final String TENANT_ID = "tenantId";
|
||||
private static final String CUSTOMER_ID = "customerId";
|
||||
|
||||
private final JwtSettings settings;
|
||||
|
||||
@Autowired
|
||||
public JwtTokenFactory(JwtSettings settings) {
|
||||
this.settings = settings;
|
||||
}
|
||||
private final JwtSettingsService jwtSettingsService;
|
||||
|
||||
/**
|
||||
* Factory method for issuing new JWT Tokens.
|
||||
@ -79,7 +75,7 @@ public class JwtTokenFactory {
|
||||
UserPrincipal principal = securityUser.getUserPrincipal();
|
||||
|
||||
JwtBuilder jwtBuilder = setUpToken(securityUser, securityUser.getAuthorities().stream()
|
||||
.map(GrantedAuthority::getAuthority).collect(Collectors.toList()), settings.getTokenExpirationTime());
|
||||
.map(GrantedAuthority::getAuthority).collect(Collectors.toList()), jwtSettingsService.getJwtSettings().getTokenExpirationTime());
|
||||
jwtBuilder.claim(FIRST_NAME, securityUser.getFirstName())
|
||||
.claim(LAST_NAME, securityUser.getLastName())
|
||||
.claim(ENABLED, securityUser.isEnabled())
|
||||
@ -138,7 +134,7 @@ public class JwtTokenFactory {
|
||||
public JwtToken createRefreshToken(SecurityUser securityUser) {
|
||||
UserPrincipal principal = securityUser.getUserPrincipal();
|
||||
|
||||
String token = setUpToken(securityUser, Collections.singletonList(Authority.REFRESH_TOKEN.name()), settings.getRefreshTokenExpTime())
|
||||
String token = setUpToken(securityUser, Collections.singletonList(Authority.REFRESH_TOKEN.name()), jwtSettingsService.getJwtSettings().getRefreshTokenExpTime())
|
||||
.claim(IS_PUBLIC, principal.getType() == UserPrincipal.Type.PUBLIC_ID)
|
||||
.setId(UUID.randomUUID().toString()).compact();
|
||||
|
||||
@ -188,16 +184,16 @@ public class JwtTokenFactory {
|
||||
|
||||
return Jwts.builder()
|
||||
.setClaims(claims)
|
||||
.setIssuer(settings.getTokenIssuer())
|
||||
.setIssuer(jwtSettingsService.getJwtSettings().getTokenIssuer())
|
||||
.setIssuedAt(Date.from(currentTime.toInstant()))
|
||||
.setExpiration(Date.from(currentTime.plusSeconds(expirationTime).toInstant()))
|
||||
.signWith(SignatureAlgorithm.HS512, settings.getTokenSigningKey());
|
||||
.signWith(SignatureAlgorithm.HS512, jwtSettingsService.getJwtSettings().getTokenSigningKey());
|
||||
}
|
||||
|
||||
public Jws<Claims> parseTokenClaims(JwtToken token) {
|
||||
try {
|
||||
return Jwts.parser()
|
||||
.setSigningKey(settings.getTokenSigningKey())
|
||||
.setSigningKey(jwtSettingsService.getJwtSettings().getTokenSigningKey())
|
||||
.parseClaimsJws(token.getToken());
|
||||
} catch (UnsupportedJwtException | MalformedJwtException | IllegalArgumentException | SignatureException ex) {
|
||||
log.debug("Invalid JWT Token", ex);
|
||||
|
||||
@ -24,6 +24,7 @@ import org.thingsboard.server.common.data.id.UserId;
|
||||
import org.thingsboard.server.common.data.security.Authority;
|
||||
import org.thingsboard.server.common.data.security.model.JwtToken;
|
||||
import org.thingsboard.server.config.JwtSettings;
|
||||
import org.thingsboard.server.config.JwtSettingsService;
|
||||
import org.thingsboard.server.service.security.model.SecurityUser;
|
||||
import org.thingsboard.server.service.security.model.UserPrincipal;
|
||||
import org.thingsboard.server.service.security.model.token.AccessJwtToken;
|
||||
@ -36,6 +37,8 @@ import java.util.UUID;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.mockito.BDDMockito.willReturn;
|
||||
import static org.mockito.Mockito.mock;
|
||||
|
||||
public class JwtTokenFactoryTest {
|
||||
|
||||
@ -50,7 +53,10 @@ public class JwtTokenFactoryTest {
|
||||
jwtSettings.setTokenExpirationTime((int) TimeUnit.HOURS.toSeconds(2));
|
||||
jwtSettings.setRefreshTokenExpTime((int) TimeUnit.DAYS.toSeconds(7));
|
||||
|
||||
tokenFactory = new JwtTokenFactory(jwtSettings);
|
||||
JwtSettingsService jwtSettingsService = mock(JwtSettingsService.class);
|
||||
willReturn(jwtSettings).given(jwtSettingsService).getJwtSettings();
|
||||
|
||||
tokenFactory = new JwtTokenFactory(jwtSettingsService);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@ -27,6 +27,7 @@ import org.thingsboard.server.common.data.security.UserCredentials;
|
||||
import org.thingsboard.server.common.data.security.event.UserAuthDataChangedEvent;
|
||||
import org.thingsboard.server.common.data.security.model.JwtToken;
|
||||
import org.thingsboard.server.config.JwtSettings;
|
||||
import org.thingsboard.server.config.JwtSettingsService;
|
||||
import org.thingsboard.server.dao.customer.CustomerService;
|
||||
import org.thingsboard.server.dao.user.UserService;
|
||||
import org.thingsboard.server.service.security.auth.jwt.JwtAuthenticationProvider;
|
||||
@ -50,6 +51,7 @@ import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.BDDMockito.willReturn;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
@ -71,10 +73,14 @@ public class TokenOutdatingTest {
|
||||
jwtSettings.setTokenExpirationTime((int) MINUTES.toSeconds(10));
|
||||
jwtSettings.setRefreshTokenExpTime((int) DAYS.toSeconds(7));
|
||||
jwtSettings.setTokenSigningKey("secret");
|
||||
tokenFactory = new JwtTokenFactory(jwtSettings);
|
||||
|
||||
JwtSettingsService jwtSettingsService = mock(JwtSettingsService.class);
|
||||
willReturn(jwtSettings).given(jwtSettingsService).getJwtSettings();
|
||||
|
||||
tokenFactory = new JwtTokenFactory(jwtSettingsService);
|
||||
|
||||
cacheManager = new ConcurrentMapCacheManager();
|
||||
tokenOutdatingService = new TokenOutdatingService(cacheManager, tokenFactory, jwtSettings);
|
||||
tokenOutdatingService = new TokenOutdatingService(cacheManager, tokenFactory, jwtSettingsService);
|
||||
tokenOutdatingService.initCache();
|
||||
|
||||
userId = new UserId(UUID.randomUUID());
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user