我有一个过滤器,如果会话已过期并且方法是 POST,则将 faces-redirect 参数添加到 url 并使浏览器不缓存页面,以避免 viewExpiredException,但不起作用,我仍然得到那个例外。
这是我的代码:
if ( "POST".equalsIgnoreCase(request.getMethod()) ) {
log.info("POST --> Evitar ViewExpiredException de JSF");
log.info("Hacer que el navegador no cachee la página");
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
response.setHeader("Pragma", "no-cache"); // HTTP 1.0.
response.setDateHeader("Expires", 0); // Proxies.
log.info("Redirigir a la página con el parámetro 'faces-redirect'");
String pagRedirect = anadirFacesRedirect(pagSolicitada);
log.info("Página con 'faces-redirect' = "+pagRedirect);
log.info("URI con 'faces-redirect' = "+request.getContextPath()+pagRedirect);
response.sendRedirect(request.getContextPath()+pagRedirect);
chain.doFilter(request, response);
return;
}
“anadirFacesRedirect”方法添加了“faces-redirect=true”。它工作正常,我已经调试并查看了日志,并且 sendRedirect 参数没问题。
我将此代码放在 Spring Security 过滤器中。
我不知道这是否是问题(因为 Spring Security),或者代码中是否有问题?
谢谢你。
更新: 我已经检查过这不是 Spring Security 问题,因为我已经将它放在了在 Spring Security 的过滤器链之后执行的 webfilter 中,但它仍然不起作用,它会抛出 viewExpiredException。
为什么是这样?我已经强制重定向并使浏览器不使用缓存页面。