我想使用 HK2 DI 根据登录 Jersey API 的用户自动注入类的新实例。
用户使用 AuthenticationFilter 类进行登录,我可以在所有端点中将其放入 @Context SecurityContext 中。
问题是我有一个 DAO 类,需要实例化有关用户的信息。这只是我应该在数据库上执行查询的架构。
所以我的Dao的构造函数是这样的:
public UserDao(String schemaCompte) {
super(schemaCompte);
}
解决方案似乎是使用工厂通过 HK2 实例化我的 Dao,所以我尝试创建一个这样的:
public class UserDaoFactory implements Factory<UserDao> {
@Context SecurityContext securityContext;
@Override
public UserDao provide() {
User userPrincipal = (User) securityContext.getUserPrincipal();
return new UserDao(userPrincipal.getCode());
}
@Override
public void dispose(UserDao userDao) {
}
}
绑定是这样的:
bindFactory(UserDaoFactory.class).to(UserDao.class)
和实施:
@Inject
public UserSvc(UserDao userDao) {
...
}
但是这个工厂在我的应用程序的生命周期中被调用得太早,并且 SecurityContext 仍然是空的。
据我了解,在运行时执行的解决方案是将工厂绑定为代理,如下所示:
bindFactory(UserDaoFactory.class).proxy(true).to(UserDao.class)
但是当我这样做时,我得到一个运行时异常:
java.lang.RuntimeException: java.lang.InstantiationException: com.metier.user.UserDao_$$_jvst5c_0
如果有人有想法,我已经尝试了很多事情,但我完全不走运
皈依舞
相关分类