我想我有一个公平的想法我的问题是什么在这里,但也绝对不知道我怎么可能解决它会...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