Код: Выделить всё
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.METHOD})
public @interface Confidential {
}
Код: Выделить всё
public class PiiPojo {
@Confidential
private String secretName;
... other fields here ...
@Confidential
public String getSecretName() {
return secretName;
}
}
Код: Выделить всё
@Aspect
public class PIILoggerAspect {
@Around("execution(* org.slf4j.Logger.*(..))")
public Object piiMasker(ProceedingJoinPoint joinPoint) throws Throwable {
var joinPointArgs = joinPoint.getArgs();
// ... PII masking stuff here ...
return joinPoint.proceed();
}
}
Код, выполняющий регистрацию, использует делегирующий регистратор для регистрации такой информации:
Код: Выделить всё
// Log information from the PII POJO
public void someMethod(PiiPojo pojo) {
log.info("Passing in secret name: {}", pojo.getSecretName());
}
code>, и я не знаю, являются ли это данные, которые я должен маскировать, а не просто любую случайную строку, которую кто-то передает в регистратор. Я попытался изменить выражение в аспекте, чтобы также учесть аннотацию, но как только я это сделаю, аспект больше не перехватывает вызов log.info(). Пример:
Код: Выделить всё
@Around("execution(* org.slf4j.Logger.*(..)) && @annotation(Confidential)")
Код: Выделить всё
@Around("@annotation(confidential) && execution(* org.slf4j.Logger.*(..))")
public Object piiMasker(ProceedingJoinPoint joinPoint, Confidential confidential) throws Throwable {
Код: Выделить всё
import org.slf4j.Logger;
import org.slf4j.Marker;
public class MyLogger implements org.slf4j.Logger {
private final Logger log;
public MyLogger(Logger log) {
this.log = log;
}
public void info(String msg) {
log.info(msg);
}
... other methods here ...
}
- Аспект создается в аннотированном конфигурационном файле Spring @Configuration как @Bean.
Файл конфигурации помечен с помощью @EnableAspectJAutoProxy. - Регистратор «шпона» создается с использованием @Bean и передается в него. через внедрение конструктора в класс, где он используется.
Подробнее здесь: https://stackoverflow.com/questions/792 ... -passed-in
Мобильная версия