我有一个典型的重定向后获取模式的webapp。该应用程序具有明确的开始和结束。
用户完成后,他们的会话不会立即过期,但就应用程序而言,它们已“完成”。他们应该能够刷新应用程序的最后一页并在他们认为合适时与它进行交互。
但是,他们不应该更改网址或点击后退按钮返回此处。
这可以通过在会话中设置布尔值来轻松解决。我们说sessionComplete = true
。
现在,当用户点击或尝试手动点击另一个URL时,如果sessionComplete == true
,则应该将它们重新定向回应用程序的最后一页,并且永远不应该点击其他页面的控制器
唯一的区别应该是此重定向。应用程序的每个其他部分都应该像往常一样执行。我怎么能在春天这样做?
答案 0 :(得分:2)
编写带有模式*
的过滤器(所有请求)非常适合您的情况。 doFilter
方法可能会看一下:
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// obtaining a sessionComplete value
Object value = ((HttpServletRequest) request).getSession().getAttribute("sessionComplete");
boolean sessionComplete = Boolean.valueOf(Objects.requireNonNull(value).toString());
// go to the final page
if (sessionComplete) {
((HttpServletResponse)response).sendRedirect("locationToRedirect");
}
// otherwise, pass a control to controllers
chain.doFilter(request, response);
}