我正在使用Wicket Auth/Roles并且遇到了与该线程的 OP 相同的问题。
我需要访问数据库服务层AuthenticatedWebSession
(用于用户认证)。我按照史蒂夫·弗拉斯比的建议做了以下事情:
@Override
public Session newSession(Request request, Response response) {
Session s = new MySession(request);
mInjector.inject(s);
return s;
}
不幸的是,这导致
java.lang.IllegalStateException: EntityManager is closed
(大概是因为(a)我正在使用开放会话,并且(b)会话跨越多个请求)。
我通过将注入移动到AuthenticatedWebSession.authenticate
方法中解决了这个问题。
@Override
public boolean authenticate(String username, String pass) {
Injector.get().inject(this);
...
}
Injector.get().inject(this)
我怀疑这不是最佳实践,因为现在我也需要通过其他方法访问服务层,并且在每个这样的方法中添加似乎不是一个好主意。
我的问题:
如何在每次请求时对会话对象执行注入?(或者,如果这是一个不好的方法,我如何访问服务层AuthenticatedWebSession
?)