io.scalecube.security.tokens.jwt.JwtTokenResolverImpl Maven / Gradle / Ivy
package io.scalecube.security.tokens.jwt;
import io.scalecube.security.tokens.jwt.jsonwebtoken.JsonwebtokenParserFactory;
import java.lang.System.Logger;
import java.lang.System.Logger.Level;
import java.security.Key;
import java.time.Duration;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicReference;
import reactor.core.publisher.Mono;
import reactor.core.scheduler.Scheduler;
import reactor.core.scheduler.Schedulers;
public final class JwtTokenResolverImpl implements JwtTokenResolver {
private static final Logger LOGGER = System.getLogger(JwtTokenResolver.class.getName());
private KeyProvider keyProvider;
private JwtTokenParserFactory tokenParserFactory = new JsonwebtokenParserFactory();
private Scheduler scheduler = Schedulers.boundedElastic();
private Duration cleanupInterval = Duration.ofSeconds(60);
private final Map> keyResolutions = new ConcurrentHashMap<>();
public JwtTokenResolverImpl() {}
private JwtTokenResolverImpl(JwtTokenResolverImpl other) {
this.keyProvider = other.keyProvider;
this.tokenParserFactory = other.tokenParserFactory;
this.scheduler = other.scheduler;
this.cleanupInterval = other.cleanupInterval;
}
/**
* Setter for keyProvider.
*
* @param keyProvider keyProvider
* @return new instance with applied setting
*/
public JwtTokenResolverImpl keyProvider(KeyProvider keyProvider) {
final JwtTokenResolverImpl c = copy();
c.keyProvider = keyProvider;
return c;
}
/**
* Setter for tokenParserFactory.
*
* @param tokenParserFactory tokenParserFactory
* @return new instance with applied setting
*/
public JwtTokenResolverImpl tokenParserFactory(JwtTokenParserFactory tokenParserFactory) {
final JwtTokenResolverImpl c = copy();
c.tokenParserFactory = tokenParserFactory;
return c;
}
/**
* Setter for scheduler.
*
* @param scheduler scheduler
* @return new instance with applied setting
*/
public JwtTokenResolverImpl scheduler(Scheduler scheduler) {
final JwtTokenResolverImpl c = copy();
c.scheduler = scheduler;
return c;
}
/**
* Setter for cleanupInterval.
*
* @param cleanupInterval cleanupInterval
* @return new instance with applied setting
*/
public JwtTokenResolverImpl cleanupInterval(Duration cleanupInterval) {
final JwtTokenResolverImpl c = copy();
c.cleanupInterval = cleanupInterval;
return c;
}
@Override
public Map parseBody(String token) {
JwtTokenParser tokenParser = tokenParserFactory.newParser(token);
JwtToken jwtToken = tokenParser.parseToken();
return jwtToken.body();
}
@Override
public Mono
© 2015 - 2025 Weber Informatics LLC | Privacy Policy