Angular <-> Spring, brak odpowiedzi (VPS)

Angular <-> Spring, brak odpowiedzi (VPS)
PL
  • Rejestracja:ponad 7 lat
  • Ostatnio:około 4 lata
  • Postów:36
0

Siemka, mam pewnie problem związany z wysyłaniem zapytań na serwer.

Generalnie wygląda to tak że odpalam aplikacje springa, potem angulara, wszystko rusza.
Przy czym jak wysyłam zapytanie z angulara na apke w springu to jest status failed (no idea why)

Nie wiem czy na VPS trzeba coś dodatkowo pokonfigurować, ale dziwne jest to, że odpalając angulara na vps,
a serwer springa u siebie na pc to wtedy requesty dochodzą i serwer odsyła response (???)

Przez co możnaby wnioskować, że aplikacja springa na vps pod jakimś innym url niż localhost:8080, tylko nie wiem jak mógłbym to sprawdzić?
Przy odpalaniu w logach jest że

Kopiuj
Tomcat started on port(s): 8080 (http) with context path '
edytowany 1x, ostatnio: placeg
PL
  • Rejestracja:ponad 7 lat
  • Ostatnio:około 4 lata
  • Postów:36
0

bump

mr_jaro
  • Rejestracja:prawie 14 lat
  • Ostatnio:ponad 3 lata
  • Lokalizacja:Grudziądz/Bydgoszcz
  • Postów:5300
0

cors?


It's All About the Game.
PL
jesli chodzi o adnotacje to w projecie one są i w sumie nie rozumiem tego że skoro działa na pc, to czemu na vps nie? z tym corsem to trzeba jakis config na vps zrobić?
PL
  • Rejestracja:ponad 7 lat
  • Ostatnio:około 4 lata
  • Postów:36
0

Jak przykładowo wywołam dowolny endpoint:

Kopiuj
curl localhost:8080/customer/session

to jest normalnie odpowiedź, a przez angulara nie ma :/

jarekr000000
  • Rejestracja:ponad 8 lat
  • Ostatnio:około godziny
  • Lokalizacja:U krasnoludów - pod górą
  • Postów:4707
0

Co ci pisze konsola (f12).
Na jaki adres idą te zapytania?
No bo jak masz serwer (z angularem) na adresie http://x.y.z:9090/index.html
to zapytania do localhost:8080 na pewno nie będą działać.

  1. Z powodu zabezpieczeń.
  2. I bez sensu **localhost **to twój komputer, a pewnie byś chciać springa z serwera odpytać.

jeden i pół terabajta powinno wystarczyć każdemu
edytowany 2x, ostatnio: jarekr000000
PL
  • Rejestracja:ponad 7 lat
  • Ostatnio:około 4 lata
  • Postów:36
0
jarekr000000 napisał(a):

Co ci pisze konsola (f12).
Na jaki adres idą te zapytania?
No bo jak masz serwer (z angularem) na adresie http://x.y.z:9090/index.html
to zapytania do localhost:8080 na pewno nie będą działać.

  1. Z powodu zabezpieczeń.
  2. I bez sensu **localhost **to twój komputer, a pewnie byś chciać springa z serwera odpytać.

Zapytania idą na localhost:8080.

To co, teraz muszę wszystkie http.requesty od strony angulara zmienić? Tylko na jaki adres? ip.vps:8080 ?

PL
i też tego nadal nie rozumiem, bo skoro po odpaleniu aplikacji, odpale druga konsole, wpisze jakiś endpoint np: curl localhost:8080/customer/session to faktycznie dostaje odpowiedź, fakt faktem że ten endpoint zwraca ResponseEntity, więc w sumie tylko na nim dostaje odpowiedź z poziomu konsoli.
PL
  • Rejestracja:ponad 7 lat
  • Ostatnio:około 4 lata
  • Postów:36
0

Zmieniłem requesty url od strony angulara tak jak tutaj:

changed.png

I teraz wszystko działa, tylko teraz rodzi mi się pytanie w głowie:

Czy jeśli już chcemy wrzucić na deploy jakąś aplikacje, to zawsze musimy potem zmieniać wszystkie url request w aplikacji angulara?
Niby nie jest to jakoś mega uciążliwe jak sie ma ich koło 30, ale podejrzewam że przy większym projekcie mogłoby to być kłopotliwe :D
Nie ma jakiejś szybszej drogi?

