Spring AuthenticationAuditListener 添加有关目标 URL 的信息



Spring引导执行器提供了AuthenticationAuditListener类,该类AbstractAuthenticationEvent公开 Spring 安全身份验证事件。我正在使用自定义事件侦听器记录这些事件。

我试图向这些AbstractAuthenticationEvent公开的事件添加有关请求者尝试连接到的 URL 的其他信息。不幸的是,我所有的尝试都失败了。

我的问题是是否有方便的方法可以使用目标 URL 路径填充这些事件?

正如M.Deinum在评论中建议的那样,提供自定义WebAuthenticationDetailsAuthenticationDetailsSource做到了。

我必须创建所需的 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 安全使用配置的身份验证详细信息源

@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 的访问权限。

最新更新