如果用户不满足@RequestMapping的某些先决条件,我不知道如何重定向用户。
我有一个简单的表单,该表单完成后会将用户发送到与“ / firstForm”无关的“ / secondForm”,如果第一个表单尚未完成,如何限制对“ / secondForm”的访问?
这对我来说更困难的是中间有一个控制器。
firstForm ---(提交)---> emailController ----(重定向) ----> secondForm
答案 0 :(得分:0)
如果要在满足某些条件时将用户重定向到另一个页面,可以使用拦截器。示例拦截器类:
@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>
答案 1 :(得分:0)
找到了另一种方法:
使用FlashAttribute,方法是在emailController的重定向之前分配一个用于设置值的值。
在applicationController中,如果没有FlashAttribute,则使用if语句,然后将重定向重定向到应用程序的根。