代码之家  ›  专栏  ›  技术社区  ›  Kyan

@RequestMapping方法中的前置条件?

  •  0
  • Kyan  · 技术社区  · 6 年前

    我有一个简单的表单,完成后将用户发送到与“/firstForm”无关的“/secondForm”,如果第一个表单尚未完成,我如何限制对“/secondForm”的访问?

    这对我来说更困难的是中间有一个控制器。

    第一形态 --- ( 提交 )---&燃气轮机; 电子邮件控制器 ----( 重定向 )----&燃气轮机;

    2 回复  |  直到 6 年前
        1
  •  0
  •   Jakubeeee    6 年前

    如果要在满足某些条件时将用户重定向到另一个页面,可以使用拦截器。拦截器类示例:

    @Component
    public class RedirectInterceptor implements HandlerInterceptor {
    
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
        return true;
    }
    
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object o, ModelAndView modelAndView) {
        if (request.getRequestURI().contains("secondForm") && modelAndView.getModel().get("someBoolean") == false {
            try {
                response.sendRedirect("/firstForm");
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    
    @Override
    public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
    
    }
    }
    

    并在配置类中注册:

    @Configuration
    public class MvcConfig extends WebMvcConfigurerAdapter {
    
    @Autowired
    RedirectInterceptor redirectInterceptor;
    
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(redirectInterceptor);
    }
    }
    

    如果您更喜欢xml配置而不是java,那么您也可以在spring config xml中使用它:

    <mvc:interceptors>
        <bean id="redirectInterceptor" class="path.to.your.interceptor.RedirectInterceptor"/>
    </mvc:interceptors>
    
        2
  •  0
  •   Kyan    6 年前

    找到了另一种方法:

    使用FlashAttribute,通过在设置值的emailController中的重定向之前赋值。

    在applicationController中,如果没有FlashAttribute,则使用if语句调用重定向到应用程序的根目录。