однокомпонентное приложение springboot/angular — междоменное приложение, как вернуться в определенное угловое состояние после перехода из другого домена?

#angular #spring-boot #browser #external #execution

Вопрос:

У меня есть приложение, которое состоит из локального «веб-приложения» с угловым передним концом и локальной задней загрузкой spring, собранной вместе и работающей на одном и том же порту.

Все работает нормально, пока мне не понадобится покинуть страницу и вернуться назад:

Пользователь должен выполнить вход на внешний сервер.

После входа в систему он/она возвращается к локальному приложению. URL-адрес перехода запускает контроллер в локальной загрузочной части приложения spring. теперь проблема заключается в том, чтобы вернуться к угловым маршрутам с этого момента, так как вместо контроллеров и маршрутов, определенных на странице приложения angular, запускается контроллер загрузки spring.

мне нужно было бы продолжить выполнение кода переднего плана в angular, и моя проблема заключается в том, как вернуться к коду angular из кода загрузки spring, где я приземлился сейчас после перехода (uri перехода-это мой хост с портом, на котором запущено приложение)

Внутренний контроллер после перехода:

 @PostMapping(path = "/*someEndpoint*")  public Object processResponse(@RequestBody @JsonProperty String requestBody) throws InternalServerException, ExecutionException, InterruptedException {   ModelAndView *resultView* = *someService*.dispatchResponse(requestBody);   return resultView;  }  

Попытка перенаправить, работает только для перехода на корневую страницу (это работает ниже), но мне нужно будет перенаправить на более конкретные URL-адреса, определить в angular, например «/someotherendpoint» или около того. но затем появляется сообщение об ошибке: «страница ошибки с белой меткой — в этом приложении нет явного сопоставления для /ошибки, поэтому вы видите это как запасной вариант», потому что у меня нет определенного контроллера с именем «/someotherendpoint» в части загрузки spring, только в угловой части.

 @Component public class RedirectService {   RestTemplate confirmed;   public ModelAndView redirectToStartPage() {   return new ModelAndView("redirect:/");  }  
 public ModelAndView dispatchResponse(String jsonResponse) throws InternalServerException, ExecutionException, InterruptedException {    ModelAndView returnPage = redirectService.redirectToStartPage();   return returnPage;  }  

Frontend code in anglular, where the jump to the external domain with a java-script form-action is conducted:

   post(body, url){  var mapForm = document.createElement('form');   mapForm.enctype = 'text/plain';  mapForm.method = 'POST';  mapForm.action = url;   // define input element w data to submit in request body  var mapInput = document.createElement('input');  mapInput.type = 'hidden';  mapInput.name = 'data';  mapInput.setAttribute('value', body);  mapInput.setAttribute('id', 'data');  mapInput.setAttribute('type', 'textarea');  mapForm.appendChild(mapInput);  document.body.appendChild(mapForm);  mapForm.submit();     }   

Funcion in javascript which is triggered after pressing the button on the angular-frontend where the jump the external page happens

 applySTH(): void {  let message: string;   this.someService  .*methodName*(this.*someOtherService*.*getSomeVariables*())  .pipe(  map((response: *someVariable*) =gt; {  *some assigning*  })  )  .subscribe(  (data) =gt; {  *some handling*  });  this.logger.info(message);   let reqBody = {  '*some-data*  };  this.redirectToExternalHost(reqBody);  },  (err) =gt; {*handling*  }  );  this.notification.openDialog(NgxLoggerLevel.ERROR, message);  }  );  }   // Method to redirect to Page on *lt;hostgt;* with Post-Request   redirectToExternalHost(reqBody: Object): any {  let data = *someData*;   this.*someService*.post(data, this.*someService*.*uri*);  }  

how can i pass back control /redirect to the front end code where i called the extarnal page? or redirect to another angular page (url , route defined in angular)

потому что я не могу адресовать просто страницы, URL-адреса и маршрутизацию, определенные в angular, так как на данный момент браузер продолжает общаться с серверной частью, ожидая, что контроллеры в серверной части будут слушать.

кто-нибудь знает решение? заранее большое спасибо!