Spring Boot 2 i Spring Security, wolne ładowanie

0

Witam, mam dziwny problem, mam nowy projest w Spring Boot 2 i Spring Security i pierwsze ładowanie w przeglądarce zasuwa normalnie. Klikam i od razu widać stronę logowania, i mogę się logować do aplikacji, ale jak zrobie to 2gi raz to już muszę czekać kiilkanaście sekund na zobaczenie formularza logowania, wpisuje hasło login i znów muszę czekać kilka sekund na zalogowanie. Pomaga dopiero uruchomienie ponowne komputera, po którym i tak tylko pierwszy raz działa wszystko szybko. Co jest nie tak? Nie wyskakują żadne błędy, tylko trwa to strasznie długo, w przeglądarce tylko widać że czeka na localhost bardzo długo.

0

W czym strona zrobiona? Zobacz tez może dla pewności w przeglądarce w zakładkach od sieci (narzędzia deweloperskie) czy tam coś nie siedzi.

0

Formularz jest w htmlu ale to bez znaczenia jest. Bo w sumie czekam nawet na 404 10 sekund, w developerskich nic nie ma, no procz 10 sekundowego GETa przez którego tyle czekam. Na razie nie mam żadnych stron, chciałem sprawdzić kontrolery czy wczystko jest ok i wszystko jest ok ale po około 10 sekundach...

0

To jeszcze wstaw jakiś kod jaki masz to będzie łatwiej ;)

0

A śledzisz, co się dzieje przy pierwszym, a co przy drugim wywołaniu w backendzie? Logujesz co tam ile trwa? Wrzuć kawałki kodu związane z logowaniem po stronie backendu, application.properties i takie tam, będzie łatwiej dojść do tego co tak przymula ;)

0

Właśnie nic sie nie dzieje, wszystko wygląda ok, bez błędów. T jest goła apka z prostym configiem security.

public class SecurityConfig extends WebSecurityConfigurerAdapter {

	@Autowired
	   public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
	      auth
	         .inMemoryAuthentication()
	         .withUser("user").password("{noop}password").roles("USER");
	   }
 
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
           .authorizeRequests()
              .antMatchers("/", "/home").permitAll()
              .antMatchers("/admin/**").hasRole("ADMIN")
              .anyRequest().authenticated()
              .and()
           .formLogin()
              .permitAll()
              .and()
              .logout()
              .permitAll();
     }
     
    
}

w properties mam

#Spring security

spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration

Z tym że, zabrałem się za inny projekt w intellij idea bo miałem dość tego, wróciłem po godzinie do tego w eclipse i... działa... SZOK
A jutro może znów się zesra

0

Na jakim hoście i porcie uruchamiasz aplikację? Sprawdź, czy inne usługi nie próbują wbić w ten port. Windows netstat -ano | findstr :8080, linux lsof -i :8080.

0

Różnie, bo 8080 mam zajęty, ten projekt akurat na 8085, ale to nie miało wpływu. Przy zmianie też były lagi

0

Problem powrócił, zacząłem od nowa po przerwie tym razem goły spring boot projekt i działa i dodałem dependency spring security i znów zwiechy. Może ktoś mi z tym pomóc się uporać?
W załączniku zdjęcia z przeglądarek chrome i mozilla

0

UPDATE!!
Witajcie, znalazłem dokładny **zapalnik **tego problemu. Otóż jak na stronie user **najpierw **zaloguje się a potem zacznie przeglądać stronę to wszystko działa płynnie i bez opóźnień. ALE jak np bez zalogowania próbuje otworzyć stronę wymagającą zalogowanego usera to przekierowuje do formularza logowania (tak jak być powinno), z tym że po tej operacji już wszystko zaczyna działać wolno dopóki nie uruchomie komputera ponownie. Dziwne.
Może taki problem ktoś z Was miał?
Mimo wszystko chciałbym się dowiedzieć czemu tak się dzieje.
Mam nadzieję że jak wypchne projekt na amazona to nie będzie takich lagów

0

A ta strona jest http czy https? Bo tropiłem ostatnio ciekawego buga z autentykacją w Spring Security, który generalnie był triggerowany przez secure/not secure cookie.
W skrócie: jeśli wejdziesz na stronę przez https to wygeneruje ci się "secure" cookie. Ale takie cookie nie jest wysyłane przy requestach http, więc jak następnie user wchodził do aplikacji po http to cookie nie miał i szedł redirect to SSO a SSO zwracało nową sesję... I generalnie każda zmiana podstrony robiła taki round-trip do SSO.
Co więcej przy takim redirecie Spring Security w sesji trzyma informacje gdzie wrócić z redirecta autentykacyjnego, ale skoro sesja się zmieniała, to user nie miał gdzie wrócić :D

@Stang otwórz sobie zakładkę network w przeglądarce i zobacz co dokładnie się tam u ciebie dzieje.

0

Jak rozumiem jesteś w stanie zreprodukować problem? Jeśli tak, to reprodukujesz i robisz zrzut wątków JVM i powinno być widać, na której ścieżce kodu wątek "wisi".

W JDK masz dwa toole, które Ci pomogą:

  • jps - listuje procesy javowe
  • jstack - robi zrzut procesu

Możesz zrobić tak:

  1. Odpalasz aplikację
  2. Sprawdzasz via jps jaki jest PID VM
  3. Przygotowujesz w konsoli polecenie: jstack <pid procesu>
  4. Reprodukujesz problem
  5. Szybko uruchamiasz jstacka
  6. Analizujesz zrzut wątków (albo wrzucasz na forum) i może będą tam hinty co się dzieje ;-)
0

Co się dzieje podczas tego długiego czekania? Czy CPU w procesie Javy chodzi na 100%?
Jeśli tak, to ja obstawiam wyciek pamięci. Sesja użytkownika zżera z jakiegoś powodu sporo heapa i dlatego jest coraz wolniej i wolniej, a gc ma coraz więcej pracy.

Jeżeli cały system operacyjny przymula, to może po prostu java dostała za dużo -Xmx i pamięć wirtualna migocze. Java tak już ma.

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.