diff --git a/scm-webapp/src/main/java/sonia/scm/security/SecureKeyResolver.java b/scm-webapp/src/main/java/sonia/scm/security/SecureKeyResolver.java index a369db66bd..f3dbffcf5b 100644 --- a/scm-webapp/src/main/java/sonia/scm/security/SecureKeyResolver.java +++ b/scm-webapp/src/main/java/sonia/scm/security/SecureKeyResolver.java @@ -112,7 +112,9 @@ public class SecureKeyResolver extends SigningKeyResolverAdapter SecureKey key = store.get(subject); - checkState(key != null, "could not resolve key for subject %s", subject); + if (key == null) { + return getSecureKey(subject).getBytes(); + } return key.getBytes(); } diff --git a/scm-webapp/src/main/java/sonia/scm/web/security/TokenRefreshFilter.java b/scm-webapp/src/main/java/sonia/scm/web/security/TokenRefreshFilter.java index f85c0fbbbd..6747d40228 100644 --- a/scm-webapp/src/main/java/sonia/scm/web/security/TokenRefreshFilter.java +++ b/scm-webapp/src/main/java/sonia/scm/web/security/TokenRefreshFilter.java @@ -1,5 +1,6 @@ package sonia.scm.web.security; +import org.apache.shiro.authc.AuthenticationException; import org.apache.shiro.authc.AuthenticationToken; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -64,7 +65,13 @@ public class TokenRefreshFilter extends HttpFilter { } private void examineToken(HttpServletRequest request, HttpServletResponse response, BearerToken token) { - AccessToken accessToken = resolver.resolve(token); + AccessToken accessToken; + try { + accessToken = resolver.resolve(token); + } catch (AuthenticationException e) { + LOG.trace("could not resolve token", e); + return; + } if (accessToken instanceof JwtAccessToken) { refresher.refresh((JwtAccessToken) accessToken) .ifPresent(jwtAccessToken -> refreshToken(request, response, jwtAccessToken));