我有一个 AuthenticatorBean 声明如下:
@Named
@SessionScoped
public class AutenticadorBean implements Serializable {
@Inject
private AutenticadorService autenticadorService;
此 bean 调用 AutenticadorService 内部的一个方法,该方法验证用户凭据并在 Session 中 @Produces 该用户,如下所示:
@SessionScoped
public class AutenticadorServiceImpl implements AutenticadorService, Serializable {
@EJB
private AnalistaRepository analistaRepository;
private Analista analistaSessao;
@Override
public void inserirSessaoDadosLogin(String login) {
analistaSessao = analistaRepository.buscaPorUserName(login);
}
@Produces
@Named("analistaSessao")
public Analista getAnalistaSessao() {
return analistaSessao;
}
}
我第一次登录应用程序时,它会在会话中生成用户,但问题是在我注销后,用不同的用户再次登录,然后尝试
@Inject
Analista analistaSessao
在其他服务中,该属性在我注销之前由第一个用户加载。但是如果我直接在 AutenticadorService.getAnalistaSessao(); 中访问 analistaSessao 它返回正确的用户,这是我登录的第二个用户。
这是我的注销代码:
public String logout() throws IOException {
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext ex = facesContext.getExternalContext();
ex.invalidateSession();
return "/home?faces-redirect=true&logout=true";
}
有谁知道这种行为的原因?
谢谢。