Я думаю, у меня есть четкое представление о том, что моя проблема здесь, но совершенно не знаю, как я мог бы это исправить ...Dropwizard и Hibernate - Нет сеансов на данный момент связан с контекстом исполнения
Вот как я начинаю мое заявление в dropwizard:
@Override
public void run(ServerConfiguration configuration, Environment environment)
{
// Setting up the database.
final DBIFactory factory = new DBIFactory();
final DBI jdbi = factory.build(environment, configuration.getDataSourceFactory(), "mysql");
//Hibernate
final UserDAO dao = new UserDAO(hibernate.getSessionFactory());
environment.jersey().register(new UserResource(dao));
final TemplateHealthCheck healthCheck = new TemplateHealthCheck(configuration.getTemplate());
environment.healthChecks().register("template", healthCheck);
// security
//****** Dropwizard security - custom classes ***********/
environment.jersey().register(new AuthDynamicFeature(new BasicCredentialAuthFilter.Builder<User>()
.setAuthenticator(new BasicAuth(dao))
.setAuthorizer(new BasicAuthorizer())
.setRealm("BASIC-AUTH-REALM")
.buildAuthFilter()));
environment.jersey().register(RolesAllowedDynamicFeature.class);
environment.jersey().register(new AuthValueFactoryProvider.Binder<>(User.class));
}
Теперь, как вы можете видеть здесь, я передаю мой Пользователь дао в моем идентифицирующей ... нет учебник я видел в Интернете делает это, и это потому, что каждые учебник онлайн использования жестко закодированные значения вместо того, чтобы показывать, как запросить БД.
Это говорит, вот как я пытаюсь проверить подлинность ...
public class BasicAuth implements Authenticator<BasicCredentials, User> {
UserDAO _userDAO;
final Encryption enc = new Encryption();
public BasicAuth(UserDAO dao)
{
this._userDAO = dao;
}
@Override
public Optional<User> authenticate(BasicCredentials credentials)
throws AuthenticationException {
// Get the user record.
User requestedUser = _userDAO.findOneByUsername(credentials.getUsername());
if (requestedUser != null)
{
// check pw.
if(enc.compare(credentials.getPassword(), requestedUser.getPassword())) {
return Optional.of(requestedUser);
}
else {
return Optional.empty();
}
}
return Optional.empty();
}
}
пожалуйста простите ужасный отступа выше, я вставил свой код здесь с IntelliJ, и он просто не ведет себя хорошо - в любом случае, когда я пытаюсь запустить это приложение, аутентификатор говорит мне:
No session currently bound to execution context
Вот кикер, я знаю, что это только для аспекта безопасности этого, что я получаю эту ошибку, потому что если я удалить линии безопасности из класса Application и запустите его, я все равно могу я создаю конечные точки пользователя (которые также используют этот DAO), и это работает хорошо.
Так что мой вопрос здесь действительно, есть - Я хотел использовать это дао в аутентификаторе? Если нет, как, черт возьми, я хочу запросить базу данных?
Если я, то где я иду не так?
Заранее спасибо.
Не слишком много времени прямо сейчас, но я считаю, что вам нужно смотреть на «Единица работы» аннотации к DW.Они соединяют контекст jersey с гибернацией – pandaadb
Мой ресурс, который вызывает это, использует @UnitOfWork уже - вот почему я смущен этим. – MickeyThreeSheds
Я не вижу никакого brdiging. Просто аннотировать метод ресурса будет недостаточно, если трикотаж не знает о ваших DAO. Вы должны прочитать последний раздел на http://www.dropwizard.io/1.0.6/docs/manual/hibernate.html#transactional-resource-methods-outside-jersey-resources, который рассказывает вам, как перевести hibernate в джерси экосистема. Ключевое слово: UnitOfWorkAwareProxyFactory – pandaadb