我想我有一個公平的想法我的問題是什麼在這裏,但也絕對不知道我怎麼可能解決它會...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));
}
現在,你可以看到這裏,我通過我的用戶DAO到我的認證...... 沒有教程,我在網上做到這一點看出來了,這是因爲每一個在線教程用途硬編碼值而不是顯示如何查詢數據庫。
這就是說,這裏是我正在試圖驗證...
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
這裏是踢球的,我知道這僅僅是本作的安全方面,我得到這個錯誤,因爲如果我刪除了安全線從應用程序類,並運行它,我仍然可以打我的創建用戶端點(也使用此DAO),並且運行良好。
所以我在這裏的問題真的是 - 我是否打算在驗證器中使用該dao?如果不是,我該怎麼查詢數據庫?
如果我是,那麼我會錯在哪裏?
在此先感謝。
沒有太多的時間,現在,但我相信你需要尋找到「工作單位」 DW上的註釋。他們將球衣上下文連接到休眠 – pandaadb
我的資源調用了這個已經使用@UnitOfWork - 這就是爲什麼我對此感到困惑。 – MickeyThreeSheds
雖然我看不到任何brdiging。如果球衣不知道你的DAO,只註釋資源方法是不夠的。你需要閱讀http://www.dropwizard.io/1.0.6/docs/manual/hibernate.html#transactional-resource-methods-outside-jersey-resources上的最後一節,它告訴你如何讓休眠進入球衣生態系統。關鍵字:UnitOfWorkAwareProxyFactory – pandaadb