Как я могу узнать, когда запрос является форвардом в preHandle с использованием Spring MVC? - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть следующее ...

@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 голосов
/ 26 сентября 2018

Вот решение, которое я нашел, которое работает.Мне не нравится этот ответ, и я предпочел бы не прикреплять пользовательский заголовок, когда кажется, что информация о том, что это форвард, должна быть доступна.Однако, так как я не мог найти эту информацию в документах, я просто добавил заголовок ...

@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;
}

Я оставлю награду весли у кого-то есть лучший ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...