4

私はWicket Auth/Rolesを使用していますが、このスレッドの OP と同じ問題に遭遇しました。

AuthenticatedWebSession(ユーザー認証のため) の DB サービス層にアクセスする必要があります。Steve Flasby の提案に従い、次のことを行いました。

@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か?)

4

1 に答える 1