我有一个网络应用程序,它是典型的重定向后获取模式。该应用程序有明确定义的开始和结束。
一旦用户完成,他们的 session 不会立即过期,但就应用程序而言,他们已经“完成”了。他们应该能够刷新应用程序的最终页面并根据需要与其进行交互。
但是,他们此时不应更改 URL 或点击后退按钮返回。
通过在 session 中设置 boolean 值可以轻松解决此问题。假设sessionComplete = true
。
现在,当用户回击或尝试手动点击另一个 URL 时,如果 sessionComplete == true
,他们应该被重定向回应用程序的最终页面和 Controller 其他页面永远不应该被点击。
唯一的区别应该是这个重定向。应用程序的所有其他部分都应照常执行。我怎样才能在 Spring 做到这一点?
最佳答案
使用模式 *
(所有请求)编写过滤器非常适合您的情况。 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);
}
关于java - 如何根据 Spring 中的 boolean 值将用户发送到不同的页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42348820/