Spring Boot 配置 + RepositoryRestResource + 身份验证

Posted

技术标签:

【中文标题】Spring Boot 配置 + RepositoryRestResource + 身份验证【英文标题】:Spring Boot Configuration + RepositoryRestResource + Authentication 【发布时间】:2018-01-29 23:49:05 【问题描述】:

我正在尝试创建一个 Spring Boot 应用程序,它将用户/密码组合存储在 MongoDB 的用户文档中。我能够成功地建立一个扩展 MongoRepository 的存储库并且一切正常。现在,我想根据我的存储库连接到的数据源设置身份验证。是否有一种仅使用默认连接的快速方法来执行此操作,还是我需要专门定义一个 DataSource 来执行此操作?

@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception 
    auth.jdbcAuthentication().dataSource(dataSource);

这里我们应该假设定义了一个数据源,但是如果我已经设置了一个 REST 存储库,那么我还没有。我需要一个中间步骤吗?

【问题讨论】:

【参考方案1】:

我认为在这种情况下UserDetailsService interface 将是你最好的朋友

您必须实现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);

【讨论】:

所以我实际上需要在我的 AuthenticationManagerBuilder 上设置一个 userDetailsS​​ervice 而不是 jdbcAuthentication? 是的,因为 jdbc 身份验证会尝试使用 sql 查询来获取用户数据,但 mongo 数据库是基于文档的,并且没有 SQL 实际上你可以通过查看 JdbcUserDetailsManager 的源代码来证明这一点,这是为 jdbc 身份验证实现的 UserDetailService,你可以看到查询是如何创建为 sql 的 谢谢,这就是我要找的!

以上是关于Spring Boot 配置 + RepositoryRestResource + 身份验证的主要内容,如果未能解决你的问题,请参考以下文章

Spring boot 默认首页配置 Spring boot web默认首页配置 Spring boot web项目默认首页配置

Spring Boot 揭秘与实战 附录 - Spring Boot 公共配置

Spring Boot参考教程Spring Boot配置使用之配置文件用法

初识Spring Boot (Spring Boot配置文件)

Spring Boot . 4 -- 定制 Spring Boot 配置

黑马_13 Spring Boot:04.spring boot 配置文件