2011-05-10 5 views
0

Restlet Authentication and Authorization을 사용하고 있습니다. 하지만 내 사용자 정의 된 등록자에서 비밀을 얻을 수 없습니다, 그것은 null입니다. . 여기에 코드입니다 :Restlet Authorizer에서 비밀을 얻을 수 없습니다.

TestApplication.java

@Override 
    public Restlet createInboundRoot() 
    { 
    Router rootRouter = new Router(getContext()); 

    Router pubRouter = new Router(getContext()); 

    pubRouter.attach("/test", TestResource.class); 

    RoleAuthorizer ra = new RoleAuthorizer(); 

    ra.getAuthorizedRoles().add(MyEnroler.PUBLISHER); 

    ra.setNext(pubRouter); 

    rootRouter.attach("/publish", ra); 

    ChallengeAuthenticator guard = 
     new ChallengeAuthenticator(getContext(),ChallengeScheme.HTTP_BASIC, "my realm"); 

    guard.setVerifier(new MyVerifier()); 

    guard.setEnroler(new MyEnroler()); 

    guard.setNext(rootRouter); 

    return guard; 
} 

Enroller.java

public class MyEnroler implements Enroler 
{ 
    public final static Role PUBLISHER = new Role("publisher", "publisher"); 

    public void enrole(ClientInfo clientInfo) 
    { 
    System.out.println(clientInfo.getUser().getIdentifier()); 
    System.out.println(new String(theClientInfo.getUser().getSecret())); 
    } 
} 

theClientInfo.getUser() getSecret()는 항상 null을 반환은

ClientResource.java

public static void main(String[] args) throws Exception 
    { 
    // Create a HTTP Server listening to the port 8182 
    Component c = new Component(); 

    c.getServers().add(Protocol.HTTP, 8182); 

    c.getDefaultHost().attach("/myapp", new TestApplication()); 

    c.start(); 

    ClientResource pubResource = 


new ClientResource("http://localhost:8182/myapp/publish/test"); 

ChallengeResponse cr = 
    new ChallengeResponse(ChallengeScheme.HTTP_BASIC, "scott", "tiger"); 

pubResource.setChallengeResponse(cr); 

pubResource.get() 

}

이유를 아는 사람이 있습니까?

감사합니다.

답변

0

최신 코드를 살펴보면 비밀이 사용자 개체에 설정되지 않은 것 같습니다. 그러나 다음과 같이 MyVerifier 클래스의 verify (request, response) 메서드를 재정 의하여 설정할 수 있습니다.

@Override 
public int verify(Request request, Response response) { 
    int result = super.verify(request, response); 
    if (result == RESULT_VALID) { 
     request.getClientInfo().getUser().setSecret(getSecret(request, response)); 
    } 
    return result; 
} 
관련 문제