我是Java菜鸟,我得到了修复旧Java应用程序中的错误的任务。不幸的是,我们不再有Java开发人员。
我从git获得了代码,并且该代码(希望)在生产中运行并且正在运行(错误除外)。所以我的问题应该是配置问题,而不是代码问题。
该应用程序使用了许多primefaces 4.0,并部署在jboss 7.1.1上
我运行了它,但是登录后(登录成功),我再次重定向到登录页面,而不是index.xhtml。
对于重定向,我们使用:
private void redirect(String url) {
ServletContext context = (ServletContext) FacesContext.getCurrentInstance().getExternalContext().getContext();
String redirectUrl = context.getContextPath() + "/" + url;
log.info("redirect url: " + redirectUrl);
try {
FacesContext.getCurrentInstance().getExternalContext().redirect(redirectUrl);
} catch (IOException e) {
e.printStackTrace();
}
}
然后有一个过滤器可以读取会话:
HttpServletRequest servletRequest = ((HttpServletRequest) req);
HttpSession session = servletRequest.getSession(false);
然后我们检查是否已登录:
boolean isLoggedIn = (session != null && session.getAttribute("user") != null);
session.getAttribute(“ user”)现在为空(我制作了一些调试日志),我想这是问题所在。
之前已在登录过程中设置了用户:
session.setAttribute("user", authUser);
this.authUser = authUser;
this.role = authUser.getRole();
log.info("submitAction(): User \"" + authUser.getUsername() + "\" logged in successfully");
this.redirect("index.xhtml");
服务器日志显示带有我的用户名的log.info,因此它不应为null。如上所述,this.this.redirect(“ index.xhtml”)进行重定向。
正如已经告诉过的,这应该是生产中的代码。任何人都知道我的本地环境可能会遇到什么问题?
编辑:多次调用过滤器的原因我想我检查了一个错误的过滤器。登录成功后,将发生重定向,然后在过滤器功能中,会话为null
我在web.xml中发现了问题。以下条目是问题所在,似乎无法在我的本地PC上运行:
<session-config>
<cookie-config>
<secure>true</secure>
</cookie-config>
</session-config>
删除安全标签后cookie起作用。