Spring Security - аутентификация JDBC не работает, когда передаются правильные учетные данные - PullRequest
0 голосов
/ 27 марта 2019

У меня проблема с аутентификацией jdbc в приложении, использующем Spring Security.Иногда я могу войти без каких-либо сложностей (передавая правильные учетные данные), но иногда приложение отображает «неверные учетные данные» на странице входа в систему (я уверен, что учетные данные правильные).

Я использую Spring BootSpring Security, MySQL, BCryptEncoder для хранения паролей пытались внести множество изменений, но результат все тот же ...

Код аутентификации JDBC:

@Configuration
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Autowired
    private DataSource dataSource;

    @Autowired
    protected void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {

        auth.jdbcAuthentication()
          .dataSource(dataSource)
          .usersByUsernameQuery("SELECT username, password, 'true' as enabled"
              + " FROM user WHERE username=?")
          .authoritiesByUsernameQuery("SELECT username, authority"
              + " FROM authorities WHERE username=?")
          .passwordEncoder(new BCryptPasswordEncoder());
    }

Конфигурация безопасности Spring:

@Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/login")
                .permitAll()
                .antMatchers("/registration")
                .permitAll()
                .antMatchers("/forgot-password", "/reset**")
                .permitAll()
                .antMatchers("/**")
                .access("hasRole('ROLE_USER')")
            .and()
                .formLogin()
                .loginPage("/login")
                .defaultSuccessUrl("/")
                .usernameParameter("username")
                .passwordParameter("password")
            .and()
                .rememberMe()
                .rememberMeCookieName("home-budget-login-cookie")
                .tokenValiditySeconds(365 * 24 * 60 * 60)
                .rememberMeParameter("remember-me")
                .tokenRepository(persistentTokenRepository())
            .and()
                .logout()
                .permitAll()
                .deleteCookies("auth_code", "home-budget-login-cookie");

    }

Сохранение нового метода пользователя (процесс регистрации):

@Service("userService")
public class UserService {

    public void saveUser(User user, boolean updateMode) {
        user.setPassword(new BCryptPasswordEncoder().encode(user.getPassword()));
        user.setPasswordConfirm(new BCryptPasswordEncoder().encode(user.getPasswordConfirm()));
        user.setEnable(1);
        User userReturned = userRepository.save(user);

        if (!updateMode) {
            Authorities role = new Authorities();
            role.setUsername(userReturned.getUsername());
            role.setAuthority("ROLE_USER");

            roleRepository.save(role);
        }

    }

}

Пользователь:

@Entity
@Table(name = "user")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "user_id")
    private int id;

    @Column(name = "username")
    @NotNull
    private String username;

    @Column(name = "email")
    @Email(message = "Please provide a valid e-mail")
    @NotNull
    private String email;

    @Column(name = "password")
    @NotNull
    private String password;

    @Column(name = "password_confirm")
    @NotNull
    private String passwordConfirm;

    @Column(name = "enabled")
    private int enable;

    @Column(name = "reset_token")
    private String resetToken;

Я ожидаю, что приложение войдет в систему без проблем,во время передачи правильных учетных данных.Есть ли лучший способ, чем аутентификация jdbc?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...