@Override
public Pair<String, Date> create(
final String subject,
final Map<String, Object> claims,
final byte[] authorities,
final boolean replace) {
AccessToken accessToken = accessTokenDAO.findByOwner(subject);
if (accessToken == null) {
accessToken = entityFactory.newEntity(AccessToken.class);
accessToken.setKey(SecureRandomUtils.generateRandomUUID().toString());
accessToken = replace(subject, claims, authorities, accessToken);
} else if (replace || accessToken.getExpiryTime() == null || accessToken.getExpiryTime().before(new Date())) {
accessToken = replace(subject, claims, authorities, accessToken);
}
return Pair.of(accessToken.getBody(), accessToken.getExpiryTime());
}