package com.iplatform.base.callback; import com.iplatform.base.PlatformLoginCallback; import com.iplatform.base.VariableConstants; import com.iplatform.base.service.UserServiceImpl; import com.iplatform.base.util.TokenUtils; import com.walker.web.CaptchaProvider; import com.walker.web.CaptchaResult; import com.walker.web.CaptchaType; import com.walker.web.TokenException; import com.walker.web.TokenGenerator; import com.walker.web.UserOnlineProvider; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public abstract class GeneralLoginCallback implements PlatformLoginCallback { protected final transient Logger logger = LoggerFactory.getLogger(getClass()); @Override public boolean isValidateCaptcha() { // web端登录一定存在验证码方式 CaptchaProvider captchaProvider = this.getCaptchaProvider(); if(captchaProvider == null){ logger.warn("登录回调'{}'没有配置'验证码提供者':CaptchaProvider", this.getClass().getName()); return false; } CaptchaType captchaType = captchaProvider.getCaptchaType(); logger.debug("captchaType = {}", captchaType); if(captchaType == CaptchaType.Slide){ // 滑动验证,不需要后台校验 logger.debug("slide 验证类型,后台不需要校验。"); return false; } if(captchaType == CaptchaType.SmsCode){ // 短信验证码,作为密码使用,不需要后台验证 return false; } if(captchaType == CaptchaType.None){ // 移动端目前账号、密码登录,没有任何验证码。2023-03-20 return false; } // 其他都需要验证 return true; } @Override public boolean supportMultiple() { return true; } /** * 该方法暂未使用,目前看不需要,所有退出操作都是清空token和登录缓存,后续看其他是否存在不一样情况。2023-01-26 * @param token 客户端提交的token * @throws TokenException */ @Deprecated @Override public void onLogout(String token) throws TokenException { String data = tokenGenerator.validateToken(token, VariableConstants.TOKEN_SECRET); String[] userIdAndKey = TokenUtils.getUserIdAndKey(data); this.userOnlineProvider.removeUserPrincipal(userIdAndKey[1]); logger.debug("用户 logout success: " + userIdAndKey[0]); } public void setUserOnlineProvider(UserOnlineProvider userOnlineProvider) { this.userOnlineProvider = userOnlineProvider; } public void setTokenGenerator(TokenGenerator tokenGenerator) { this.tokenGenerator = tokenGenerator; } public void setUserService(UserServiceImpl userService) { this.userService = userService; } @Override public CaptchaProvider getCaptchaProvider() { return captchaProvider; } @Override public void setCaptchaProvider(CaptchaProvider captchaProvider) { this.captchaProvider = captchaProvider; } private CaptchaProvider captchaProvider; protected UserServiceImpl userService = null; private UserOnlineProvider userOnlineProvider; private TokenGenerator tokenGenerator; }