Я хочу условно создать аспект в зависимости от значения, считанного из файла свойств. (Это связано с профилированием, поэтому предполагается выборочное использование).
Я попытался создать класс, реализующий условие и, следовательно, метод match(), который позволил бы мне выполнить необходима проверка и установите для вывода соответствующее логическое значение, включив или отключив его.
@Aspect
@Component
@Conditional(AuthFilterCondition.class)
public class AuthTokenFilter {
@Before("@annotation(org.company.annotations.ValidateAuthToken)")
public void doBefore(JoinPoint joinPoint) {
System.out.println("Loading auth token filter");
}
}
AuthFilterCondition
public class AuthFilterCondition implements Condition {
private static final String IS_AUTH_FILTER_FEATURE_ENABLED = "org.company.load.auth.filter";
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
return (context.getEnvironment().getProperty(IS_AUTH_FILTER_FEATURE_ENABLED).equalsIgnoreCase("true"));
}
}
Контроллер
@Path("/v1")
@Produces({ MediaType.APPLICATION_JSON })
@Consumes({ MediaType.APPLICATION_JSON })
public interface HealthService {
@GET
@Path("/check/health")
Response checkHealth();
}
ServiceImpl
public class HealthServiceImpl implements HealthService {
@ValidateAuthToken
@Override
public Response checkHealth() {
return Response.ok().build();
}
}
servercontext.xml
Уже используется аспект с компонентом, который должен быть обнаружен во время сканирования компонента, и рекомендация, которую следует пропустить, если она не совпадает, но рекомендация все еще выполняется. Подскажите, пожалуйста, если я делаю что-то не так.
Здесь я передаю аргумент виртуальной машины во время выполнения, который имеет значение ниже, которое заставит работать AuthFilterCondition.
-Dorg.company.load.auth.filter=true
Подробнее здесь: https://stackoverflow.com/questions/790 ... -executing