主要绕过密码匹配,代码如下
···
@Component
public class MyHashedCredentialsMatcher extends HashedCredentialsMatcher {
@Override
public boolean doCredentialsMatch(AuthenticationToken token, AuthenticationInfo info) {
if (MobileSmsCodeToken.class.isAssignableFrom(token.getClass())) {
return true;
}
return super.doCredentialsMatch(token, info);
}
}
public class MobileRealm extends AuthorizingRealm {
@PostConstruct
public void initCredentialsMatcher(){
MyHashedCredentialsMatcher myHashedCredentialsMatcher = new MyHashedCredentialsMatcher();
myHashedCredentialsMatcher.setHashAlgorithmName(ShiroUtils.hashAlgorithmName);
myHashedCredentialsMatcher.setHashIterations(ShiroUtils.hashIterations);
setCredentialsMatcher(myHashedCredentialsMatcher);
}
...省略
}
public class MobileSmsCodeToken implements AuthenticationToken {
/**
* 手机号
*/
private String mobile;
/**
* 短信验证码
*/
private String smsCode;
}
···
本文介绍了一种通过短信验证码实现登录的方式,该方式在特定条件下绕过了传统的密码匹配验证过程。具体实现中,定义了一个自定义的`MyHashedCredentialsMatcher`类来覆盖原有的密码匹配逻辑,并创建了`MobileSmsCodeToken`类用于承载手机号和短信验证码信息。

1万+

被折叠的 条评论
为什么被折叠?



