我的Web应用程序[Spring MVC]启动时需要创建默认用户配置文件:
-使用postConstruct
-在启动时创建默认用户
-不要在下次运行中创建同一用户
-默认用户(例如admin)以及其他一些信息(例如名字,姓氏,DOB等),并且应将其存储在数据库中。
当然,我必须遵循适当的mvc模式,例如控制器,模型,服务,存储库,spring-configuration,spring-security配置。
请不要在spring-boot
或JSON
中发布代码。
任何帮助将不胜感激,并在此先感谢。
答案 0 :(得分:0)
按如下所示创建一个名为SecurityUtil的类。
import org.springframework.security.authentication.encoding.Md5PasswordEncoder;
import java.util.HashSet;
import java.util.Set;
public class SecurityUtil {
public static User getFirstTimeUser() {
User defaultUser = new User();
defaultUser.setActive(true);
defaultUser.setUserId("admin");
defaultUser.setFirstName("First Time");
defaultUser.setLastName("Admin");
defaultUser.setId(0L);
defaultUser.setPassword(new Md5PasswordEncoder().encodePassword("admin", Constants.SALT));
//Set<Role> roles = new HashSet<Role>();
Role role = new Role();
role.setId(0L);
role.setRoleName("ROLE_ADMIN");
//roles.add(role);
defaultUser.setRole(role);
return defaultUser;
}
然后从通过Spring的UserDetails实现的Userservice类中调用此方法。
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
UserFilter filter = new UserFilter();
filter.setUserId(username);
List<User> users = userDAO.find(filter);
if (users != null && users.size() == 1) {
return users.get(0);
} else {
if (userDAO.count() == 0) {
return getFirstTimeUser();
} else {
throw new UsernameNotFoundException("Username Not Found Exception");
}
}
}
答案 1 :(得分:0)
经过大量研究后,这个问题有了简单的解决方案,我得出的结论是,使用@PostConstruct可以在应用程序的初始化阶段创建任何东西。 野兔是我发现的东西:
@Component
public class DbInit {
@Autowired
private UserRepository userRepository;
@PostConstruct
private void postConstruct() {
User admin = new User("admin", "admin password");
User normalUser = new User("user", "user password");
userRepository.save(admin, normalUser);
}
}
来自:https://www.baeldung.com/spring-postconstruct-predestroy的参考 多亏了此站点,我们才是一个学习的好地方。