ログインしたユーザーに関する情報を保存する @SessionScoped Bean があります。
@SessionScoped
public class LoggedInUser implements Serializable {
private static final long serialVersionUID = 1L;
private String id;
private String firstName;
private String lastName;
private String email;
private Country country;
private List<String> groups;
private Set<Role> roles;
...
}
認証フィルター:
public class AuthenticationFilter implements Filter {
@Inject
private LoggedInUserTo loggedInUser;
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
HttpServletResponse httpServletResponse = (HttpServletResponse) response;
// initial = setting log in user informations
// afterwards several checks (role, same user)
}
このセッション スコープ Bean は、いくつかの @Stateless Bean に注入されます。
@Inject
private LoggedInUser loggedInUser;
今、私はユーザーをログアウトしたい:
public void logout() {
// this.httpServletRequest.getSession(false).invalidate();
this.loggedInUser = new LoggedInUserTo();
}
その後、次に AuthenticationFilter (LoggedInUser も注入されています) が呼び出されると、loggedInUser オブジェクトは空になり、新しいユーザー情報を設定します。しかしその後、注入された LoggedInUser オブジェクトを含む @Stateless Bean が呼び出されると、オブジェクトは正しく設定されません。しかし、サービスを 2 回呼び出すと、新しい LoggedInUser 情報が正しく設定されます。
すべての @Stateless Bean が新しい LoggedInUser 情報を取得するにはどうすればよいですか?