AOP 주석을 사용하여 봄에 코드를 주입 할 수 있습니까?
-
06-07-2019 - |
문제
다음과 같은 일을 할 수 있습니까?
public void doStuff(@RequirePrivilege("foo") User user) {
// ...
}
그리고 마치 다음과 같은 것처럼 효과적으로 실행 했습니까?
public void doStuff(User user) {
if(!user.hasPrivilege("foo"))
throw new UserHasInsufficientPrivileges(); // this is a RuntimeException
// ...
}
나는 Spring이 다양한 종류의 AOP 지원을 가지고 있음을 알고 있지만, 내가 찾을 수있는 가장 좋은 것은 AOP 코드가 주석을 달아 특정 방법 전후에 실행되도록 주석을 달았습니다. 역전을하고 변경해야 할 코드에 주석을 달고 싶습니다.
궁극적으로 메소드 내부에서 위의 확인을 수행 할 수는 있지만 작업을 수행하는 주석 방법은 추가 문서를 제공하여 사용자가 코드와 동기화하지 않고도 특정 권한이 필요하다는 것이 분명합니다.
해결책
주석과 일치하기 때문에이 작업을 수행하기 위해 SAGONTJ를 사용하는 것을 볼 수 있습니다. 그런 다음 주변 측면을 사용하여 사용자 가이 방법을 사용하기 위해 요구 사항을 충족하는지 결정할 수 있습니다.
Spring을 사용하면 Spring을 사용할 수 있으며, 가능하면 런타임 에이 작업을 수행하지 않고 컴파일 타임에 응용 프로그램을 시작할 때 마다이 측면을 사용하기 위해 가격을 지불 할 이유가 없기 때문에 제안합니다. 그러나, 당신이 런타임에 그것을해야한다면, 그것은 가능합니다. 나는 가능한 한 컴파일 타임을 사용하려고 노력합니다.
당신은 active in action을보고 싶을 수도 있습니다 (http://www.manning.com/laddad2/) 그러나 여기에서 예제가 있습니다 : 서명 패턴 :
* *(@RequestParam
(@Sensitive *))
설명
*Any method with one parameter marked with the @RequestParam annotations and the parameter’s type is marked with the @Sensitive annotation.*
예시
void create(@RequestParam
MedicalRecord mr), assuming
MedicalRecord carries the
@Sensitive annotation.
다른 팁
귀하의 "불충분 한 권한"예제를 수행 할 수 있다고 확신합니다. 봄 AOP, 그것이 스프링 보안이 작동하는 방식이기 때문입니다. 조언과 종횡비 주변에서 매우 정교한 일을 할 수 있습니다.