2010-04-08 3 views
2

메타 데이터 기반 구성 요소 기반 인증을 사용할 수 있습니까? 액션에Wicket에서 메타 데이터 기반 구성 요소 기반 인증을 사용할 수 있습니까?

개찰은 예를 들어, 범 :

@AdminOnly 
private class ModeLink extends Link {.....} 

은이어서 인증 전략 isActionAuthorized()를 구현한다.

그러나 나는 모든 역할에 대해 새로운 클래스를 만드는 것이 좋은 해결책이 아니라고 생각합니다.

이렇게하려면 메타 데이터 기반 방법이 있습니까? 구성 요소에 일부 메타 데이터를 추가 한 다음 승인 전략의 방법 인 isActionAuthorized()의 내용을 기반으로 확인할 수 있습니까?

답변

0

나는 귀하의 질문에 대한 답변으로 Wicket Authorization Using MetaDataKey이라는 메타 데이터 기반 솔루션을 제공한다고 생각합니다.

주석의 경우 @RequiresRole (예 : @RequiresRole ("admin") 역할 ID로 매개 변수화 된 단일 주석을 사용할 수 있습니다.

0

당신은 당신의 역할에 대한 문자열 상수를 사용 할 수있는 :

@Require(MySession.ADMIN_ROLE) 
public class AdminPanel extends Panel { 
    // snip 
} 

public boolean isActionAuthorized(Component c, Action a) { 
    // I usually disallow instantiation of pages and rendering of components 
    if (c instanceof Page || a == Component.RENDER) { 
    Require r = c.getClass().getAnnotation(Require.class); 
    if (r != null && !Strings.isEmpty(r.value()) { 
     Roles roles = ((AuthenticatedWebSession)Session.get()).getRoles(); 
     return roles != null && roles.hasRole(a.value()); 
    } 
    } 
    return true; 
} 

을 대신 문자열로 당신은 또한 임의의 문자열을 허용하지 열거를 사용할 수 있습니다. 이 경우 a.value().name()을 사용하여 역할을 확인하십시오.

관련 문제