我正在尝试创建一个 Spring Boot 应用程序,它将用户/密码组合存储在 MongoDB 的用户文档中。我能够成功设置一个扩展 MongoRepository 的存储库,并且一切正常。现在,我想根据我的存储库连接到的数据源设置身份验证。有没有一种快速方法可以仅使用默认连接来执行此操作,或者我是否需要专门定义一个数据源来执行此操作?
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.jdbcAuthentication().dataSource(dataSource);
}
这里我们应该假设定义了一个数据源,但如果我已经设置了一个 REST 存储库,那么我还没有。我在这里需要中间步骤吗?
最佳答案
我认为在这种情况下 UserDetailsService
接口(interface)将是你最好的 friend
您必须实现 UserDetailsService
接口(interface),并确保您的 Mongo DB 存储库已注入(inject)到您创建的 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
注入(inject)到您的 AuthenticationManagerBuilder
@Autowired
UserDetailsService userDetailsService;
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService);
}
关于java - Spring Boot 配置 + RepositoryRestResource + 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45804968/