我正在尝试创建一个Spring Boot应用程序,它将用户/密码组合存储在MongoDB的用户文档中。我能够成功建立一个扩展MongoRepository的存储库,一切正常。现在,我想根据我的存储库连接的数据源设置身份验证。有没有一种快速的方法只使用默认连接,或者我是否需要专门定义一个DataSource来执行此操作?
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.jdbcAuthentication().dataSource(dataSource);
}
这里我们应该假设定义了一个dataSource,但如果我已经设置了一个REST存储库,那么我还没有。我需要中间步吗?
答案 0 :(得分:0)
我认为在这种情况下UserDetailsService
界面将是您最好的朋友
您必须实现UserDetailsService
接口,并确保将Mongo DB存储库注入您创建的UserDetailsService
实现中。之后,让我们实现loadUserByUsername
方法,以便返回org.springframework.security.core.userdetails.User
对象,并用Mongo DB用户信息填充它。
import org.springframework.security.core.userdetails.User;
@Service
public class MyUserService implements UserDetailsService {
@Autowired
MyMongoRepo myMongoRepo;
@Override
public UserDetails loadUserByUsername(String s) throws UsernameNotFoundException {
List<SimpleGrantedAuthority> dummyAuthorityForExample = Arrays.asList(new SimpleGrantedAuthority("ROLE_ADMIN"));
MyMongoUser mongoUser= myMongoRepo.findByUsername(s);
User user = new User(mongoUser.getUsername(), mongoUser.getPassword(),dummyAuthorityForExample);
return user;
}
}
最后将UserDetailsService
注入AuthenticationManagerBuilder
@Autowired
UserDetailsService userDetailsService;
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService);
}