Cdi внедрить HttpSession, когда сессия недействительна - PullRequest
0 голосов
/ 27 августа 2018

Я хочу реализовать следующее поведение в моем приложении Java EE - когда пользователь входит в систему и после того, как он закрывает браузер или снова открывает страницу входа, его сеанс должен быть аннулирован (поэтому бины SessionScope воссоздаются).

Решение, которое у меня сейчас есть:

1) Страница входа:

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://xmlns.jcp.org/jsf/html"
      xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
      xmlns:f="http://xmlns.jcp.org/jsf/core">

   <f:metadata>
      <f:event type="preRenderView" listener="#{logoutBean.logout}"/>
   </f:metadata>

   <f:view>
      <h:form>
         <h:outputLabel value="Login"/>
         <h:outputText value="#{loginBean.sampleAttr}"/>
         <h:commandButton value="Login" action="#{loginBean.authenticate()}"/>
      </h:form>
   </f:view>
</html>

2) Боб Logout:

@Named
@RequestScoped
public class LogoutBean implements Serializable {

    public void logout() {
        FacesContext
          .getCurrentInstance().getExternalContext().invalidateSession();
    }

}

3) Бин входа в систему:

@Named
@ViewScoped
public class LoginBean implements Serializable {

    @Inject
    private HttpSession session;

    @PostConstruct
    public void init() {
        session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
    }

    public String getSampleAttr() {
        return session.getAttribute("Sample") != null ? session.getAttribute("Sample").toString() :"";
    }

    public String authenticate() {
        return "default";
    }
}

Чтобы иметь правильный сеанс после аннулирования, я должен назначить значение сеанса, которое я получаю из FacesContext. Когда я использовал сессию из @Inject, я получил исключение «Сессия уже недействительна» в методе getBample get () () LoginBean.

Я не понимаю, почему сеанс, введенный через Cdi, все еще указывает на старый недействительный сеанс.

Я использую CDI 1.2, JSF 2.2

...