3

次のように宣言された 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 に直接アクセスすると、ログインした2番目のユーザーである正しいユーザーを返します。

ここに私のログアウトコードがあります:

public String logout() throws IOException {
    FacesContext facesContext = FacesContext.getCurrentInstance();  
    ExternalContext ex = facesContext.getExternalContext();  
    ex.invalidateSession();
    return "/home?faces-redirect=true&logout=true";
}

誰かがこの動作の理由を知っていますか??

ありがとう。

4

1 に答える 1

2

セッションを無効にするので、あなたがしたことはうまくいくはずです。

@Produces と @Named on getAnalistaSessao() を AutenticadorServiceImpl から削除し、この @Model クラスをコードに追加してみてください。

@Model
public class AnalistaProducer {

    @Inject
    private AutenticadorService autenticadorService;

    @Produces
    @Named
    public Analista getAnalistaSessao() {
          return autenticadorService.getAnalistaSessao();
    }
}
于 2013-04-28T00:33:14.093 に答える