2017-12-10 5 views
1

Spring AOP와 함께 작업 중이며 속성에 정의 된 이름을 가진 패키지 내부의 메소드가 실행될 때마다 트리거되는 pointcut을 정의 할 수 있기를 바랍니다. 파일이 호출됩니다. 그건 내 포인트 컷은Spring AOP - 속성 파일의 값을 기반으로 한 Pointcut

@Pointcut("within(${base.packageName}.*)") 
public void MyPointCut() {} 

처럼 보일 것이다 다음 내 설정 파일

base.packageName=foo.bar 

는 런타임에 포인트 컷은 제가했습니다이 하나

@Pointcut("within(foo.bar.*)") 
public void MyPointCut() {} 

처럼 행동 할 더라면입니다 몇 가지 다른 시도 (예 : pointcut 표현식에서 SpEL 사용, 정적 pointcut 인터페이스를 구현하는 클래스 구성)를 시도했지만 아무 것도 효과가 없었습니다.

봄에 구성 파일에서 발견 된 값을 기반으로 포인트 컷을 정의 할 수있는 방법이 있습니까?

+1

XML aop 구성을 사용할 수 있습니다 –

+0

의견을 upvote 할 수는 없지만 완벽하게 작동합니다. 별도의 답변을 작성하려면 동의하겠습니다. 그렇지 않다면 기본 코드로 내 자신의 답변을 게시하고 신용을 씁니다. 감사합니다 – rsmartin2011

답변

0

이 작업을 수행 할 수 없다는 것은 의도적 일 수 있습니다.

나는 여기에 당신에게 뭔가를 제안 할 것이고, 당신이 파급 효과에 대해 생각해보기 바란다.

당신은 Aspect Oriented 구조에 값을 동적으로 정의 할 수 있어야합니다. 검증되지 않은 외부 액세스 가능 소스에 배치하고 있습니다. 적대적이며, 여기서 보안 측면에서 생각해 보면, 포인트 컷을 변경하고 다른 코드 (임의적 일 수도 있음)를 실행하는 것이 안전하다고 생각하십니까?

매우 가치있는 반면, AOP는 대부분의 보안 연구원을 최우선으로 생각합니다.

+0

나는 2 가지 질문이 있지만 우려를 이해합니다. 1. 적대적인 사람은 아마도 값을 바꿀 수 있고 pointcut를 임의로 정의 할 수 있지만 포인트 컷이 아직 작성한 조언 만 호출하기 때문에 다른 코드를 실행할 수는 없습니다. ? 2. 어느 정도 봄에 이미 이런 일을하지 않았습니까? 모든 외부화 된 구성이이 문제의 영향을받지 않습니까? 어쨌든, 귀하의 회신에 감사 드리며, 제가 생각하지 못했던 것입니다. – rsmartin2011

+0

1) 진실 - 서비스 거부 공격을 생각하십시오 - 잠재적 인 공격 벡터를 초래할 수있는 과도하게 강렬한 표현으로 포인트 컷이 변경되는 경우. 2) 예 - 그러나 일부 새로운 인스턴스 (spring-boot의 configproperties)에서는 외부 구성의 표현식이 속성 확장으로 제한됩니다. SpEL은 지원되지 않습니다. –

+0

나는 당신의 코멘트를 upvote하려고했지만 나는 충분한 평판이 있다고 생각하지 않는다. (나는 대답하지 않았다. 매우 좋은 정보. – rsmartin2011

1

주석 값은 컴파일시 상수 표현식이어야하므로 불가능합니다. 따라서 런타임에 자리 표시 자 확인이 수행되므로 pointcut이 ${} 자리 표시자를 확인할 수 없습니다. here 더보기.