具有 3 个字段的 Spring 安全身份验证,而不仅仅是用户名和密码

Posted

技术标签:

【中文标题】具有 3 个字段的 Spring 安全身份验证,而不仅仅是用户名和密码【英文标题】:Spring security authentication with 3 fields instead of just username and password 【发布时间】:2014-06-13 17:52:15 【问题描述】:

我想使用username + password + domain(只是一个字符串)进行身份验证。

不是唯一的username,而是username + domain 的唯一组合。

最好的方法是什么?

我正在使用 grails 2.3.7

【问题讨论】:

嘿@user3025704 检查下面的链接一次***.com/questions/16104228/… 【参考方案1】:

试试这样的(代码未经测试):

@Component
public class BasicAuthenticationProvider implements AuthenticationProvider 

    @Autowired
    private UserService registerService;

    @Override
    public Authentication authenticate(Authentication authentication) throws AuthenticationException 

        String email = authentication.getName();
        String password = (String) authentication.getCredentials();
        String domain = (String) authentication.getDetails();

        User user = registerService.getUserByEmail(email);

        if (user == null) 
            throw new BadCredentialsException("Username not found.");
        
        if (!password.equals(user.getPassword()) && !domain.equals(user.getDomain())) 
            throw new BadCredentialsException("Wrong password.");
        

        Collection<GrantedAuthority> authorities = new HashSet<GrantedAuthority>();
        GrantedAuthority grantedAuthority = new GrantedAuthority() 
            @Override
            public String getAuthority() 
                return user.getAuthority();
            
        ;
        authorities.add(grantedAuthority);

        return new UsernamePasswordAuthenticationToken(email, password, authorities);
    

    @Override
    public boolean supports(Class<?> arg0) 
        return true;
    

【讨论】:

如何将它与 grails 集成?我没有使用裸 Spring mvc 不幸的是,我只知道如何在 Spring Mvc 中使用它。

以上是关于具有 3 个字段的 Spring 安全身份验证,而不仅仅是用户名和密码的主要内容,如果未能解决你的问题,请参考以下文章

Spring(引导)具有允许资源的安全预身份验证仍然经过身份验证

具有Spring安全性的LDAP身份验证

Spring Boot:使用 Junit 模拟具有安全上下文的用户身份验证

具有基本身份验证和 OAuth 顺序问题的 Spring Boot 安全性

具有多种身份验证方法的 Web 安全设置

无法使用具有正确凭据的 Spring 3.1 验证 LDAP 帐户