具有 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 Boot:使用 Junit 模拟具有安全上下文的用户身份验证