2015-05-08 4 views
2

Я хочу отказаться от старых аутентификаций от dropwizard, поэтому я использую конфигурацию ударов CachingAuthenticator.Использование CachingAuthenticator в Dropwizard

@Override 
public void run(WebConfiguration configuration, Environment environment) { 
    environment.jersey().register(new ActivityResource()); 

    CachingAuthenticator<BasicCredentials, AuthUser> cachingAuthenticator = 
     new CachingAuthenticator<>(environment.metrics(), new WebAuthenticator(), 
       configuration.getAuthenticationCachePolicy()); 
} 

политики в YML файл в

authenticationCachePolicy: maximumSize=10, expireAfterAccess=1m 

Мой вопрос: 1) Как зарегистрироваться (получить его работы) cachingAuthenticator поэтому каждый запрос будет аутентифицирован.

2) Как установить expireAfterAccess в секундах

3) Все, которым не так в коде, пожалуйста предложить ...

+0

2.) Я думаю, что это длительность dropwizard, так что вы можете сделать это: expireAfterAccess = 15 секунд – heaphach

ответ

0

Рабочего раствора

/** authentication config */ 
CachingAuthenticator<BasicCredentials, AuthUser> cachingAuthenticator = new CachingAuthenticator<>(
    environment.metrics(), new MyAuthenticator(), configuration.getAuthenticationCachePolicy()); 

environment.jersey().register(new AuthDynamicFeature(new BasicCredentialAuthFilter.Builder<AuthUser>() 
    .setAuthenticator(cachingAuthenticator).setRealm("kedar.javalkar.realm").buildAuthFilter())); 

environment.jersey().register(new AuthValueFactoryProvider.Binder<>(AuthUser.class)); 

может либо ут иметь

# Caching authenticator. 
authenticationCachePolicy: maximumSize=10000, expireAfterAccess=10m 

или

# Caching authenticator. 
authenticationCachePolicy: maximumSize=10000, expireAfterAccess=1s 
1

я не знаю о том, о "2)", но для «1) », вам просто нужно подключить аутентификатор до базового поставщика Идента

CachingAuthenticator<BasicCredentials, AuthUser> cachingAuthenticator = 
     new CachingAuthenticator<>(environment.metrics(), new WebAuthenticator(), 
       configuration.getAuthenticationCachePolicy()); 

environment.jersey().register(AuthFactory.binder(
      new BasicAuthFactory<>(cachingAuthenticator, 
        "Example Realm", AuthUser.class))); 
+0

Спасибо ... я провел небольшой тест на браузера, что приводит только к действительным учетным данным. Я могу ошибаться, но как работает кеширующий аутентификатор? как я могу проверить, что учетные данные фактически удалены bcos мои результаты браузера, даже после того, как я ударил запрос через 10 минут –

+0

Вы можете поместить заявление печати в свой аутентификатор. Аутентификатор вызывается, если в кеше нет учетных данных. Что касается браузера, он может кэшировать запрос и отправлять его с каждым запросом. Не уверен точно, как это работает. Обычно это происходит с Basic auth, я не знаю почему. Но с помощью Basic auth вам необходимо пройти аутентификацию для каждого запроса. Цель кеша состоит в том, чтобы избежать необходимости снова ударять db. Это не имеет никакого отношения к проведению какой-либо клиентской сессии. Вы можете протестировать другой клиент, например cURL, чтобы увидеть эффект –

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