Skip to content

Commit bebe392

Browse files
committed
refactor: adjust remember-me log levels for production readiness
- WARN: cookie theft detected, optimistic lock failure, device series mismatch — security events and anomalies operators need to see - DEBUG: all routine operations (auto-login, token lookup, rotation, cooldown skip, previous token acceptance, token expiry, creation) - ERROR: token creation failure (unchanged) At default INFO level, production logs stay clean; WARN surfaces actionable events; DEBUG gives full visibility for troubleshooting.
1 parent 97b369b commit bebe392

1 file changed

Lines changed: 16 additions & 16 deletions

File tree

application/src/main/java/run/halo/app/security/authentication/rememberme/PersistentTokenBasedRememberMeServices.java

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -99,16 +99,16 @@ protected Mono<UserDetails> processAutoLoginCookie(String[] cookieTokens, Server
9999
}
100100
var presentedSeries = cookieTokens[0];
101101
var presentedToken = cookieTokens[1];
102-
log.info("Processing remember-me auto-login for series '{}'", presentedSeries);
102+
log.debug("Processing remember-me auto-login for series '{}'", presentedSeries);
103103
return this.tokenRepository
104104
.getTokenForSeries(presentedSeries)
105105
.switchIfEmpty(Mono.error(() -> {
106-
log.info("No remember-me token found for series '{}'", presentedSeries);
106+
log.debug("No remember-me token found for series '{}'", presentedSeries);
107107
return new RememberMeAuthenticationException(
108108
"No persistent token found for series id: " + presentedSeries);
109109
}))
110-
.doOnNext(token -> log.info(
111-
"Found remember-me token for user '{}', series '{}', lastUsed={}, " + "tokenMatch={}",
110+
.doOnNext(token -> log.debug(
111+
"Found remember-me token for user '{}', series '{}', lastUsed={}, tokenMatch={}",
112112
token.getSpec().getUsername(),
113113
token.getSpec().getSeries(),
114114
token.getSpec().getLastUsed(),
@@ -117,10 +117,10 @@ protected Mono<UserDetails> processAutoLoginCookie(String[] cookieTokens, Server
117117
.delayUntil(token -> {
118118
if (!Objects.equals(token.getSpec().getTokenValue(), presentedToken)) {
119119
if (isTokenStolen(token, presentedToken)) {
120-
log.info(
120+
log.warn(
121121
"Cookie theft detected for user '{}', series '{}': "
122122
+ "presentedToken does not match stored token "
123-
+ "and is outside grace period or does not match previous token. "
123+
+ "and is outside cooldown or does not match previous token. "
124124
+ "Removing all tokens for this user.",
125125
token.getSpec().getUsername(),
126126
token.getSpec().getSeries());
@@ -130,13 +130,13 @@ protected Mono<UserDetails> processAutoLoginCookie(String[] cookieTokens, Server
130130
Invalid remember-me token (Series/token) mismatch. \
131131
Implies previous cookie theft attack.""")));
132132
}
133-
log.info(
134-
"Token mismatch within grace period for user '{}', series '{}'",
133+
log.debug(
134+
"Previous remember-me token accepted for user '{}', series '{}'",
135135
token.getSpec().getUsername(),
136136
token.getSpec().getSeries());
137137
}
138138
if (isTokenExpired(token)) {
139-
log.info(
139+
log.debug(
140140
"Remember-me token expired for user '{}', series '{}', lastUsed={}",
141141
token.getSpec().getUsername(),
142142
token.getSpec().getSeries(),
@@ -159,7 +159,7 @@ protected Mono<UserDetails> processAutoLoginCookie(String[] cookieTokens, Server
159159
rotationCooldown);
160160
return Mono.just(token);
161161
}
162-
log.info(
162+
log.debug(
163163
"Rotating remember-me token for user '{}', series '{}'",
164164
token.getSpec().getUsername(),
165165
token.getSpec().getSeries());
@@ -168,12 +168,12 @@ protected Mono<UserDetails> processAutoLoginCookie(String[] cookieTokens, Server
168168
token.getSpec().setLastUsed(clock.instant());
169169
return tokenRepository
170170
.updateToken(token)
171-
.doOnNext(updated -> log.info(
171+
.doOnNext(updated -> log.debug(
172172
"Remember-me token rotated successfully for user '{}', series '{}'",
173173
updated.getSpec().getUsername(),
174174
updated.getSpec().getSeries()))
175175
.onErrorResume(OptimisticLockingFailureException.class, e -> {
176-
log.info(
176+
log.warn(
177177
"Optimistic locking failure during token rotation "
178178
+ "for user '{}', series '{}', "
179179
+ "falling back to fresh token",
@@ -192,7 +192,7 @@ private Mono<Void> validateDevice(ServerWebExchange exchange, RememberMeToken to
192192
return deviceService
193193
.resolveCurrentDevice(exchange)
194194
.switchIfEmpty(Mono.error(() -> {
195-
log.info(
195+
log.debug(
196196
"Remember-me device validation failed for user '{}', series '{}': "
197197
+ "no device cookie found",
198198
token.getSpec().getUsername(),
@@ -203,7 +203,7 @@ private Mono<Void> validateDevice(ServerWebExchange exchange, RememberMeToken to
203203
.filter(d -> Objects.equals(
204204
d.getSpec().getRememberMeSeriesId(), token.getSpec().getSeries()))
205205
.switchIfEmpty(Mono.error(() -> {
206-
log.info(
206+
log.warn(
207207
"Remember-me device validation failed for user '{}', series '{}': "
208208
+ "device series ID does not match token series",
209209
token.getSpec().getUsername(),
@@ -255,7 +255,7 @@ private boolean isRecentlyRotated(RememberMeToken token) {
255255
@Override
256256
protected Mono<Void> onLoginSuccess(ServerWebExchange exchange, Authentication successfulAuthentication) {
257257
var username = successfulAuthentication.getName();
258-
log.info("Creating new remember-me persistent login for user '{}'", username);
258+
log.debug("Creating new remember-me persistent login for user '{}'", username);
259259
var t = new RememberMeToken();
260260
t.setMetadata(new Metadata());
261261
t.setSpec(new RememberMeToken.Spec());
@@ -269,7 +269,7 @@ protected Mono<Void> onLoginSuccess(ServerWebExchange exchange, Authentication s
269269
return this.tokenRepository
270270
.createNewToken(t)
271271
.doOnNext(created -> {
272-
log.info(
272+
log.debug(
273273
"Remember-me token created for user '{}', series '{}'",
274274
username,
275275
created.getSpec().getSeries());

0 commit comments

Comments
 (0)