java - 如何根据 Spring 中的 boolean 值将用户发送到不同的页面?

标签 java spring spring-mvc

我有一个网络应用程序,它是典型的重定向后获取模式。该应用程序有明确定义的开始和结束。

一旦用户完成,他们的 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/

相关文章:

Spring 注入(inject)工具 :map in Kotlin with type safety

java - IllegalSelectQueryException 和 InvalidDataAccessApiUsageException

java - Spring REST 重用嵌套请求映射

java - 如何模拟离线 Spring Boot 应用程序

java - 如何使用 JavaFX CSS 删除带有嵌套标签的按钮的填充

Java继承基类使用派生类方法

java - 如果我在批处理操作中使用 Firestore 增量,是否会获得与事务相同的结果?

java - 使用 Jackson 和 WebClient 将 json 数组反序列化为对象

java - 如何在使用 Spring Boot 时通过在浏览器中点击 URL 来加载 Angular 组件?

java - SQL Java更新记录问题