gpt4 book ai didi

session - Apache Wicket 口 : Injecting dependencies in Session (using Guice)

转载 作者:行者123 更新时间:2023-12-05 01:08:21 24 4
gpt4 key购买 nike

我正在使用 Wicket Auth/Roles我遇到了与 this thread 的 OP 相同的问题.

我需要访问 AuthenticatedWebSession 中的DB服务层(用于用户身份验证)。我关注了Steve Flasby's suggestion并做了以下事情:

@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)我正在使用开放 session ,并且(b) session 跨越多个请求)。

我通过将注入(inject)移动到 AuthenticatedWebSession.authenticate 解决了这个问题。方法。
@Override
public boolean authenticate(String username, String pass) {

Injector.get().inject(this);

...
}

我怀疑这不是最佳实践,因为现在我还需要通过其他方法访问服务层,添加 Injector.get().inject(this) 似乎不是一个好主意在每一种这样的方法中。

我的问题:

如何在每次请求时对 session 对象执行注入(inject)? (或者,如果这是一个不好的方法,我如何访问 AuthenticatedWebSession 中的服务层?)

最佳答案

你可以实现IRequestCycleListener (扩展 AbstractRequestCycleListener )并实现:

@Override
public void onBeginRequest(RequestCycle cycle)
{
if (Session.exists()) {
Injector.get().inject(Session.get());
}
}

注册您的 IRequestCycleListenerApplication#init()getRequestCycleListeners().add(new YourRequestCycleListener()) .

关于session - Apache Wicket 口 : Injecting dependencies in Session (using Guice),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17254803/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com