Не удается получить секреты от авторизатора Restlet

#authorization #restlet

#авторизация #restlet

Вопрос:

Я использую аутентификацию и авторизацию Restlet. Но я не могу получить секреты в моем настраиваемом регистраторе, оно равно null. Вот код:

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()
  

}

Кто-нибудь знает почему?

Спасибо!

Ответ №1:

Просматривая последний код, не похоже, что секрет когда-либо устанавливался для пользовательского объекта. Однако вы можете переопределить метод verify (запрос, ответ) в вашем классе MyVerifier, чтобы установить его, например:

 @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 resu<
}