весенняя проверка подлинности rbac с помощью базы данных

#spring-boot

#весенняя загрузка

Вопрос:

Я пытаюсь создать авторизацию на основе ролей в spring boot, и я совершенно новичок в spring, я в основном работаю с PHP.

нашел эту ссылку :

https://spring.io/guides/gs/securing-web/

все отлично, но нет соединения с базой данных, также пытался выяснить, как создать авторизацию с базой данных

 
public class UserDetailsServiceImp implements UserDetailsService {
    
    private UserRepository userRepository;
    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {

    /*Here we are using dummy data, you need to load user data from
     database or other third party application*/
        User user = findUserbyUername(username);

        UserBuilder builder = null;
        if (user != null) {
            builder = org.springframework.security.core.userdetails.User.withUsername(username);
            builder.password(//new BCryptPasswordEncoder().encode(user.getName())
                    user.getName() );
            builder.roles("USER");
        } else {
            throw new UsernameNotFoundException("User not found.");
        }

        return builder.build();
    }

    private User findUserbyUername(String username) {

        return userRepository.findByName(username);
    }
}

  
 
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                .antMatchers("/", "/home", "/demo/all", "/demo/add", "/demo/findby").permitAll()
                .anyRequest().authenticated()
                .and()
                .formLogin()
                .loginPage("/login")
                .permitAll()
                .and()
                .logout()
                .permitAll();
    }

    /*@Bean
    @Override
    public UserDetailsService userDetailsService() {
        UserDetails user =
                User.withDefaultPasswordEncoder()
                        .username("user")
                        .password("password")
                        .roles("USER")
                        .build();

        return new InMemoryUserDetailsManager(user);
    }*/

    @Bean
    public UserDetailsService userDetailsService() {
        return new UserDetailsServiceImp();
    };

    @Bean
    public BCryptPasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    };

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService());//.passwordEncoder(passwordEncoder());
    }
}
  

Пользовательское хранилище

 public interface UserRepository extends CrudRepository<User, Integer> {

    User findByName(String name);

}

  

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

 @Entity // This tells Hibernate to make a table out of this class
public class User {
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Integer id;

    private String name;

    private String email;

    private String[] roles;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}
  

при получении браузером «Неверного имени пользователя и пароля».

что здесь может быть не так, единственное, что я нахожу пользователя из базы данных по имени и сравниваю

ПОЖАЛУЙСТА, ПОМОГИТЕ! Любой, кто знает spring

Комментарии:

1. Есть ли какая-либо конкретная ошибка, будет полезно, если вы добавите сюда журналы ошибок.

2. @Atul добавлены журналы ошибок

3. Я предполагаю, что он не может найти репозиторий, поскольку существует исключение нулевого указателя.

4. Добавьте также свой код восстановления пользователя

5. @Atul добавил userreposiroty это также было взято из учебника mysql spring, класс пользователя показывает данные из таблицы пользователей, я думал, что смогу легко найти и вернуть пользовательские данные для авторизации вместо статических данных

Ответ №1:

Попробуйте это в вашем классе UserDetailsServiceImp:

 @Autowired
private UserRepository userRepository;
  

Комментарии:

1. Большое вам спасибо, я узнал об Autowired и компоненте, я не знал, что эта аннотация инициализирует private UserRepository UserRepository;

2. кстати, @Autowired является наиболее используемой аннотацией в Spring…