Spring Security defaultSuccessUrl()

Odpowiedz Nowy wątek
2020-03-26 21:34

Rejestracja: 2 tygodnie temu

Ostatnio: 2 dni temu

0

Witam, zmierzam się z pewnym problemem. Wyciągam aktualnie zalogowanego usera jego email w ten sposób:

 public String currentLoggedInUser() {
        Object auth = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
        String email = (String) auth;
        UserEntity createdByEmail = repository.findByEmail(email);
        return createdByEmail.getUserId();
    }

Jak widać zwraca ona mi userId.
Chciałbym po zalogowaniu, żeby przenosiło nas odrazu na endpoint z userId, lecz gdy to zrobię z pomocą tej metody wyskakuje mi wyjątek:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'springSecurityFilterChain' defined in class path resource [org/springframework/security/config/annotation/web/configuration/WebSecurityConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [javax.servlet.Filter]: Factory method 'springSecurityFilterChain' threw exception; nested exception is java.lang.NullPointerException
 @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable();
        http.authorizeRequests()
                .antMatchers("/h2-console").hasRole("ADMIN")
                .anyRequest().permitAll()
                .and()
                .formLogin().defaultSuccessUrl("/users/" + currentLoggedInUser()).permitAll()
                .and()
                .logout().logoutUrl("/log-out").permitAll();

    }

i teraz mam pytanie co muszę zrobić by to wszystko działało pozdrawiam :D

edytowany 1x, ostatnio: Shalom, 2020-03-27 01:12
Hej! Twój post prawdopodobnie zawiera niesformatowany kod. Użyj znaczników ``` aby oznaczyć, co jest kodem, będzie łatwiej czytać. (jestem botem, ta akcja została wykonana automatycznie, prawdopodobieństwo 0.99988526) - Tasmanian Devil 2020-03-26 21:56

Pozostało 580 znaków

2020-03-27 00:57

Rejestracja: 2 tygodnie temu

Ostatnio: 2 dni temu

0

Zamykam rozwiazlaem to w taki sposób, że przenosi mnie po zalogowaniu na endpoint /users gdzie ten endpoint w kontrolerze ma taką funkcjonalność, która pobiera maila z zalogowanego użytkownika pobiera go z bazy danych dzięki mailu i zwraca JSONa UserEntity

Pozostało 580 znaków

2020-03-27 01:14
Moderator

Rejestracja: 16 lat temu

Ostatnio: 49 minut temu

SecurityContextHolder.getContext().getAuthentication().getPrincipal();

:( Wiesz że możesz dać Principal jako argument kontrolera zamiast tak cudować? Takie coś w ogóle raczej nie może działać wewnątrz kodu który dopiero definiuje ci security, bo przecież masz problem jajka i kury.
Zresztą to w ogóle działa? Przecież powinieneś tam dostać Principal a nie stringa jeśli w ogóle.


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...
edytowany 1x, ostatnio: Shalom, 2020-03-27 01:16
Tak wiem, wszystko pozmieniałem bo to nie miało sensu bo musiałem rzutować na Stringa, a tak to mam wszystko podane jak na tacy. Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); String currentUserName = authentication.getName Tak to mniej więcej zrobiłem, username to mój mail a potem z bazy danych pobieram za pomocą maila UserEntity I przekształcam go na UserResponse - WiktorSadowski 2020-03-27 01:20

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0