如何使用Spring MVC判断何时请求是preHandle中的转发?

时间:2018-09-18 17:50:50

标签: spring-mvc spring-boot

我有以下...

@GetMapping("signup")
public String get(){
    return "forward:/";
}

@Override
public boolean preHandle(HttpServletRequest request,
                       HttpServletResponse response,
                       Object handler) throws IOException {
    ...
        if(!per.isPresent() && !request.getRequestURL().toString().contains("signup")){
            response.sendRedirect("/signup");
            return false;
        }
}

这里的问题是,当转发到来时它没有注册,所以我重定向回去。但是,我也想拦截直接发送到根目录的请求。

有什么方法可以判断请求是否为转发请求以及原始URL是什么?

1 个答案:

答案 0 :(得分:2)

这是我想出的解决方案。我不喜欢这个答案,并且在看起来应该是向前的信息时,我不希望不附加自定义标头。但是,由于我在文档中找不到该信息,所以我只添加了标题...

@GetMapping("")
public String get(HttpServletResponse response){
    response.setHeader("signup","true");
    return "forward:/";
}

然后我检查了

private static boolean isSignupForward(HttpServletResponse response){
    return Boolean.valueOf(response.getHeader("signup"));
}
...
if(
  !isSignupForward(response) &&
  !per.isPresent() &&
  !isSignup(request) &&
  !isJsFile(request)
){
  response.sendRedirect("/signup");
  return false;
}

如果有人有更好的答案,我会离开赏金。