package com.iplatform.security.callback;
import com.iplatform.base.util.PlatformRSAUtils;
import com.iplatform.model.po.S_user_core;
import com.walker.web.CaptchaType;
import com.walker.web.UserPrincipal;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
/**
* 移动端通过:账号、密码方式登录,
* 不需要任何验证码。
* @author 时克英
* @date 2023-03-20
* @date 2023-04-07 修改名字为'密码加密'登录回调实现。
*/
public class EncryptPasswordLoginCallback extends
// GeneralLoginCallback
SimplePasswordLoginCallback
{
// @Deprecated
// @Override
// public Object[] queryLoginUser(String loginId) {
// return new Object[0];
// }
@Override
public boolean validatePassword(UserPrincipal userPrincipal) {
Authentication usernamePasswordAuthenticationToken = SecurityContextHolder.getContext().getAuthentication();
String password = usernamePasswordAuthenticationToken.getCredentials().toString();
try {
// APP传过来的密码是RSA加密内容。
// byte[] data = RSAUtil.decryptByPrivateKey(password.getBytes(StandardCharsets.UTF_8), PRIK);
// String pass = new String(data);
// 2023-06-30 目前电商移动端登录:手机号 + 密码,使用的是明文密码,后续要改成一致。
String originPassword = null;
if(this.getCaptchaProvider().getCaptchaType() == CaptchaType.None){
// originPassword = password;
// 2023-08-06 uniapp端使用对称密码算法
originPassword = PlatformRSAUtils.getAesDecryptValue(password);
} else {
originPassword = PlatformRSAUtils.getRsaDecryptValue(password, PlatformRSAUtils.PRIK);
}
logger.debug("......... 解密的password = {}", originPassword);
return this.passwordEncoder.matches(originPassword, userPrincipal.getPassword());
} catch (Exception e) {
logger.error("", e);
throw new RuntimeException("解析登录密码错误:" + e.getMessage(), e);
}
}
// public void setPasswordEncoder(PasswordEncoder passwordEncoder) {
// this.passwordEncoder = passwordEncoder;
// }
// private PasswordEncoder passwordEncoder = null;
}