Spring Boot配置+ RepositoryRestResource +身份验证

时间:2017-08-21 20:20:56

标签: java spring mongodb spring-boot

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

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

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

1 个答案:

答案 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);
}