2012-02-11 2 views
1

Я использую механизм аутентификации HTTP Digest на стороне сервера, а клиент - firefox.HTTP-аутентификация в Restlet, аутентификация дочернего URL-адреса

Это код на стороне сервера

Application application = new Vehicle(); 

component.getDefaultHost().attachDefault(application); 
component.getDefaultHost().attach("/home",new Home()); 

DigestAuthenticator guard = new DigestAuthenticator(null, "TestRealm","mySecretServerKey"); 
Instantiates a Verifier of identifier/secret couples based on a simple Map. 
MapVerifier mapVerifier = new MapVerifier(); 

нагрузки один статический Логин/секрет пары.

mapVerifier.getLocalSecrets().put("login", "secret".toCharArray()); 
guard.setWrappedVerifier(mapVerifier); 

Гвардии Restlet

guard.setNext(application); 
component.getDefaultHost().attachDefault(guard); 
component.start(); 

В домашнем классе

Router router = new Router(getContext()); 
router.attach("/People", People.class); 
router.attach("/categories/",Categories.class); 

return router; 

если я прошу http://localhost:8182/ Http аутентификации работает, но http://localhost:8182/home/categories/ не требует какой-либо http authentication если сначала попробовать /home/categories/ вместо из http://localhost:8182/ он выдаст результат без каких-либо механизмов аутентификации см. Как это решить?

ответ

0

Вы прикрепляете охрану только к маршруту по умолчанию, поэтому маршруты, которые не соответствуют каким-либо другим маршрутам. Смотрите Javadoc для attachDefault:

* Attaches a Resource class to this router as the default target to invoke 
* when no route matches. It actually sets a default route that scores all 
* calls to 1.0. 

Ваши другие маршруты не являются маршруты по умолчанию, и поэтому они не охраняются

router.attach("/People", People.class); 
router.attach("/categories/",Categories.class); 

Вы должны подключить защитный кожух между каждым маршрутом, который вы хотите защитить, как это:

DigestAuthenticator peopleGuard = new DigestAuthenticator(null, "TestRealm","mySecretServerKey"); 
peopleGuard.setNext(People.class); 
router.attach("/People", peopleGuard); 
+0

Благодарим за ответ, попробуем ваше предложение. – ridy

Смежные вопросы