В основном у меня есть корпоративное приложение jsf, которое показывает некоторые сервисы пользователю.
Различные отделы предприятия размещают разные приложения на одном веб-сервере, и в нашем приложении предоставляются ссылки для доступа к ним.
У меня есть Servlet
с именем RedirectServlet в моем приложении, через который я перенаправляю все запросы в разные приложения. Ниже приведен мой redirectservlet
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
LOGGER.debug("In doGet()");
try{
if(request.getParameter("URL") != null){
LOGGER.debug("URL Found redirecting forward");
String redirectUrl = request.getParameter("URL");
response.sendRedirect(redirectUrl);
}
}catch(NullPointerException e){
LOGGER.debug("URL not found setting new session parameters & redirecting forward");
HttpSession session = request.getSession(true);
try {
response.sendRedirect(properties.getProperty(REDIRECTURL, true));
} catch (Exception e1) {
LOGGER.debug("Expcetion with propertiesfile: ",e1);
}
}
}
Что я делаю выше, это если щелкнуть ссылку (Параметр URL присутствует) я перенаправляю на конкретное приложение, в противном случае я просто создаю новый сеанс своего приложения и перенаправляю на домашнюю страницу приложения.
когда пользователь выходит из любого другого приложения, я перенаправляю обратно на свое приложениеВот как я перенаправляю обратно к своему приложению
public void Logout(){
LOGGER.debug("In LogOut");
try
{
HttpServletRequest req = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
HttpServletResponse res = (HttpServletResponse)FacesContext.getCurrentInstance().getExternalContext().getResponse();
HttpSession session = req.getSession(false);
LOGGER.debug("report session id:" + session.getId());
res.sendRedirect(REDIRECTURL);
session.invalidate();
}catch(IllegalStateException e){
LOGGER.debug("Exception in LogOut", e);
}
catch (IOException e){
LOGGER.debug("Exception in LogOut", e);
}
}
Я получаю следующее сообщение об ошибке сервера в строке res.sendRedirect
в приведенном выше коде
HTTP Status 500 -
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
javax.servlet.ServletException: Cannot forward after response has been committed
javax.faces.webapp.FacesServlet.service(FacesServlet.java:221)
root cause
java.lang.IllegalStateException: Cannot forward after response has been committed
org.apache.myfaces.context.servlet.ServletExternalContextImpl.dispatch(ServletExternalContextImpl.java:368)
org.apache.myfaces.trinidad.context.ExternalContextDecorator.dispatch(ExternalContextDecorator.java:44)
org.apache.myfaces.trinidad.context.ExternalContextDecorator.dispatch(ExternalContextDecorator.java:44)
org.apache.myfaces.trinidadinternal.context.FacesContextFactoryImpl$OverrideDispatch.dispatch(FacesContextFactoryImpl.java:267)
org.apache.myfaces.view.jsp.JspViewDeclarationLanguage.buildView(JspViewDeclarationLanguage.java:94)
org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:66)
org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:239)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:191)
Вот как мыуправление сеансом между приложениями
Когда пользовательПри первом входе в наше приложение мы сохраняем некоторые данные в БД, и после этого каждое приложение проверяет эти данные в БД.
Пожалуйста, кто-нибудь поможет, как решить эту проблему. Это критично ко времени
Оба приложения используют JSF 1.2
и Apache Trinidad .