我有一个AuthenticatorBean声明如下:
@Named
@SessionScoped
public class AutenticadorBean implements Serializable {
@Inject
private AutenticadorService autenticadorService;
这个bean调用AutenticadorService中的一个方法来验证用户 凭证和@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";
}
有谁知道这种行为的原因??
感谢。
答案 0 :(得分:2)
我认为您所做的事情应该有效,因为您使会话无效。
尝试从AutenticadorServiceImpl中删除getAnalistaSessao()上的@Produces和@Named,并将此@Model类添加到您的代码中。
@Model
public class AnalistaProducer {
@Inject
private AutenticadorService autenticadorService;
@Produces
@Named
public Analista getAnalistaSessao() {
return autenticadorService.getAnalistaSessao();
}
}