【发布时间】:2019-06-18 23:27:49
【问题描述】:
美好的一天。
我需要根据以下 URL 使用 springboot2 来实现带有 spring-security 的 OAuth2。
网址名称: https://www.devglan.com/spring-security/spring-boot-oauth2-jwt-example
我做到了。
这里我在验证用户时对上述代码有另一个不同的要求。
我需要在邮递员工具的 x-www-form-urlencoded 选项卡中传递 companyId 以及用户名和密码以及 grant_type(password)。 我必须根据用户名和 companyId 获取用户。
所以请帮我看看我需要在上面的链接代码中做些什么改变,这样我才能达到我的要求。
在这里我只收到电子邮件。我需要电子邮件和 companyId。
@Override
@Transactional
public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException {
User user = userRepository.findByEmail(email).orElseThrow(
() -> new UsernameNotFoundException("User Not Found with -> username or email : " + email));
return UserPrinciple.build(user);
}
Expected:
@Override
@Transactional
public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException {
User user = userRepository.findByEmailAndCompanyId(email,companyId).orElseThrow(
() -> new UsernameNotFoundException("User Not Found with -> username or email : " + email));
return UserPrinciple.build(user);
}
目前使用用户名和密码可以正常工作。
但在我的系统中,我将同一用户映射到不同的公司。如果发现同一用户映射到多个公司,我会收到如下错误。
{ “错误”:“未经授权”, “error_description”:“查询未返回唯一结果:2;嵌套异常为 javax.persistence.NonUniqueResultException:查询未返回唯一结果:2” }
我需要根据用户名和密码以及导致单个用户的 companyId 获取用户。
有人可以帮助解决这个问题吗?提前非常感谢。
【问题讨论】:
-
您的存储库似乎返回 2 个结果而不是 1 个(就像例外所说的那样),所以我猜这 2 个结果无法映射到您的用户对象上。
标签: java spring-boot spring-security oauth