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

Jac*_*kie 5 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;
        }
}
Run Code Online (Sandbox Code Playgroud)

这里的问题是当前进来的时候没有注册,所以我重定向回来.但是,我还想拦截直接发送到根目录的请求.

有没有办法判断一个请求是否是一个转发,原始网址是什么?

Jac*_*kie 2

这是我想出的可行的解决方案。我不喜欢这个答案,并且当似乎应该提供转发的信息时,我不希望附加自定义标头。但是,由于我在文档中找不到该信息,所以我只是添加了标题......

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

然后我查了一下

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;
}
Run Code Online (Sandbox Code Playgroud)

如果有人有更好的答案,我将留下赏金。