我有一个 @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,则该对象设置不正确。但是,如果我两次调用该服务,则新的 LoggedInUser 信息设置正确。
我必须做什么才能让所有@Stateless bean 获取新的 LoggedInUser 信息?