Session JSF2和x2B;CDI@生成保持旧会话状态的命令

Session JSF2和x2B;CDI@生成保持旧会话状态的命令,session,jsf-2,cdi,logout,Session,Jsf 2,Cdi,Logout,我有一个AuthenticatorBean声明如下: @Named @SessionScoped public class AutenticadorBean implements Serializable { @Inject private AutenticadorService autenticadorService; 这个bean在服务内部调用一个方法来验证用户 凭据和@在会话中生成此用户,如下所示: @SessionScoped public class Autenti

我有一个AuthenticatorBean声明如下:

@Named
@SessionScoped
public class AutenticadorBean implements Serializable {

    @Inject
    private AutenticadorService autenticadorService;
这个bean在服务内部调用一个方法来验证用户 凭据和@在会话中生成此用户,如下所示:

@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;
    }
}
第一次登录应用程序时,它会生成会话中的用户,但是 问题是,在我注销后,用另一个用户再次登录,然后 设法

在其他服务中加载该属性 我注销前的第一个用户。但是如果我直接在AutenticadorService.getanalistassao()中访问analistassao;它返回第二个正确的用户 我登录了

这是我的注销代码:

public String logout() throws IOException {
    FacesContext facesContext = FacesContext.getCurrentInstance();  
    ExternalContext ex = facesContext.getExternalContext();  
    ex.invalidateSession();
    return "/home?faces-redirect=true&logout=true";
}
有人知道这种行为的原因吗


谢谢。

我认为您所做的应该有效,因为您使会话无效

尝试从您的AutenticadorServiceImpl中删除GetAnalystasSao()上的@products和@Named,并将此@Model类添加到代码中

@Model
public class AnalistaProducer {

    @Inject
    private AutenticadorService autenticadorService;

    @Produces
    @Named
    public Analista getAnalistaSessao() {
          return autenticadorService.getAnalistaSessao();
    }
}

以前从没见过这个。我从不使用EJB,你能试试pojo吗?在发布之前翻译源代码是一个很好的做法。对这里的大多数人来说,“analistasedadoa”看起来像是胡言乱语。不客气。。请注意,模型注释是一个原型,它使用RequestScope并同时命名
@Model
public class AnalistaProducer {

    @Inject
    private AutenticadorService autenticadorService;

    @Produces
    @Named
    public Analista getAnalistaSessao() {
          return autenticadorService.getAnalistaSessao();
    }
}