Spring boot actuator提供了公开Spring安全身份验证事件AbstractAuthenticationEvent的AuthenticationAuditListener类。我使用自定义事件侦听器记录这些事件。
我试图向这些AbstractAuthenticationEvent暴露的事件添加有关请求者尝试连接的URL的附加信息。不幸的是,我所有的尝试都失败了。
我的问题是,是否有方便的方法来填充这些事件的目标URL路径?
发布于 2020-02-12 16:56:15
正如M.Deinum在评论中所建议的那样,提供自定义的WebAuthenticationDetails和AuthenticationDetailsSource就可以做到这一点。
我必须创建所需的WebAuthenticationDetails类
public class ExtendedWebAuthenticationDetails extends WebAuthenticationDetails {
private final String requestUrl;
public ExtendedWebAuthenticationDetails(HttpServletRequest request) {
super(request);
this.requestUrl = request.getRequestURI();
}
public String getRequestUrl() {
return requestUrl;
}
}并在自定义WebAuthenticationDetailsSource中使用它
@Component
public class CustomWebAuthenticationDetailsSource extends WebAuthenticationDetailsSource {
@Override
public WebAuthenticationDetails buildDetails(HttpServletRequest context) {
return new ExtendedWebAuthenticationDetails(context);
}
}最后,告诉Spring security使用配置好的authenticationDetailsSource
@Configuration
@EnableWebSecurity
public class SecurityCommonConfiguration extends WebSecurityConfigurerAdapter {
@Autowired
private WebAuthenticationDetailsSource detailsSource;
...
@Override
protected void configure(HttpSecurity http) throws Exception {
http.httpBasic().authenticationDetailsSource(detailsSource);
}
}因此,所有AbstractAuthenticationEvent触发的事件都会通过getDetails()方法调用返回ExtendedWebAuthenticationDetails。这样就可以访问所需的请求URL。
https://stackoverflow.com/questions/60170515
复制相似问题