【问题标题】:Spring security clarificationsSpring 安全说明
【发布时间】:2016-01-13 20:03:33
【问题描述】:

我是 Spring 安全新手,学习了 AuthenticationInterceptorAuthenticationManagerUserLoginService 的概念。我知道如何实现 userloginservice 来检查系统中的有效用户。问题是我们有两种类型的用户 1) 专家 2) 用户及其凭据存储在两个不同的表中。 UserDetailsService 的实现应该检查两个表以进行身份​​验证并获取用户的详细信息。是否有可能使用多个身份验证提供程序并根据用户类型使用适当的身份验证提供程序?或者我是否必须使用相同的身份验证提供程序来查询两个表以找出用户有效性?当必须在两个表中搜索用户时,处理这种情况的最佳方法是什么?

【问题讨论】:

  • 您是否希望进行单因素身份验证,例如用户名,并且通过用户名在不同的表中进行搜索?例如,X 用户尝试登录,您在用户表和另一个表中检查了 X?
  • 是的,完全正确。

标签: spring spring-security


【解决方案1】:

我认为你可以这样做:

@Autowired
private UsersDAO usersDAO;

@Autowired
private OtherDAO otherDAO;

@Override
@Transactional
public UserDetails loadUserByUsername(final String username) throws UsernameNotFoundException {

    Users user = usersDAO.find(username);
    Other oth  = otherDAO.find(username);

    // your queries

    if(check if your desire is correct based on user){
        List<GrantedAuthority> authorities = buildUserAuthority(user.getUserRole());
        return buildUserForAuthentication(user, authorities);
    } else {
        //...
    }
}

【讨论】:

  • 是的,我们可以这样做。我正在寻找其他更好的可能性。还是谢谢你!
  • 您可能想要更改您的身份验证管理器。也许这篇文章可以满足您的要求。 krams915.blogspot.com.tr/2010/12/…
猜你喜欢
  • 2019-09-17
  • 2019-10-14
  • 2012-12-24
  • 1970-01-01
  • 1970-01-01
  • 2011-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多