当我们通过浏览器(Chrome 版本 116.0.5845.141)访问我们的应用程序时,打开浏览器后,第一次尝试总是会重定向到仅显示消息“无效请求”的屏幕。
我们在 Windows 10 上运行 JBoss 7.1。
这总是在每个浏览器会话的第一次尝试时发生,并且当发生这种情况时,登录 bean 第一行上的断点永远不会被命中,并且 JBoss 中不会出现异常或堆栈跟踪。同一浏览器会话期间的所有后续尝试都会成功,登录 bean 断点被命中,并且我们的 index.xhtml 页面按预期打开。尽管我和我们团队中测试 WAR 的另一位开发人员正在发生这种情况,但我在 Google 上搜索也没找到这个问题作为一个问题提出来。
我尝试过的具体内容:
首先,我在 Login bean 处理程序的第一行放置了一个断点。假设每次尝试打开我们的应用程序时都会遇到该线路,这是有道理的。相反,在每个浏览器会话的第一次尝试中,断点从未被命中,并且立即出现“无效请求”消息。在第二次以及后来的同一浏览器会话尝试中,每次都会命中断点,然后index.xhtml页面会正常打开。
其次,我尝试将所有推荐的错误处理行插入到 PrimeFaces 文档站点的 web.xml 中,认为 PrimeFaces v6.0 和 PrimeFaces 13.0 之间一定有一些变化。我预计这些添加内容中至少有一项会改变当我打开浏览器并尝试打开在本地 JBoss 上运行的页面时发生的情况。问题仍然没有改变。
我们用PrimeFaces 6.0构建的WAR没有这个问题。这是我们从 PrimeFaces 6.0 升级到 PrimeFaces 13.0 后最近才看到的问题,只需进行代码更改即可使旧的参数化构造函数与新的 builder() 调用保持一致。
任何人都可以建议更改配置来解决 web.xml 或其他文件中的问题吗?
这里只是一个疯狂的想法...尝试以下 servlet 过滤器:
@WebFilter("/*")
public class NoCacheFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
//
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletResponse httpServletResponse = (HttpServletResponse) response;
httpServletResponse.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
httpServletResponse.setHeader("Pragma", "no-cache"); // HTTP 1.0.
httpServletResponse.setDateHeader("Expires", 0); // Proxies.
try {
chain.doFilter(request, response);
} catch (Throwable e) {
// woopsy
}
}
}
有什么不同吗?