Logowanie do aplikacji za pomocą Spring Security

Odpowiedz Nowy wątek
2017-07-21 21:40
0

Witam wszystkich. ;)

Tworzę sobie swoją własną małą aplikację i nadszedł czas by stworzyć możliwość logowania się do niej.
Stworzyłem klasę SecurityConfig, która wygląda tak

@Configuration
@EnableWebMvcSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    DataSource dataSource;

    @Autowired
    public void setDataSource(DataSource dataSource) {
        this.dataSource = dataSource;
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth
                .jdbcAuthentication()
                .dataSource(dataSource)
                .usersByUsernameQuery("SELECT username, password FROM user_profile WHERE username = ?")
                .authoritiesByUsernameQuery("SELECT username, 'ROLE_USER' FROM user_profile WHERE username=?")
                .passwordEncoder(new StandardPasswordEncoder("53Kr3t"));

    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .formLogin()
                .loginPage("/")
                .defaultSuccessUrl("/")
                .and()
                .logout().logoutSuccessUrl("/")
                .and()
                .authorizeRequests()
                .antMatchers("/webjars/**", "/", "/register/**", "/add/**",
                        "/list_item/**", "/signin/**", "/signup/**" ).permitAll()
                .anyRequest().authenticated();
    }
}

Przy odpaleniu tego kodu dostaje taki błąd https://github.com/Baron762/superengine.pl/blob/master/error

@Entity
public class UserProfile {

    @Id
    @GeneratedValue
    private Long id;

    private String firstName;

    private String lastName;

    private String postalCode;

    private String place;

    private String address;

    @OneToMany(mappedBy = "user")
    private List<UserProduct> userMyProductList;

    @NotNull
    private String username;

    @NotNull
    private String password;

    private LocalDate birthDate;

    @Email
    @NotNull
    private String email;

//Get & Set

Cały projekt https://github.com/Baron762/superengine.pl

Pozostało 580 znaków

2017-07-21 21:49
0

Przecież odpowiedź jest w tym stack trace.


Caused by: java.sql.SQLException: Column Index out of range, 3 > 2. 
edytowany 2x, ostatnio: Fantazjatyk, 2017-07-21 21:51
Pokaż pozostałe 3 komentarze
to musi być osobna tabela tak ? i ma być tylko tam id użytkownika rola, a enabled to mam rozumieć czy konto jest aktywne tak ? - Qua tron 2017-07-21 22:04
Czy mam dodać nowe kolumny do istniejącej już tabeli gdzie jest login hasło itd? - Qua tron 2017-07-21 22:05
Nie musi. W każdym razie chodzi zapytanie do bazy danych. Ty albo Spring próbujecie otrzymać trzy kolumny kiedy w tabeli są tylko dwie. W którym miejscu? Musiałbyś przeanalizować swój kod. - Fantazjatyk 2017-07-21 22:06
Mógłbyś być tak miły i pokazać mi jakiś przykład ? - Qua tron 2017-07-21 22:16
Teraz nie mam niestety czasu :/ - Fantazjatyk 2017-07-21 22:25

Pozostało 580 znaków

2017-07-21 22:59

Potrzebujesz tabelę gdzie będą: id(Long), username(String), password(String), enabled(int) i 'ROLE_USER'(String). I to tyle.

Dodatkowo zmień zapytanie

auth.jdbcAuthentication()
                .dataSource(dataSource)
                .usersByUsernameQuery("SELECT username, password, enabled FROM users WHERE username=?")
                .authoritiesByUsernameQuery("SELECT username, ‘ROLE_USER’ FROM users WHERE username=?");

Musisz wybierać trzy pola. Nie możesz wybierać tylko username i password. Spring Security nakazuje sprawdzenie poprzez 'enabled' czy konto jest aktywne.


edytowany 5x, ostatnio: Jonki1997, 2017-07-21 23:03

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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