Пересылка из Spring Boot в определенный угловой компонент - PullRequest
1 голос
/ 17 марта 2019

В моем веб-приложении пользовательский интерфейс Angular используется в качестве статического ресурса из приложения Spring Boot (путем копирования встроенного приложения Angular в папку / resources / static приложения Spring Boot).

Все мои конечные точки Spring имеют префикс /api.

Соответствующие маршруты из приложения Angular:

{ path: 'login', component: LoginComponent },
{ path: 'registration', component: RegistrationComponent },
{ path: '', pathMatch: 'full', redirectTo: 'login' }

Это работает нормально, когда я запускаю приложение Spring Boot и перехожу на http://localhost:8080 в браузере, тогда отображается страница входа в приложение Angular.

Проблемная часть:

Переход непосредственно к страницам входа или регистрации путем вставки http://localhost:8080/login или http://localhost:8080/registration в браузер и нажатия Enter не будет работать, потому что запрос попадет в приложение Spring Boot и, поскольку у него нет соответствующего сопоставления, он будет возврат 404.

Первое, что я сделал, очевидно, был поиск решения в Stackoverflow, и большинство ответов предлагали пересылать запросы в корень с соответствующим сопоставлением, поэтому я добавил следующее Controller:

@Controller
public class ViewController {

    @RequestMapping({"/login", "/registration"})
    public String forward() {
        return "forward:/";
    }
}

Это решает 404 ошибки.

Проблема в том, что даже если я сразу перехожу на http://localhost:8080/registration, меня перенаправляют на страницу входа и отображается LoginComponent.

Чего я хотел бы добиться, так это перейти в браузер к http://localhost:8080/registration, а затем перейти на страницу регистрации и показать RegistrationComponent приложения Angular.

Это вообще возможно? Если это так, я бы по-настоящему оценил любой совет, как этого добиться.

1 Ответ

1 голос
/ 17 марта 2019

Так что, как оказалось, я просто глуп, спасибо @ JB Nizet за его комментарий.

Отправленный код в вопросе правильный, но я добавилследующий фрагмент недавно моего AppComponent в приложении Angular (и вроде как забыл об этом):

this.authService.currentAuth
  .subscribe(auth => {
    if (!auth) { // navigate to login if the user is not authenticated
      this.router.navigate(['/login']);
    }
  });

Что просто неправильно, и именно это и стало причиной проблемы.

...