Я работаю над старым приложением, в котором мы используем HttpServlet в качестве службы и передаем данные (для нас это как идентификатор сеанса) в качестве параметра.Позже мы читаем этот параметр в классе ManagedBean.В настоящее время эти классы выглядят следующим образом.
public class MyServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@EJB private MySessionGenerator mySessionGenerator;
@Override
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException {
String sessionID = mySessionGenerator.getData();
String url = "serverUrl/myPage.jsf?id=" + sessionID;
response.setStatus(HttpServletResponse.SC_MOVED_TEMPORARILY);
response.setHeader("Location", url);
}
}
@ManagedBean
@ViewScoped
public class BeanA implements Serializable {
private String sessionID;
@PostConstruct
public void init() {
this.sessionID = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("id");
// do other stuff
}
public void sentAndRedirect() {
// do some operations with external services
String newUrl = "myPageB.jsf?id=" + this.sessionID;
FacesContext fc = FacesContext.getCurrentInstance();
fc.getApplication().getNavigationHandler().handleNavigation(fc, null, newUrl);
}
}
@ManagedBean
@ViewScoped
public class BeanB implements Serializable {
private String sessionID;
@PostConstruct
public void init() {
this.sessionID = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("id");
// do other stuff
}
}
Вопрос в том, как мы должны изменить его, чтобы иметь представление о значении sessionID, но не отображать его в URL и не смешиватьсеансы?
Я пытался передать этот sessionID как атрибут HttpServletRequest, а затем получить его, но он не работал.Полученный атрибут всегда был нулевым, независимо от того, пытался ли я установить атрибут для сеанса запроса или для самого запроса.
Буду признателен за помощь в решении этой проблемы.