#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…