Я аутентифицирую приложение на странице входа в систему, используя Spring Seurity и Spring Boot. Я храню учетные данные пользователя в файле свойств (до тех пор, пока мы не завершим работу с базой данных) с паролем в зашифрованном виде для запуска 5 пользователей.
Вот мой файл свойств
User.properties
my.web.user[0].username=John
my.web.user[0].password=$2y$12$V
my.web.user[0].role=ADMIN,USER
my.web.user[1].username=Johny
my.web.user[1].password=$2y$12$5C
my.web.user[1].role=ADMIN,USER
my.web.user[2].username=McCain
my.web.user[2].password=$2y$12$ERL8mf5.
my.web.user[2].role=USER
Так что теперь мы можем добавить столько пользователей, сколько мы хотим, но в этом формате массива. Теперь я загружаю этот файл свойств в Spring Boot.
MyWebApplication. java
@SpringBootApplication
@ComponentScan(basePackages = { "com.myorg.module" })
@EnableConfigurationProperties(UserConfig.class)
public class MyWebApplication {
public static void main(String[] args) {
ApplicationContext appCtxt = SpringApplication.run(MyWebApplication.class, args);
}
}
UserConfig. java
@Configuration
@PropertySource("user.properties")
@ConfigurationProperties(prefix="my.web")
public class UserConfig {
private List<User> user;
/**
* @return the user
*/
public List<User> getUser() {
return user;
}
/**
* @param user the user to set
*/
public void setUser(List<User> user) {
this.user = user;
}
}
UserDetailsServiceImpl
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.userdetails.User.UserBuilder;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Component;
import UserConfig;
import User;
@Component
public class UserDetailsServiceImpl implements UserDetailsService{
@Autowired
private UserConfig userConfig;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
User user = findUserByUsername(username);
UserBuilder userBuilder = null;
if(user != null) {
userBuilder = org.springframework.security.core.userdetails.User.withUsername(username);
userBuilder.password(new BCryptPasswordEncoder().encode(user.getPassword()));
userBuilder.roles(user.getRoles());
}else {
throw new UsernameNotFoundException("User Not Found");
}
return userBuilder.build();
}
private User findUserByUsername(String username) {
System.out.println(userConfig);
return userConfig.getUser().get(0);
}
}
Теперь, когда я загружаю UserConfig в свой UserDetailsServiceImpl, используя @Autowired. В этом случае я получаю userConfig как ноль. Однако, когда я помещаю точки отладки в getter / setter в UserConfig. Я вижу, что это при заполнении объекта со свойствами содержимого при запуске контейнера. Но позже он исчезает и делает его пустым.
Может кто-нибудь сообщить мне, где я делаю ошибку?
Заранее спасибо.