gpt4 book ai didi

session - JSF2 + CDI @Produces 保持旧的 session 状态

转载 作者:行者123 更新时间:2023-12-02 14:53:54 24 4
gpt4 key购买 nike

我有一个 AuthenticatorBean 声明如下:

@Named
@SessionScoped
public class AutenticadorBean implements Serializable {

@Inject
private AutenticadorService autenticadorService;

此 bean 调用 AutenticadorService 中的一个方法来验证用户凭据和 @Produces 该用户在 session 中如下所示:

@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;
}
}

我第一次登录应用程序时,它会在 session 中生成用户,但是问题是,在我注销并使用不同的用户再次登录后,尝试

@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";
}

有人知道这种行为的原因吗?

谢谢。

最佳答案

我认为你所做的应该有效,因为你使 session 无效。

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

@Model
public class AnalistaProducer {

@Inject
private AutenticadorService autenticadorService;

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

关于session - JSF2 + CDI @Produces 保持旧的 session 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14713377/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com