package cn.com.taiji.core.model.comm.protocol.ias.portal; | package cn.com.taiji.core.model.comm.protocol.ias.portal; | ||||
import cn.com.taiji.core.entity.dict.basic.SourceType; | import cn.com.taiji.core.entity.dict.basic.SourceType; | ||||
import cn.com.taiji.core.model.comm.protocol.constraint.IntegerConstant; | |||||
import cn.com.taiji.core.model.comm.protocol.valid.ErrorMsgBuilder; | import cn.com.taiji.core.model.comm.protocol.valid.ErrorMsgBuilder; | ||||
import cn.com.taiji.core.model.comm.protocol.valid.RegexConstant; | import cn.com.taiji.core.model.comm.protocol.valid.RegexConstant; | ||||
import lombok.Getter; | import lombok.Getter; | ||||
@Pattern(regexp = RegexConstant.SMS_CODE, message = "请传入正确格式的手机验证码") | @Pattern(regexp = RegexConstant.SMS_CODE, message = "请传入正确格式的手机验证码") | ||||
@NotBlank(message = "手机验证码不能为空") | @NotBlank(message = "手机验证码不能为空") | ||||
private String code; | private String code; | ||||
@IntegerConstant(values = "1,2,99") | |||||
@NotNull(message = "业务类型不能为空") | |||||
private Integer businessType;//1-ETC用户登录 2-业务员登录 99-用户注册 | |||||
@NotNull(message = "来源不能为空") | @NotNull(message = "来源不能为空") | ||||
private SourceType loginSource; | private SourceType loginSource; | ||||
protected LoginByCodeRequest() { | |||||
public LoginByCodeRequest() { | |||||
super(PortalServiceCmd.LOGINBYCODE); | super(PortalServiceCmd.LOGINBYCODE); | ||||
} | } | ||||
package cn.com.taiji.core.model.comm.protocol.ias.portal; | package cn.com.taiji.core.model.comm.protocol.ias.portal; | ||||
import lombok.Getter; | |||||
import lombok.Setter; | |||||
import lombok.experimental.Accessors; | |||||
@Getter | |||||
@Setter | |||||
@Accessors(chain = true) | |||||
public class LoginByCodeResponse extends AbstractPortalResponse { | public class LoginByCodeResponse extends AbstractPortalResponse { | ||||
private String code; | |||||
public LoginByCodeResponse(String code) { | |||||
this.code = code; | |||||
} | |||||
public LoginByCodeResponse() { | |||||
} | |||||
} | } |
package cn.com.taiji.core.model.comm.protocol.ias.portal; | |||||
public class LoginCodeResponse extends AbstractPortalResponse { | |||||
} |
import lombok.Getter; | import lombok.Getter; | ||||
import lombok.Setter; | import lombok.Setter; | ||||
import lombok.experimental.Accessors; | |||||
@Getter | @Getter | ||||
@Setter | @Setter | ||||
@Accessors(chain = true) | |||||
public class LoginConfirmResponse extends AbstractPortalResponse{ | public class LoginConfirmResponse extends AbstractPortalResponse{ | ||||
private String accessToken; | private String accessToken; | ||||
private String openId; | private String openId; |
/** | /** | ||||
* 如下接口同时给渠道提供 | * 如下接口同时给渠道提供 | ||||
*/ | */ | ||||
LOGINCODE("发送登录短信验证码", LoginCodeRequest.class),// | |||||
SENDCODE("发送登录短信验证码", SendCodeRequest.class),// | |||||
LOGINBYCODE("手机验证码登录", LoginByCodeRequest.class),// | LOGINBYCODE("手机验证码登录", LoginByCodeRequest.class),// | ||||
LOGINCONFIRM("登录确认", LoginConfirmRequest.class), | LOGINCONFIRM("登录确认", LoginConfirmRequest.class), | ||||
LOGOUT("退出登录", LogoutRequest.class),// | LOGOUT("退出登录", LogoutRequest.class),// |
package cn.com.taiji.core.model.comm.protocol.ias.portal; | package cn.com.taiji.core.model.comm.protocol.ias.portal; | ||||
import cn.com.taiji.core.entity.dict.basic.SourceType; | |||||
import cn.com.taiji.core.model.comm.protocol.constraint.IntegerConstant; | import cn.com.taiji.core.model.comm.protocol.constraint.IntegerConstant; | ||||
import cn.com.taiji.core.model.comm.protocol.valid.ErrorMsgBuilder; | import cn.com.taiji.core.model.comm.protocol.valid.ErrorMsgBuilder; | ||||
import cn.com.taiji.core.model.comm.protocol.valid.RegexConstant; | import cn.com.taiji.core.model.comm.protocol.valid.RegexConstant; | ||||
@Getter | @Getter | ||||
@Setter | @Setter | ||||
@Accessors(chain = true) | @Accessors(chain = true) | ||||
public class LoginCodeRequest extends AbstractPortalRequest<LoginCodeResponse> { | |||||
public class SendCodeRequest extends AbstractPortalRequest<SendCodeResponse> { | |||||
@Pattern(regexp = RegexConstant.REGEX_MOBILE, message = "请传入正确格式的11位手机号码") | @Pattern(regexp = RegexConstant.REGEX_MOBILE, message = "请传入正确格式的11位手机号码") | ||||
@NotBlank(message = "手机号不能为空") | @NotBlank(message = "手机号不能为空") | ||||
private String mobile; | private String mobile; | ||||
@IntegerConstant(values = "1,2,99") | |||||
@IntegerConstant(values = "0,1,2") | |||||
@NotNull(message = "业务类型不能为空") | @NotNull(message = "业务类型不能为空") | ||||
private Integer businessType;//1-ETC用户登录 2-业务员登录 99-用户注册 | |||||
private Integer businessType;//0-登录 1-注册 2-忘记密码 | |||||
@NotNull(message = "来源不能为空") | |||||
private SourceType loginSource; | |||||
protected LoginCodeRequest() { | |||||
super(PortalServiceCmd.LOGINCODE); | |||||
public SendCodeRequest() { | |||||
super(PortalServiceCmd.SENDCODE); | |||||
} | } | ||||
@Override | @Override |
package cn.com.taiji.core.model.comm.protocol.ias.portal; | |||||
public class SendCodeResponse extends AbstractPortalResponse { | |||||
} |
import cn.com.taiji.common.manager.ManagerException; | import cn.com.taiji.common.manager.ManagerException; | ||||
import cn.com.taiji.common.web.ApiResponse; | import cn.com.taiji.common.web.ApiResponse; | ||||
import cn.com.taiji.core.model.comm.protocol.ias.portal.AccessTokenCheckResponse; | |||||
import cn.com.taiji.core.model.comm.protocol.ias.portal.LoginConfirmResponse; | |||||
import cn.com.taiji.core.model.comm.protocol.ias.portal.LoginResponse; | |||||
import cn.com.taiji.core.model.comm.protocol.ias.portal.LogoutResponse; | |||||
import cn.com.taiji.core.model.comm.protocol.ias.portal.*; | |||||
import cn.com.taiji.iaw.api.MyValidController; | import cn.com.taiji.iaw.api.MyValidController; | ||||
import cn.com.taiji.iaw.manager.portal.PortalManager; | import cn.com.taiji.iaw.manager.portal.PortalManager; | ||||
import cn.com.taiji.iaw.model.portal.AccessTokenCheckDto; | |||||
import cn.com.taiji.iaw.model.portal.LoginConfirmDto; | |||||
import cn.com.taiji.iaw.model.portal.LoginDto; | |||||
import cn.com.taiji.iaw.model.portal.LogoutDto; | |||||
import cn.com.taiji.iaw.model.portal.*; | |||||
import io.swagger.annotations.Api; | import io.swagger.annotations.Api; | ||||
import io.swagger.annotations.ApiOperation; | import io.swagger.annotations.ApiOperation; | ||||
import org.springframework.beans.factory.annotation.Autowired; | import org.springframework.beans.factory.annotation.Autowired; | ||||
import org.springframework.web.bind.annotation.RequestMapping; | import org.springframework.web.bind.annotation.RequestMapping; | ||||
import org.springframework.web.bind.annotation.RestController; | import org.springframework.web.bind.annotation.RestController; | ||||
import javax.servlet.http.HttpServletRequest; | |||||
import javax.validation.Valid; | import javax.validation.Valid; | ||||
@Api(tags = {"IAS-门户接口:PORTAL"}) | @Api(tags = {"IAS-门户接口:PORTAL"}) | ||||
// return ApiResponse.of(res).setMessage("操作成功"); | // return ApiResponse.of(res).setMessage("操作成功"); | ||||
// } | // } | ||||
@ApiOperation(value = "获取短信验证码") | |||||
@PostMapping(value = "/sendCode") | |||||
public ApiResponse<SendCodeResponse> sendCode(@Valid @RequestBody SendCodeDto dto) throws ManagerException { | |||||
SendCodeResponse res = portalManager.sendCode(dto); | |||||
return ApiResponse.of(res).setMessage("操作成功"); | |||||
} | |||||
@ApiOperation(value = "密码登录") | @ApiOperation(value = "密码登录") | ||||
@PostMapping(value = "/login") | @PostMapping(value = "/login") | ||||
public ApiResponse<LoginResponse> login(@Valid @RequestBody LoginDto dto) throws ManagerException { | public ApiResponse<LoginResponse> login(@Valid @RequestBody LoginDto dto) throws ManagerException { | ||||
return ApiResponse.of(res).setMessage("操作成功"); | return ApiResponse.of(res).setMessage("操作成功"); | ||||
} | } | ||||
// @ApiOperation(value = "验证码登录") | |||||
// @PostMapping(value = "/loginByCode") | |||||
// public ApiResponse<LoginByCodeResponseDto> loginByCode(@Valid @RequestBody LoginByCodeRequestDto req, | |||||
// HttpServletRequest request) throws ManagerException { | |||||
// LoginByCodeResponseDto res = portalManager.loginByCode(req); | |||||
// logger.info("request url:{},port:{}", request.getRequestURL(), request.getRemotePort()); | |||||
// return ApiResponse.of(res).setMessage("操作成功"); | |||||
// } | |||||
// | |||||
@ApiOperation(value = "验证码登录") | |||||
@PostMapping(value = "/loginByCode") | |||||
public ApiResponse<LoginByCodeResponse> loginByCode(@Valid @RequestBody LoginByCodeDto dto, | |||||
HttpServletRequest request) throws ManagerException { | |||||
LoginByCodeResponse res = portalManager.loginByCode(dto); | |||||
logger.info("request url:{},port:{}", request.getRequestURL(), request.getRemotePort()); | |||||
return ApiResponse.of(res).setMessage("操作成功"); | |||||
} | |||||
@ApiOperation(value = "原1006-登录确认") | @ApiOperation(value = "原1006-登录确认") | ||||
@PostMapping(value = "/loginConfirm") | @PostMapping(value = "/loginConfirm") | ||||
public ApiResponse<LoginConfirmResponse> loginConfirm(@Valid @RequestBody LoginConfirmDto dto) | public ApiResponse<LoginConfirmResponse> loginConfirm(@Valid @RequestBody LoginConfirmDto dto) |
package cn.com.taiji.iaw.manager.portal; | package cn.com.taiji.iaw.manager.portal; | ||||
import cn.com.taiji.common.manager.ManagerException; | import cn.com.taiji.common.manager.ManagerException; | ||||
import cn.com.taiji.core.model.comm.protocol.ias.portal.AccessTokenCheckResponse; | |||||
import cn.com.taiji.core.model.comm.protocol.ias.portal.LoginConfirmResponse; | |||||
import cn.com.taiji.core.model.comm.protocol.ias.portal.LoginResponse; | |||||
import cn.com.taiji.core.model.comm.protocol.ias.portal.LogoutResponse; | |||||
import cn.com.taiji.iaw.model.portal.AccessTokenCheckDto; | |||||
import cn.com.taiji.iaw.model.portal.LoginConfirmDto; | |||||
import cn.com.taiji.iaw.model.portal.LoginDto; | |||||
import cn.com.taiji.iaw.model.portal.LogoutDto; | |||||
import cn.com.taiji.core.model.comm.protocol.ias.portal.*; | |||||
import cn.com.taiji.iaw.model.portal.*; | |||||
import javax.validation.Valid; | import javax.validation.Valid; | ||||
// | // | ||||
// RegisterFullResponse registerFull(@Valid RegisterFullRequest req) throws ManagerException; | // RegisterFullResponse registerFull(@Valid RegisterFullRequest req) throws ManagerException; | ||||
SendCodeResponse sendCode(@Valid SendCodeDto dto) throws ManagerException; | |||||
LoginResponse login(@Valid LoginDto dto) throws ManagerException; | LoginResponse login(@Valid LoginDto dto) throws ManagerException; | ||||
// LoginByCodeResponseDto loginByCode(@Valid LoginByCodeRequestDto req) throws ManagerException; | |||||
LoginByCodeResponse loginByCode(@Valid LoginByCodeDto dto) throws ManagerException; | |||||
LoginConfirmResponse loginConfirm(LoginConfirmDto dto) throws ManagerException; | LoginConfirmResponse loginConfirm(LoginConfirmDto dto) throws ManagerException; | ||||
import cn.com.taiji.common.manager.ManagerException; | import cn.com.taiji.common.manager.ManagerException; | ||||
import cn.com.taiji.core.manager.tools.encryption.SM4Util; | import cn.com.taiji.core.manager.tools.encryption.SM4Util; | ||||
import cn.com.taiji.core.model.comm.protocol.ias.portal.AccessTokenCheckResponse; | |||||
import cn.com.taiji.core.model.comm.protocol.ias.portal.LoginConfirmResponse; | |||||
import cn.com.taiji.core.model.comm.protocol.ias.portal.LoginResponse; | |||||
import cn.com.taiji.core.model.comm.protocol.ias.portal.LogoutResponse; | |||||
import cn.com.taiji.core.model.comm.protocol.ias.portal.*; | |||||
import cn.com.taiji.iaw.manager.AbstractCommManager; | import cn.com.taiji.iaw.manager.AbstractCommManager; | ||||
import cn.com.taiji.iaw.model.portal.AccessTokenCheckDto; | |||||
import cn.com.taiji.iaw.model.portal.LoginConfirmDto; | |||||
import cn.com.taiji.iaw.model.portal.LoginDto; | |||||
import cn.com.taiji.iaw.model.portal.LogoutDto; | |||||
import cn.com.taiji.iaw.model.portal.*; | |||||
import org.springframework.stereotype.Service; | import org.springframework.stereotype.Service; | ||||
/** | |||||
* @Author weicailin | |||||
* @Date 2023/3/14 16:34 | |||||
* @Email 13079168756@163.com | |||||
*/ | |||||
@Service | @Service | ||||
public class PortalManagerImpl extends AbstractCommManager implements PortalManager { | public class PortalManagerImpl extends AbstractCommManager implements PortalManager { | ||||
// @Override | |||||
// @Override | |||||
// public RegisterResponse register(RegisterRequest req) throws ManagerException { | // public RegisterResponse register(RegisterRequest req) throws ManagerException { | ||||
// return jsonPostRepeat(req); | // return jsonPostRepeat(req); | ||||
// } | // } | ||||
// public RegisterFullResponse registerFull(RegisterFullRequest req) throws ManagerException { | // public RegisterFullResponse registerFull(RegisterFullRequest req) throws ManagerException { | ||||
// return jsonPostRepeat(req); | // return jsonPostRepeat(req); | ||||
// } | // } | ||||
@Override | |||||
public SendCodeResponse sendCode(SendCodeDto dto) throws ManagerException { | |||||
return jsonPostRepeat(dto.toRequest()); | |||||
} | |||||
@Override | @Override | ||||
public LoginResponse login(LoginDto dto) throws ManagerException { | public LoginResponse login(LoginDto dto) throws ManagerException { | ||||
return jsonPostRepeat(dto.toRequest()); | return jsonPostRepeat(dto.toRequest()); | ||||
} | } | ||||
// @Override | |||||
// public LoginByCodeResponseDto loginByCode(LoginByCodeRequestDto reqDto) throws ManagerException { | |||||
// reqDto.validate(); | |||||
// LoginByCodeRequest loginByCodeRequest = new LoginByCodeRequest(); | |||||
// BeanTools.copyProperties(reqDto,loginByCodeRequest); | |||||
// LoginByCodeResponse loginByCodeResponse = jsonPostRepeat(loginByCodeRequest); | |||||
// LoginByCodeResponseDto responseDto = new LoginByCodeResponseDto(); | |||||
// BeanTools.copyProperties(loginByCodeResponse,responseDto); | |||||
// return responseDto; | |||||
// } | |||||
// | |||||
@Override | |||||
public LoginByCodeResponse loginByCode(LoginByCodeDto dto) throws ManagerException { | |||||
return jsonPostRepeat(dto.toRequest()); | |||||
} | |||||
@Override | @Override | ||||
public LoginConfirmResponse loginConfirm(LoginConfirmDto dto) throws ManagerException { | public LoginConfirmResponse loginConfirm(LoginConfirmDto dto) throws ManagerException { | ||||
return jsonPostRepeat(dto.toRequest()); | return jsonPostRepeat(dto.toRequest()); |
package cn.com.taiji.iaw.model.portal; | |||||
import cn.com.taiji.common.manager.ManagerException; | |||||
import cn.com.taiji.common.model.BaseModel; | |||||
import cn.com.taiji.core.entity.dict.basic.SourceType; | |||||
import cn.com.taiji.core.model.comm.protocol.ias.portal.LoginByCodeRequest; | |||||
import cn.com.taiji.core.model.comm.protocol.valid.RegexConstant; | |||||
import lombok.Getter; | |||||
import lombok.Setter; | |||||
import lombok.experimental.Accessors; | |||||
import javax.validation.constraints.NotBlank; | |||||
import javax.validation.constraints.Pattern; | |||||
@Getter | |||||
@Setter | |||||
@Accessors(chain = true) | |||||
public class LoginByCodeDto extends BaseModel { | |||||
@Pattern(regexp = RegexConstant.REGEX_MOBILE, message = "手机号格式不正确") | |||||
@NotBlank(message = "手机号不能为空") | |||||
private String mobile; | |||||
@Pattern(regexp = RegexConstant.SMS_CODE, message = "请传入正确格式的手机验证码") | |||||
@NotBlank(message = "手机验证码不能为空") | |||||
private String code; | |||||
@NotBlank(message = "来源不能为空") | |||||
private String loginSource; | |||||
public LoginByCodeRequest toRequest() throws ManagerException { | |||||
LoginByCodeRequest request = new LoginByCodeRequest(); | |||||
request.setMobile(mobile); | |||||
request.setCode(code); | |||||
if (SourceType.findByCode(loginSource) == null) throw new ManagerException("未知的登录来源方"); | |||||
request.setLoginSource(SourceType.findByCode(loginSource)); | |||||
return request; | |||||
} | |||||
} |
package cn.com.taiji.iaw.model.portal; | |||||
import cn.com.taiji.common.manager.ManagerException; | |||||
import cn.com.taiji.common.model.BaseModel; | |||||
import cn.com.taiji.core.entity.dict.basic.SourceType; | |||||
import cn.com.taiji.core.model.comm.protocol.constraint.IntegerConstant; | |||||
import cn.com.taiji.core.model.comm.protocol.ias.portal.SendCodeRequest; | |||||
import cn.com.taiji.core.model.comm.protocol.valid.RegexConstant; | |||||
import lombok.Getter; | |||||
import lombok.Setter; | |||||
import lombok.experimental.Accessors; | |||||
import javax.validation.constraints.NotBlank; | |||||
import javax.validation.constraints.NotNull; | |||||
import javax.validation.constraints.Pattern; | |||||
@Getter | |||||
@Setter | |||||
@Accessors(chain = true) | |||||
public class SendCodeDto extends BaseModel { | |||||
@Pattern(regexp = RegexConstant.REGEX_MOBILE, message = "请传入正确格式的11位手机号码") | |||||
@NotBlank(message = "手机号不能为空") | |||||
private String mobile; | |||||
@IntegerConstant(values = "0,1,2") | |||||
@NotNull(message = "业务类型不能为空") | |||||
private Integer businessType;//0-登录 1-注册 2-忘记密码 | |||||
@NotBlank(message = "来源不能为空") | |||||
private String loginSource; | |||||
public SendCodeRequest toRequest() throws ManagerException { | |||||
SendCodeRequest request = new SendCodeRequest(); | |||||
request.setMobile(mobile); | |||||
request.setBusinessType(businessType); | |||||
if (SourceType.findByCode(loginSource) == null) throw new ManagerException("未知的登录来源方"); | |||||
request.setLoginSource(SourceType.findByCode(loginSource)); | |||||
return request; | |||||
} | |||||
} |
import cn.com.taiji.core.model.comm.protocol.SignJsonRequest; | import cn.com.taiji.core.model.comm.protocol.SignJsonRequest; | ||||
import cn.com.taiji.core.model.comm.protocol.ias.IasServiceType; | import cn.com.taiji.core.model.comm.protocol.ias.IasServiceType; | ||||
import cn.com.taiji.core.model.comm.protocol.ias.portal.*; | import cn.com.taiji.core.model.comm.protocol.ias.portal.*; | ||||
import cn.com.taiji.ias.manager.portal.AccessTokenCheckManager; | |||||
import cn.com.taiji.ias.manager.portal.LoginConfirmManager; | |||||
import cn.com.taiji.ias.manager.portal.LoginManager; | |||||
import cn.com.taiji.ias.manager.portal.LogoutManager; | |||||
import cn.com.taiji.ias.manager.portal.*; | |||||
import com.zgglyun.common.model.AbstractHttpRequestInfo; | import com.zgglyun.common.model.AbstractHttpRequestInfo; | ||||
import org.springframework.beans.factory.annotation.Autowired; | import org.springframework.beans.factory.annotation.Autowired; | ||||
import org.springframework.stereotype.Service; | import org.springframework.stereotype.Service; | ||||
private LoginConfirmManager loginConfirmManager; | private LoginConfirmManager loginConfirmManager; | ||||
@Autowired | @Autowired | ||||
private AccessTokenCheckManager accessTokenCheckManager; | private AccessTokenCheckManager accessTokenCheckManager; | ||||
@Autowired | |||||
private SendCodeManager sendCodeManager; | |||||
public PortalServiceHandler() { | public PortalServiceHandler() { | ||||
super(IasServiceType.PORTAL); | super(IasServiceType.PORTAL); | ||||
return loginConfirmManager.serviceHandle((LoginConfirmRequest) request); | return loginConfirmManager.serviceHandle((LoginConfirmRequest) request); | ||||
case ACCESSTOKENCHECK: | case ACCESSTOKENCHECK: | ||||
return accessTokenCheckManager.serviceHandle((AccessTokenCheckRequest) request); | return accessTokenCheckManager.serviceHandle((AccessTokenCheckRequest) request); | ||||
case SENDCODE: | |||||
return sendCodeManager.serviceHandle((SendCodeRequest) request); | |||||
default: | default: | ||||
throw FileProtocolSystemError.NOT_SUPPORT.toHandleException(jsonReq.getIfCode()); | throw FileProtocolSystemError.NOT_SUPPORT.toHandleException(jsonReq.getIfCode()); | ||||
} | } |
@Autowired | @Autowired | ||||
private StaffRepo staffRepo; | private StaffRepo staffRepo; | ||||
@Autowired | @Autowired | ||||
private RedisWrapManager redisManager; | |||||
protected RedisWrapManager redisManager; | |||||
protected Staff findAndValidStaff(String openId, SourceType loginSource) throws ServiceHandleException { | protected Staff findAndValidStaff(String openId, SourceType loginSource) throws ServiceHandleException { | ||||
if (loginSource != SourceType.SERVICE_HALL && loginSource != SourceType.WEB) return null; | if (loginSource != SourceType.SERVICE_HALL && loginSource != SourceType.WEB) return null; |
package cn.com.taiji.ias.manager.portal; | |||||
import cn.com.taiji.common.manager.net.http.ServiceHandleException; | |||||
import cn.com.taiji.core.entity.user.AccountInfo; | |||||
import cn.com.taiji.core.model.comm.protocol.ias.portal.LoginByCodeRequest; | |||||
import cn.com.taiji.core.model.comm.protocol.ias.portal.LoginByCodeResponse; | |||||
import cn.com.taiji.core.model.comm.protocol.valid.GlyServiceError; | |||||
import cn.com.taiji.core.repo.jpa.user.AccountInfoRepo; | |||||
import cn.com.taiji.ias.model.LoginFinals; | |||||
import cn.com.taiji.ias.model.RedisKeyGenerator; | |||||
import org.springframework.beans.factory.annotation.Autowired; | |||||
import org.springframework.stereotype.Service; | |||||
import java.util.UUID; | |||||
import java.util.concurrent.TimeUnit; | |||||
@Service | |||||
public class LoginByCodeManager extends AbstractLoginManager { | |||||
@Autowired | |||||
private AccountInfoRepo accountInfoRepo; | |||||
public LoginByCodeResponse serviceHandle(LoginByCodeRequest request) throws ServiceHandleException { | |||||
String smsCode = redisManager.get(RedisKeyGenerator.getSmsCodeKey(request.getMobile(), request.getLoginSource().name(), 1)); | |||||
if (!hasText(smsCode)) | |||||
throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("短信验证码已过期,请重新发送"); | |||||
if (!smsCode.equals(request.getCode())) | |||||
throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("短信验证码错误!"); | |||||
AccountInfo accountInfo = accountInfoRepo.findByAccount(request.getMobile()); | |||||
if (accountInfo == null) throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("手机号输入错误"); | |||||
findAndValidStaff(accountInfo.getOpenId(), request.getLoginSource()); | |||||
String code = UUID.randomUUID().toString().replaceAll("-", "");// code用于换Token,还完Token就没用了 | |||||
redisManager.set(RedisKeyGenerator.getLoginOpenIdByCodeKey(code, request.getLoginSource().name()), accountInfo.getOpenId(), LoginFinals.LOGIN_CODE_EXPIRED, TimeUnit.MINUTES); | |||||
LoginByCodeResponse response = new LoginByCodeResponse(); | |||||
response.setInfo("登录成功"); | |||||
return response; | |||||
} | |||||
} |
@Service | @Service | ||||
public class LogoutManager extends AbstractLoginManager { | public class LogoutManager extends AbstractLoginManager { | ||||
public LogoutResponse serviceHandle(LogoutRequest request) throws ServiceHandleException { | |||||
checkTokenCache(request.getAccessToken(), request.getOpenId(), request.getLoginSource()); | |||||
public LogoutResponse serviceHandle(LogoutRequest request) { | |||||
try { | |||||
checkTokenCache(request.getAccessToken(), request.getOpenId(), request.getLoginSource()); | |||||
} catch (ServiceHandleException e) { | |||||
LogoutResponse response = new LogoutResponse(); | |||||
response.setInfo("退出成功"); | |||||
return response; | |||||
} | |||||
deleteTokenCache(request.getAccessToken(), request.getOpenId()); | deleteTokenCache(request.getAccessToken(), request.getOpenId()); | ||||
LogoutResponse response = new LogoutResponse(); | LogoutResponse response = new LogoutResponse(); | ||||
response.setInfo("退出成功"); | response.setInfo("退出成功"); |
package cn.com.taiji.ias.manager.portal; | |||||
import cn.com.taiji.common.manager.net.http.ServiceHandleException; | |||||
import cn.com.taiji.core.model.comm.protocol.ias.portal.SendCodeRequest; | |||||
import cn.com.taiji.core.model.comm.protocol.ias.portal.SendCodeResponse; | |||||
import cn.com.taiji.core.model.comm.protocol.valid.GlyServiceError; | |||||
import cn.com.taiji.ias.model.LoginFinals; | |||||
import cn.com.taiji.ias.model.RedisKeyGenerator; | |||||
import org.springframework.stereotype.Service; | |||||
import java.util.concurrent.TimeUnit; | |||||
@Service | |||||
public class SendCodeManager extends AbstractLoginManager { | |||||
public SendCodeResponse serviceHandle(SendCodeRequest request) throws ServiceHandleException { | |||||
String code = redisManager.get(RedisKeyGenerator.getSmsCodeKey(request.getMobile(), request.getLoginSource().name(), request.getBusinessType())); | |||||
if (hasText(code)) | |||||
throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("短信验证码在有效期内,请勿重复发送"); | |||||
code = (Math.random() * 1000000 + "").substring(0, 6); | |||||
logger.info("短信验证码:{}", code); | |||||
//TODO 短信接口 | |||||
redisManager.set(RedisKeyGenerator.getSmsCodeKey(request.getMobile(), request.getLoginSource().name(), request.getBusinessType()), code, LoginFinals.LOGIN_SMS_CODE_EXPIRED, TimeUnit.MINUTES); | |||||
SendCodeResponse response = new SendCodeResponse(); | |||||
response.setInfo("短信验证码发送成功"); | |||||
return response; | |||||
} | |||||
} |
public final static int LOGIN_FAILED_EXPIRE = 5;// 分钟 | public final static int LOGIN_FAILED_EXPIRE = 5;// 分钟 | ||||
public final static int LOGIN_CODE_EXPIRED = 5 * 60;// 分钟 | public final static int LOGIN_CODE_EXPIRED = 5 * 60;// 分钟 | ||||
public final static int LOGIN_TOKEN_EXPIRED = 24 * 60;// 分钟 | public final static int LOGIN_TOKEN_EXPIRED = 24 * 60;// 分钟 | ||||
public final static int LOGIN_SMS_CODE_EXPIRED = 1;// 分钟 | |||||
} | } |
return LOGIN_KEY_PREFIX + COLON + "gettoken" + COLON + openId; | return LOGIN_KEY_PREFIX + COLON + "gettoken" + COLON + openId; | ||||
} | } | ||||
public static String getSmsCodeKey(String mobile, String loginSource, Integer businessType) { | |||||
return LOGIN_KEY_PREFIX + COLON + "getsmscode" + COLON + mobile + COLON + loginSource + COLON + businessType; | |||||
} | |||||
} | } |