Я реализую безопасность в приложении весенней загрузки и получаю исключение StackOverflow. У меня есть пользовательское pojo и репозиторий для сохранения пользователя в DB, который работает нормально.spring security StackOverflow Error
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter{
@Autowired
private UserDetailsService userDetailsService;
....
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth
.userDetailsService(userDetailsService); }
и
public class User {
private String password;
public User(User user) {
this.password = user.password;
...
}
public String getPassword() {
return password;
}
ожидает GetPassword пользователя(), чтобы получить колл ниже, но не происходит -
public class MyUserDetails extends User implements UserDetails{
........
@Override
public String getPassword() {
return getPassword();
}
Реализация UserDetailsService -
@Override
public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException {
User user = userRepository.findByEmail(email);
if (user == null)
throw new UsernameNotFoundException("no " + email);
return new MyUserDetails(user);
}
У меня есть inserte d один пользователь/пароль в БД, вызывая userRepository.save (пользователь). Когда я пытаюсь передать недействительный пользователь/пароль, он корректно возвращает неверное сообщение пользователя. Но когда я пытаюсь с пользователя/пароль хранится в БД я получаю следующее исключение -
Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Filter execution threw an exception] with root cause
java.lang.StackOverflowError: null
at com.xyz.MyUserDetails.getPassword(MyUserDetails.java:27) ~[classes/:na]
обновил мое сообщение с помощью класса пользователя, который имеет метод getPassword. – chappalprasad
@chappalprasad Почему вы переписываете метод 'getPassword()' в 'MyUserDetails'? Поскольку он определен как открытый в классе 'User', его можно просто получить, не требуя какой-либо конкретной обработки. – Morfic
Да, я сделал некоторый прогресс. вызывая super.getPassword(), но вы правы, можете просто удалить аннотацию переопределения. В обоих случаях теперь я получаю эту ошибку - Причина: Нет enum constant com.xyz.resource.Role.ROLE_USER
. Я использую Enum Role как часть USER с двумя значениями - USER, ADMIN. – chappalprasad