最近从 Spring Security 5.3.4 升级到 5.7.6,从那时起,我看到某些关键字后的日志中的数据被删除。例如,当日志消息包含“key”、“token”或“secret”等单词时,这些关键字后面的字符串将被擦除。
一些例子...
Looking up record by key word
变成
Lookup up record by key***
o.s.w.s.MyTokenAuthorizationService successful login, continue
变成
o.s.w.s.MyToken***, continue
理解这样做的目的是为了防止记录机密、身份验证令牌和密钥,但 Spring 通常不准确,并且会擦除调试所需的数据
例如
Logging Request: GET mysite.com/fetchData?primaryKey=col1&value=77
变成
Logging Request: GET mysite.com/fetchData?primaryKey***
有什么方法可以防止 Spring 擦除这些数据吗?
已尝试搜索文档以查找任何提及此行为或如何禁用它的信息,但没有成功。
为了验证这些关键字是否确实触发了数据清理,请尝试将“key”替换为“k3y”,将“token”替换为“t0ken”,将“secret”替换为“s3cret”。一切都记录下来,无需擦洗。
在 Spring Security 5.7 中,引入了“清理日志输出中的敏感数据”。这会自动清理日志中的敏感数据,以防止意外泄露,例如密码、令牌等...... 要禁用此功能并防止 Spring 清理数据,请在 Spring Security 配置中配置 logSanitizer 属性。
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
// Your security configuration
http.authorizeRequests()
// ...
.and()
.logSanitizer(new NoOpSanitizingLogMessageBuilder());
}
}