jarekr000000
  • Rejestracja:ponad 8 lat
  • Ostatnio:około godziny
  • Lokalizacja:U krasnoludów - pod górą
  • Postów:4707
1

Pierwsze - to zwykle nie potrzebuje pisać tego http:// tylko możesz używać adresów względnych.
Drugie - location.host - zwraca nazwę strony hosta (w Angularze jest do tego specjalny serwis)
Trzecie - w programowaniu normalnie można używac zmiennych, stałych i definiowac to w jednym miejscu.


jeden i pół terabajta powinno wystarczyć każdemu
Schadoow
  • Rejestracja:ponad 13 lat
  • Ostatnio:5 minut
  • Postów:1068
0

Jeśli dasz url w postaci api/dupa to strzeli http://<host>:<port>/<baseUrl>/api/dupa
natomiast w przypadku /api/dupa to wynikiem będzie strzał do http://<host>:<port>/api/dupa

Tak to mniej więcej powinno wyglądać:

Kopiuj
public getDupa(): Observable<Dupa> {
        const url = `api/dupa`;
        const params = new HttpParams()
            .set('param', 'x')
        return this.http.get(url, {params: params});
    }
edytowany 1x, ostatnio: Schadoow
PL
  • Rejestracja:ponad 7 lat
  • Ostatnio:około 4 lata
  • Postów:36
0

Pozwolę sobie odkopać ten temat bo mam niezrozumiały dla mnie problem..

Otóż z poziomu przeglądarki wysyłając request pod adres vps:

request.png

server nie odpowiada, nic z tych rzeczy.

Natomiast jak wywołam jakiś endpoint curlem w ten sposób:

response.png

To server normalnie odpowiada, nie ma problemu. (z każdym innym jest tak samo, wszystko działa)

Czy ktoś wie co może być grane? :/

PL
stawiałbym na jakiś config apache'a czy coś, ale wydaje mi się że już wszystko poustawiałem .. ;v
PL
no jak cors skoro wczesniej mi dzialalo? :D
PL
  • Rejestracja:ponad 7 lat
  • Ostatnio:około 4 lata
  • Postów:36
0

@mr_jaro:

Tak wyglada moj config:

Kopiuj

@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
public class SecurityRequestFilter implements Filter {
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) {
        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) res;

        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-control-Allow-Methods", "POST, PUT, GET, OPTIONS, DELETE");
        response.setHeader("Access-Control-Allow-Headers", "x-requested-with, x-auth-token");
        response.setHeader("Access-Control-Max-Age", "3600");
        response.setHeader("Access-Control-Allow-Credentials", "true");

        if(!(request.getMethod().equalsIgnoreCase("OPTIONS"))) {
            try {
                chain.doFilter(req, res);
            } catch (Exception e) {
                e.printStackTrace();
            }
        } else {
            System.out.println("Pre-fight");
            response.setHeader("Access-Control-Allowed-Methods", "POST, GET, DELETE");
            response.setHeader("Access-Control-Max-Age", "3600");
            response.setHeader("Access-Control-Allow-Headers", "authorization, content-type, x-auth-token, " +
                    "access-control-request-headers,access-control-request-method,accept,origin,authorization,x-requested-with");
            response.setStatus(HttpServletResponse.SC_OK);
        }
    }



    public void init(FilterConfig filterConfig) {}

    public void destroy() {}
}
edytowany 2x, ostatnio: placeg
Aleksander Brzozowski
  • Rejestracja:ponad 8 lat
  • Ostatnio:prawie 5 lat
  • Postów:26
0

Jak stawiasz aplikację angularową?
Ja bym nie konfigurował tego cors'a po stronie backendu, tylko zrobił proxy na poziomie nginx/apache czy innego http-servera, który serwuje twoją aplikacje angularową.
Wtedy, gdy twoja aplikacja angularowa jest dostępna z adresu https://example.com, wszystko co idzie na https://example.com/api/*, proxowałbym po stronie http-servera na twój docelowy backend.

edit: BTW, czy twój backend jest widoczny w internecie? Z tego co widzę to request robisz z maszyny gdzie jest postawiony backend?

edytowany 1x, ostatnio: Aleksander Brzozowski

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.