兴安访客小程序对接部分迁移
This commit is contained in:
@@ -0,0 +1,29 @@
|
||||
package com.dcsoft.auth.controller;
|
||||
|
||||
|
||||
import com.dcsoft.auth.form.RegisterBody;
|
||||
import com.dcsoft.auth.service.SysLoginService;
|
||||
import com.dcsoft.common.core.domain.R;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* 短信验证码控制
|
||||
*/
|
||||
@RestController
|
||||
public class SmsLoginController {
|
||||
|
||||
@Autowired
|
||||
private SysLoginService sysLoginService;
|
||||
|
||||
@PostMapping("app/sendSms")
|
||||
public R<?> sendSms(@RequestBody RegisterBody register) {
|
||||
R<String> result = sysLoginService.sendSms(register);
|
||||
if (null != result && 200 == result.getCode()) {
|
||||
return R.ok();
|
||||
}
|
||||
return R.fail("获取短信验证码失败");
|
||||
}
|
||||
}
|
||||
@@ -1,27 +1,28 @@
|
||||
package com.dcsoft.auth.controller;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
import com.dcsoft.auth.bean.ValidateResult;
|
||||
import com.dcsoft.auth.form.IDaasBody;
|
||||
import com.dcsoft.auth.utils.LicenseManager;
|
||||
import com.dcsoft.auth.utils.LicenseThread;
|
||||
import com.idsmanager.dingdang.jwt.DingdangUserRetriever;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.dcsoft.auth.form.LoginBody;
|
||||
import com.dcsoft.auth.form.RegisterBody;
|
||||
import com.dcsoft.auth.service.SysLoginService;
|
||||
import com.dcsoft.auth.utils.LicenseManager;
|
||||
import com.dcsoft.auth.utils.LicenseThread;
|
||||
import com.dcsoft.auth.utils.RsaUiUtils;
|
||||
import com.dcsoft.common.core.domain.R;
|
||||
import com.dcsoft.common.core.utils.JwtUtils;
|
||||
import com.dcsoft.common.core.utils.StringUtils;
|
||||
import com.dcsoft.common.core.utils.bean.BeanUtils;
|
||||
import com.dcsoft.common.security.auth.AuthUtil;
|
||||
import com.dcsoft.common.security.service.TokenService;
|
||||
import com.dcsoft.common.security.utils.SecurityUtils;
|
||||
import com.dcsoft.system.api.model.LoginUser;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@@ -33,6 +34,7 @@ import java.util.Map;
|
||||
@RestController
|
||||
public class TokenController
|
||||
{
|
||||
private static final Logger log = LoggerFactory.getLogger(TokenController.class);
|
||||
@Autowired
|
||||
private TokenService tokenService;
|
||||
|
||||
@@ -43,31 +45,46 @@ public class TokenController
|
||||
private Boolean enabled;
|
||||
|
||||
@PostMapping("login")
|
||||
public R<?> login(@RequestBody LoginBody form)
|
||||
{
|
||||
public R<?> login(@RequestBody LoginBody form) throws Exception {
|
||||
/* if(enabled){
|
||||
ValidateResult validateResult = LicenseThread.validateResult.get("Authorize");
|
||||
if (!validateResult.getIsValidate()){
|
||||
return R.fail(validateResult.getMessage());
|
||||
}
|
||||
}*/
|
||||
|
||||
LoginUser userInfo=new LoginUser();
|
||||
log.info("login form:{}", form);
|
||||
LoginUser userInfo = new LoginUser();
|
||||
// 用户登录
|
||||
if("weixin".equals(form.getFlag())){
|
||||
R<LoginUser> userInfos=sysLoginService.getWxUserInfo(form);
|
||||
if ("weixin".equals(form.getFlag())) {
|
||||
//微信登录openid必传,phone必传
|
||||
String s = RsaUiUtils.decryptByPrivateKey(form.getOpenid());
|
||||
form.setOpenid(s);
|
||||
R<LoginUser> userInfos = sysLoginService.getWxUserInfo(form);
|
||||
userInfo = userInfos.getData();
|
||||
if(userInfo==null){
|
||||
return R.fail(userInfos.getCode(), userInfos.getMsg());
|
||||
if (ObjectUtil.isEmpty(userInfo) || ObjectUtil.isEmpty(userInfo.getSysUser())) {
|
||||
RegisterBody registerBody = new RegisterBody();
|
||||
BeanUtils.copyProperties(form, registerBody);
|
||||
userInfo = sysLoginService.appRegister(registerBody);
|
||||
}
|
||||
}else if("app".equals(form.getFlag())){
|
||||
userInfo = sysLoginService.login(form.getUsername(), form.getPassword());
|
||||
} else if ("app".equals(form.getFlag())) {
|
||||
String str = RsaUiUtils.decryptByPrivateKey(form.getEncrypt());
|
||||
JSONObject jsonObject = JSONObject.parseObject(str);
|
||||
userInfo = sysLoginService.login(jsonObject.getString("username"), jsonObject.getString("password"));
|
||||
//保存用户openid
|
||||
if(StringUtils.isNotEmpty(form.getOpenid())){
|
||||
sysLoginService.updateOpenId(userInfo,form);
|
||||
if (StringUtils.isNotEmpty(form.getOpenid())) {
|
||||
String s = RsaUiUtils.decryptByPrivateKey(form.getOpenid());
|
||||
form.setOpenid(s);
|
||||
sysLoginService.updateOpenId(userInfo, form);
|
||||
}
|
||||
}else{
|
||||
userInfo = sysLoginService.login(form.getUsername(), form.getPassword());
|
||||
} else if ("sms".equals(form.getFlag())) {
|
||||
//短信登录openid,phone,smsCode必传(openid不能使用,存在他人手机号登录别人账号场景)
|
||||
String s = RsaUiUtils.decryptByPrivateKey(form.getSmsCode());
|
||||
form.setSmsCode(s);
|
||||
userInfo = sysLoginService.Smslogin(form);
|
||||
} else {
|
||||
String s = RsaUiUtils.decryptByPrivateKey(form.getEncrypt());
|
||||
JSONObject jsonObject = JSONObject.parseObject(s);
|
||||
userInfo = sysLoginService.login(jsonObject.getString("username"), jsonObject.getString("password"));
|
||||
}
|
||||
// 获取登录token
|
||||
return R.ok(tokenService.createToken(userInfo));
|
||||
@@ -83,7 +100,7 @@ public class TokenController
|
||||
}
|
||||
}*/
|
||||
|
||||
LoginUser userInfo=new LoginUser();
|
||||
LoginUser userInfo = new LoginUser();
|
||||
// 用户登录
|
||||
if("weixin".equals(form.getFlag())){
|
||||
R<LoginUser> userInfos=sysLoginService.getWxUserInfo(form);
|
||||
@@ -91,13 +108,13 @@ public class TokenController
|
||||
if(userInfo==null){
|
||||
R.fail();
|
||||
}
|
||||
}else if("app".equals(form.getFlag())){
|
||||
} else if ("app".equals(form.getFlag())) {
|
||||
userInfo = sysLoginService.login(form.getUsername(), form.getPassword());
|
||||
//保存用户openid
|
||||
if(!"".equals(form.getOpenid())){
|
||||
sysLoginService.updateOpenId(userInfo,form);
|
||||
if (!"".equals(form.getOpenid())) {
|
||||
sysLoginService.updateOpenId(userInfo, form);
|
||||
}
|
||||
}else{
|
||||
} else {
|
||||
userInfo = sysLoginService.login(form.getUsername(), form.getPassword());
|
||||
}
|
||||
// 获取登录token
|
||||
@@ -191,7 +208,7 @@ public class TokenController
|
||||
return retMap;
|
||||
}
|
||||
|
||||
//授权码更新接口
|
||||
//授权码更新接口
|
||||
@PostMapping("/updateSign")
|
||||
public Map<String,Object> updateSign(String sign){
|
||||
Map<String,Object> retMap=new HashMap<>(2);
|
||||
@@ -202,4 +219,21 @@ public class TokenController
|
||||
return retMap;
|
||||
}
|
||||
|
||||
@PostMapping("/redisSet")
|
||||
public R<?> redisSet(@RequestBody JSONObject js) {
|
||||
tokenService.redisSet(js.getString("key"), js.getString("value"));
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
@PostMapping("/redisGet")
|
||||
public R<?> redisGet(@RequestBody JSONObject js) {
|
||||
return R.ok(tokenService.redisGet(js.getString("key")));
|
||||
}
|
||||
|
||||
@PostMapping("/redisDel")
|
||||
public R<?> redisDel(@RequestBody JSONObject js) {
|
||||
tokenService.redisDel(js.getString("key"));
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -16,15 +16,47 @@ public class LoginBody
|
||||
* 用户密码
|
||||
*/
|
||||
private String password;
|
||||
|
||||
/**
|
||||
* 登录方式
|
||||
* **/
|
||||
*/
|
||||
private String flag;
|
||||
|
||||
/**
|
||||
* 微信openid
|
||||
* **/
|
||||
*/
|
||||
private String openid;
|
||||
|
||||
/**
|
||||
* 短信验证码
|
||||
*/
|
||||
private String smsCode;
|
||||
|
||||
/**
|
||||
* 手机号
|
||||
*/
|
||||
private String phone;
|
||||
|
||||
/**
|
||||
* 加密后的数据
|
||||
*/
|
||||
private String encrypt;
|
||||
|
||||
public String getEncrypt() {
|
||||
return encrypt;
|
||||
}
|
||||
|
||||
public void setEncrypt(String encrypt) {
|
||||
this.encrypt = encrypt;
|
||||
}
|
||||
|
||||
public String getSmsCode() {
|
||||
return smsCode;
|
||||
}
|
||||
|
||||
public void setSmsCode(String smsCode) {
|
||||
this.smsCode = smsCode;
|
||||
}
|
||||
|
||||
public String getUsername()
|
||||
{
|
||||
@@ -62,6 +94,14 @@ public class LoginBody
|
||||
this.openid = openid;
|
||||
}
|
||||
|
||||
public String getPhone() {
|
||||
return phone;
|
||||
}
|
||||
|
||||
public void setPhone(String phone) {
|
||||
this.phone = phone;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "LoginBody{" +
|
||||
@@ -69,6 +109,8 @@ public class LoginBody
|
||||
", password='" + password + '\'' +
|
||||
", flag='" + flag + '\'' +
|
||||
", openid='" + openid + '\'' +
|
||||
", smsCode='" + smsCode + '\'' +
|
||||
", phone='" + phone + '\'' +
|
||||
'}';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
package com.dcsoft.auth.service;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.dcsoft.auth.form.LoginBody;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
import com.dcsoft.auth.form.RegisterBody;
|
||||
import com.dcsoft.common.core.constant.CacheConstants;
|
||||
import com.dcsoft.common.core.constant.Constants;
|
||||
import com.dcsoft.common.core.constant.SecurityConstants;
|
||||
@@ -11,13 +12,27 @@ import com.dcsoft.common.core.domain.R;
|
||||
import com.dcsoft.common.core.enums.UserStatus;
|
||||
import com.dcsoft.common.core.exception.ServiceException;
|
||||
import com.dcsoft.common.core.text.Convert;
|
||||
import com.dcsoft.common.core.utils.SmsUtils;
|
||||
import com.dcsoft.common.core.utils.StringUtils;
|
||||
import com.dcsoft.common.core.utils.bean.BeanUtils;
|
||||
import com.dcsoft.common.core.utils.ip.IpUtils;
|
||||
import com.dcsoft.common.core.utils.uuid.IdUtils;
|
||||
import com.dcsoft.common.core.web.domain.AjaxResult;
|
||||
import com.dcsoft.common.redis.service.RedisService;
|
||||
import com.dcsoft.common.security.utils.SecurityUtils;
|
||||
import com.dcsoft.common.sms.config.properties.SmsProperties;
|
||||
import com.dcsoft.system.api.RemoteUserService;
|
||||
import com.dcsoft.system.api.domain.SmsDTO;
|
||||
import com.dcsoft.system.api.domain.SysUser;
|
||||
import com.dcsoft.system.api.model.LoginUser;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
/**
|
||||
* 登录校验方法
|
||||
@@ -27,6 +42,7 @@ import com.dcsoft.system.api.model.LoginUser;
|
||||
@Component
|
||||
public class SysLoginService
|
||||
{
|
||||
private static final Logger log = LoggerFactory.getLogger(SysLoginService.class);
|
||||
@Autowired
|
||||
private RemoteUserService remoteUserService;
|
||||
|
||||
@@ -39,6 +55,20 @@ public class SysLoginService
|
||||
@Autowired
|
||||
private RedisService redisService;
|
||||
|
||||
@Autowired
|
||||
private SmsProperties smsProperties;
|
||||
|
||||
@Value("${visitor.deptId}")
|
||||
private Long deptId;
|
||||
|
||||
@Value("${visitor.roleId}")
|
||||
private Long roleId;
|
||||
|
||||
private static final String USER_REGISTER = "USER_REGISTER:";
|
||||
private static final String USER_REGISTER_TIME = "USER_REGISTER_TIME:";
|
||||
|
||||
private static final long CASH_TIMEOUT = 60 * 5;
|
||||
|
||||
/**
|
||||
* 登录
|
||||
*/
|
||||
@@ -77,7 +107,7 @@ public class SysLoginService
|
||||
if (StringUtils.isNull(userResult) || StringUtils.isNull(userResult.getData()))
|
||||
{
|
||||
recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "登录用户不存在");
|
||||
throw new ServiceException("登录用户:" + username + " 不存在");
|
||||
throw new ServiceException("用户不存在/密码错误");
|
||||
}
|
||||
|
||||
if (R.FAIL == userResult.getCode())
|
||||
@@ -142,60 +172,164 @@ public class SysLoginService
|
||||
recordLogService.recordLogininfor(username, Constants.REGISTER, "注册成功");
|
||||
}
|
||||
|
||||
/**
|
||||
* 注册(小程序注册都是一键注册)
|
||||
*/
|
||||
public LoginUser appRegister(RegisterBody registerBody) {
|
||||
if (ObjectUtil.isNull(registerBody)) {
|
||||
throw new ServiceException("请校验注册信息!");
|
||||
}
|
||||
|
||||
// 注册用户信息
|
||||
SysUser sysUser = new SysUser();
|
||||
//如果有openId,从微信一键登录过来的
|
||||
if (StringUtils.isNotBlank(registerBody.getOpenid())) {
|
||||
sysUser.setOpenid(registerBody.getOpenid());
|
||||
//查询该手机的用户信息是否绑定了openId,没有则绑定openId
|
||||
R<LoginUser> userInfo = remoteUserService.getUserInfos(registerBody.getPhone(), SecurityConstants.INNER);
|
||||
if (null != userInfo && 200 == userInfo.getCode()) {
|
||||
//如果没有openId,更新该手机号的openId
|
||||
if (ObjectUtil.isNotEmpty(userInfo.getData())
|
||||
&& ObjectUtil.isNotEmpty(userInfo.getData().getSysUser())
|
||||
&& StringUtils.isBlank(userInfo.getData().getSysUser().getOpenid())) {
|
||||
SysUser sysUser1 = new SysUser();
|
||||
sysUser1.setUserId(userInfo.getData().getSysUser().getUserId());
|
||||
sysUser1.setOpenid(registerBody.getOpenid());
|
||||
remoteUserService.updateOpenId(sysUser1, SecurityConstants.INNER);
|
||||
return remoteUserService.getWxUserInfo(sysUser.getOpenid(), SecurityConstants.INNER).getData();
|
||||
}
|
||||
} else {
|
||||
throw new ServiceException("微信登录注册异常!");
|
||||
}
|
||||
}
|
||||
|
||||
//如果是手机号验证码登录一键注册
|
||||
if(StringUtils.isNotBlank(registerBody.getSmsCode())) {
|
||||
//获取短信验证码
|
||||
Object smsCode = redisService.getCacheObject(USER_REGISTER + registerBody.getPhone());
|
||||
if (ObjectUtil.isNull(smsCode) && StringUtils.isBlank(String.valueOf(smsCode))) {
|
||||
throw new ServiceException("验证码已过期,请重新获取");
|
||||
}
|
||||
if (!StringUtils.equals(registerBody.getSmsCode(), String.valueOf(smsCode))) {
|
||||
throw new ServiceException("验证码不正确,请重新填写");
|
||||
}
|
||||
sysUser.setUserName(registerBody.getPhone());
|
||||
sysUser.setPhonenumber(registerBody.getPhone());
|
||||
}
|
||||
|
||||
sysUser.setUserName(registerBody.getPhone());
|
||||
sysUser.setPhonenumber(registerBody.getPhone());
|
||||
sysUser.setNickName(registerBody.getPhone());
|
||||
//密码初始化
|
||||
if (StringUtils.isBlank(registerBody.getPassword())) {
|
||||
AjaxResult result = remoteUserService.selectConfigByKey("sys.user.initPassword");
|
||||
String password = "123456";
|
||||
if (result.isSuccess()) {
|
||||
password = result.get("msg").toString();
|
||||
}
|
||||
registerBody.setPassword(password);
|
||||
}
|
||||
|
||||
sysUser.setPassword(SecurityUtils.encryptPassword(registerBody.getPassword()));
|
||||
sysUser.setDeptId(deptId);
|
||||
R<?> registerResult = remoteUserService.registerUserInfo(sysUser, SecurityConstants.INNER);
|
||||
|
||||
if (R.FAIL == registerResult.getCode()) {
|
||||
throw new ServiceException(registerResult.getMsg());
|
||||
}
|
||||
|
||||
//查询新增的访客信息
|
||||
R<LoginUser> userResult = null;
|
||||
if (StringUtils.isNotBlank(registerBody.getOpenid())) {
|
||||
userResult = remoteUserService.getWxUserInfo(sysUser.getOpenid(), SecurityConstants.INNER);
|
||||
} else {
|
||||
userResult = remoteUserService.getUserInfo(sysUser.getUserName(), SecurityConstants.INNER);
|
||||
}
|
||||
//给访客设置对应角色
|
||||
SysUser sysUser1 = new SysUser();
|
||||
sysUser1.setUserId(userResult.getData().getSysUser().getUserId());
|
||||
sysUser1.setRoleId(roleId);
|
||||
remoteUserService.insertVisitor(sysUser1, SecurityConstants.INNER);
|
||||
|
||||
recordLogService.recordLogininfor(sysUser.getOpenid(), Constants.REGISTER, "注册成功");
|
||||
|
||||
if (StringUtils.isNotBlank(sysUser.getOpenid())) {
|
||||
return remoteUserService.getWxUserInfo(sysUser.getOpenid(), SecurityConstants.INNER).getData();
|
||||
} else {
|
||||
return remoteUserService.getUserInfo(sysUser.getUserName(), SecurityConstants.INNER).getData();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 登录
|
||||
*/
|
||||
public LoginUser login(String username)
|
||||
{
|
||||
|
||||
public LoginUser Smslogin(LoginBody login) {
|
||||
// 用户名不在指定范围内 错误
|
||||
if (username.length() < UserConstants.USERNAME_MIN_LENGTH
|
||||
|| username.length() > UserConstants.USERNAME_MAX_LENGTH)
|
||||
{
|
||||
recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "用户名不在指定范围");
|
||||
if (login.getUsername().length() < UserConstants.USERNAME_MIN_LENGTH
|
||||
|| login.getUsername().length() > UserConstants.USERNAME_MAX_LENGTH) {
|
||||
recordLogService.recordLogininfor(login.getUsername(), Constants.LOGIN_FAIL, "用户名不在指定范围");
|
||||
throw new ServiceException("用户名不在指定范围");
|
||||
}
|
||||
// IP黑名单校验
|
||||
String blackStr = Convert.toStr(redisService.getCacheObject(CacheConstants.SYS_LOGIN_BLACKIPLIST));
|
||||
if (IpUtils.isMatchedIp(blackStr, IpUtils.getIpAddr()))
|
||||
{
|
||||
recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "很遗憾,访问IP已被列入系统黑名单");
|
||||
if (IpUtils.isMatchedIp(blackStr, IpUtils.getIpAddr())) {
|
||||
recordLogService.recordLogininfor(login.getUsername(), Constants.LOGIN_FAIL, "很遗憾,访问IP已被列入系统黑名单");
|
||||
throw new ServiceException("很遗憾,访问IP已被列入系统黑名单");
|
||||
}
|
||||
// 查询用户信息
|
||||
R<LoginUser> userResult = remoteUserService.getUserInfo(username, SecurityConstants.INNER);
|
||||
|
||||
if (StringUtils.isNull(userResult) || StringUtils.isNull(userResult.getData()))
|
||||
{
|
||||
recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "登录用户不存在");
|
||||
throw new ServiceException("登录用户:" + username + " 不存在");
|
||||
//获取短信验证码
|
||||
Object cashSmsCode = redisService.getCacheObject(USER_REGISTER + login.getUsername());
|
||||
if (ObjectUtil.isNull(login.getSmsCode()) && StringUtils.isBlank(String.valueOf(login.getSmsCode()))) {
|
||||
throw new ServiceException("验证码已过期,请重新获取");
|
||||
}
|
||||
if (!StringUtils.equals(login.getSmsCode(), String.valueOf(cashSmsCode))) {
|
||||
throw new ServiceException("验证码不正确,请重新填写");
|
||||
}
|
||||
|
||||
if (R.FAIL == userResult.getCode())
|
||||
{
|
||||
// 查询用户信息
|
||||
R<LoginUser> userResult = remoteUserService.getUserInfos(login.getUsername(), SecurityConstants.INNER);
|
||||
|
||||
//没查到用户则注册
|
||||
if (StringUtils.isNull(userResult) || StringUtils.isNull(userResult.getData())) {
|
||||
RegisterBody registerBody = new RegisterBody();
|
||||
BeanUtils.copyProperties(login, registerBody);
|
||||
registerBody.setPhone(login.getUsername());
|
||||
registerBody.setOpenid(null);
|
||||
return this.appRegister(registerBody);
|
||||
}
|
||||
|
||||
if (R.FAIL == userResult.getCode()) {
|
||||
throw new ServiceException(userResult.getMsg());
|
||||
}
|
||||
|
||||
LoginUser userInfo = userResult.getData();
|
||||
SysUser user = userResult.getData().getSysUser();
|
||||
if (UserStatus.DELETED.getCode().equals(user.getDelFlag()))
|
||||
{
|
||||
recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "对不起,您的账号已被删除");
|
||||
throw new ServiceException("对不起,您的账号:" + username + " 已被删除");
|
||||
if (UserStatus.DELETED.getCode().equals(user.getDelFlag())) {
|
||||
recordLogService.recordLogininfor(login.getUsername(), Constants.LOGIN_FAIL, "对不起,您的账号已被删除");
|
||||
throw new ServiceException("对不起,您的账号:" + login.getUsername() + " 已被删除");
|
||||
}
|
||||
if (UserStatus.DISABLE.getCode().equals(user.getStatus()))
|
||||
{
|
||||
recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "用户已停用,请联系管理员");
|
||||
throw new ServiceException("对不起,您的账号:" + username + " 已停用");
|
||||
if (UserStatus.DISABLE.getCode().equals(user.getStatus())) {
|
||||
recordLogService.recordLogininfor(login.getUsername(), Constants.LOGIN_FAIL, "用户已停用,请联系管理员");
|
||||
throw new ServiceException("对不起,您的账号:" + login.getUsername() + " 已停用");
|
||||
}
|
||||
recordLogService.recordLogininfor(username, Constants.LOGIN_SUCCESS, "登录成功");
|
||||
return userInfo;
|
||||
if (user.getUserName().contains("WX_")) {
|
||||
SysUser sysUser = new SysUser();
|
||||
sysUser.setUserId(user.getUserId());
|
||||
sysUser.setUserName(login.getUsername());
|
||||
sysUser.setNickName(login.getUsername());
|
||||
sysUser.setPhonenumber(login.getUsername());
|
||||
remoteUserService.updateByUserId(sysUser, SecurityConstants.INNER);
|
||||
}
|
||||
|
||||
// 查询用户信息
|
||||
R<LoginUser> userResultNew = remoteUserService.getUserInfo(login.getUsername(), SecurityConstants.INNER);
|
||||
recordLogService.recordLogininfor(login.getUsername(), Constants.LOGIN_SUCCESS, "登录成功");
|
||||
return userResultNew.getData();
|
||||
}
|
||||
|
||||
public void updateOpenId(LoginUser userInfo, LoginBody form) {
|
||||
// 注册用户信息
|
||||
SysUser sysUser = new SysUser();
|
||||
sysUser=userInfo.getSysUser();
|
||||
sysUser = userInfo.getSysUser();
|
||||
sysUser.setUserName(form.getUsername());
|
||||
sysUser.setOpenid(form.getOpenid());
|
||||
R<?> registerResult = remoteUserService.updateOpenId(sysUser, SecurityConstants.INNER);
|
||||
@@ -209,4 +343,47 @@ public class SysLoginService
|
||||
R<LoginUser> registerResult = remoteUserService.getWxUserInfo(form.getOpenid(), SecurityConstants.INNER);
|
||||
return registerResult;
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送短信
|
||||
*
|
||||
* @param register
|
||||
*/
|
||||
public R<String> sendSms(RegisterBody register) {
|
||||
if (StringUtils.isBlank(register.getPhone())) {
|
||||
return R.fail("手机号不能为空!");
|
||||
}
|
||||
|
||||
//生成六位验证码
|
||||
String smsCode = SmsUtils.generateSmsCode();
|
||||
|
||||
SmsDTO smsDTO = new SmsDTO();
|
||||
smsDTO.setTemplateId(smsProperties.getTemplate11());
|
||||
smsDTO.setCaptcha(smsCode);
|
||||
smsDTO.setPhone(register.getPhone());
|
||||
AjaxResult ajaxResult = remoteUserService.sendMessage(smsDTO, SecurityConstants.INNER);
|
||||
if (!ajaxResult.isSuccess()) {
|
||||
throw new ServiceException(ajaxResult.get("msg").toString());
|
||||
}
|
||||
|
||||
//缓存次数
|
||||
int i = 1;
|
||||
Integer time = redisService.getCacheObject(USER_REGISTER_TIME + register.getPhone());
|
||||
//如果已经达到10次则达到单日上限
|
||||
if (null != time) {
|
||||
i = time + 1;
|
||||
if(time == 10) {
|
||||
throw new ServiceException("发送短信验证码次数已达到单日上限");
|
||||
}
|
||||
}
|
||||
// 获取当天的结束时间点
|
||||
Date endOfDay = DateUtil.endOfDay(new Date());
|
||||
// 获取当前时间至当天结束的毫秒数
|
||||
long cashTime = (endOfDay.getTime() - System.currentTimeMillis()) / 1000;
|
||||
redisService.setCacheObject(USER_REGISTER_TIME + register.getPhone(), i, cashTime, TimeUnit.SECONDS);
|
||||
|
||||
//缓存短信
|
||||
redisService.setCacheObject(USER_REGISTER + register.getPhone(), smsCode, CASH_TIMEOUT, TimeUnit.SECONDS);
|
||||
return R.ok();
|
||||
}
|
||||
}
|
||||
|
||||
147
dcsoft-auth/src/main/java/com/dcsoft/auth/utils/RsaUiUtils.java
Normal file
147
dcsoft-auth/src/main/java/com/dcsoft/auth/utils/RsaUiUtils.java
Normal file
@@ -0,0 +1,147 @@
|
||||
package com.dcsoft.auth.utils;
|
||||
|
||||
import org.apache.tomcat.util.codec.binary.Base64;
|
||||
|
||||
import javax.crypto.Cipher;
|
||||
import java.security.*;
|
||||
import java.security.interfaces.RSAPrivateKey;
|
||||
import java.security.interfaces.RSAPublicKey;
|
||||
import java.security.spec.PKCS8EncodedKeySpec;
|
||||
import java.security.spec.X509EncodedKeySpec;
|
||||
|
||||
/**
|
||||
* RSA加密解密
|
||||
*
|
||||
**/
|
||||
public class RsaUiUtils {
|
||||
|
||||
|
||||
// Rsa 私钥
|
||||
public static String privateKey = "MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAqhHyZfSsYourNxaY7Nt+PrgrxkiA50efORdI5U5lsW79MmFnusUA355oaSXcLhu5xxB38SMSyP2KvuKNPuH3owIDAQABAkAfoiLyL+Z4lf4Myxk6xUDgLaWGximj20CUf+5BKKnlrK+Ed8gAkM0HqoTt2UZwA5E2MzS4EI2gjfQhz5X28uqxAiEA3wNFxfrCZlSZHb0gn2zDpWowcSxQAgiCstxGUoOqlW8CIQDDOerGKH5OmCJ4Z21v+F25WaHYPxCFMvwxpcw99EcvDQIgIdhDTIqD2jfYjPTY8Jj3EDGPbH2HHuffvflECt3Ek60CIQCFRlCkHpi7hthhYhovyloRYsM+IS9h/0BzlEAuO0ktMQIgSPT3aFAgJYwKpqRYKlLDVcflZFCKY7u3UP8iWi1Qw0Y=";
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
// String s = decryptByPrivateKey("pWwsO5+mUIzh1svfQhswNKqI36UPrC4/tn6mzsSE9T9KwjpeZiw+sAZnyP51CxXl8saj4wUmI4aJcmgGdbM3eA==");
|
||||
String s = decryptByPrivateKey("NeInqZTsJAXHnRMl4zbO89mJZ4/LBnoTPhdgiFXwtpsunoqQM7duJ2ZdoXKyUGEuKFestyQ4sO5Qx4mpD5m7Sg==");
|
||||
System.out.println(s);
|
||||
// JSONObject jsonObject = JSONObject.parseObject(s);
|
||||
// System.out.println(jsonObject);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 私钥解密
|
||||
*
|
||||
* @param text 私钥
|
||||
* @param text 待解密的文本
|
||||
* @return 解密后的文本
|
||||
*/
|
||||
public static String decryptByPrivateKey(String text) throws Exception {
|
||||
return decryptByPrivateKey(privateKey, text);
|
||||
}
|
||||
|
||||
/**
|
||||
* 公钥解密
|
||||
*
|
||||
* @param publicKeyString 公钥
|
||||
* @param text 待解密的信息
|
||||
* @return 解密后的文本
|
||||
*/
|
||||
public static String decryptByPublicKey(String publicKeyString, String text) throws Exception {
|
||||
X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(Base64.decodeBase64(publicKeyString));
|
||||
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
|
||||
PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec);
|
||||
Cipher cipher = Cipher.getInstance("RSA");
|
||||
cipher.init(Cipher.DECRYPT_MODE, publicKey);
|
||||
byte[] result = cipher.doFinal(Base64.decodeBase64(text));
|
||||
return new String(result);
|
||||
}
|
||||
|
||||
/**
|
||||
* 私钥加密
|
||||
*
|
||||
* @param privateKeyString 私钥
|
||||
* @param text 待加密的信息
|
||||
* @return 加密后的文本
|
||||
*/
|
||||
public static String encryptByPrivateKey(String privateKeyString, String text) throws Exception {
|
||||
PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(Base64.decodeBase64(privateKeyString));
|
||||
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
|
||||
PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);
|
||||
Cipher cipher = Cipher.getInstance("RSA");
|
||||
cipher.init(Cipher.ENCRYPT_MODE, privateKey);
|
||||
byte[] result = cipher.doFinal(text.getBytes());
|
||||
return Base64.encodeBase64String(result);
|
||||
}
|
||||
|
||||
/**
|
||||
* 私钥解密
|
||||
*
|
||||
* @param privateKeyString 私钥
|
||||
* @param text 待解密的文本
|
||||
* @return 解密后的文本
|
||||
*/
|
||||
public static String decryptByPrivateKey(String privateKeyString, String text) throws Exception {
|
||||
PKCS8EncodedKeySpec pkcs8EncodedKeySpec5 = new PKCS8EncodedKeySpec(Base64.decodeBase64(privateKeyString));
|
||||
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
|
||||
PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec5);
|
||||
Cipher cipher = Cipher.getInstance("RSA");
|
||||
cipher.init(Cipher.DECRYPT_MODE, privateKey);
|
||||
byte[] result = cipher.doFinal(Base64.decodeBase64(text));
|
||||
return new String(result);
|
||||
}
|
||||
|
||||
/**
|
||||
* 公钥加密
|
||||
*
|
||||
* @param publicKeyString 公钥
|
||||
* @param text 待加密的文本
|
||||
* @return 加密后的文本
|
||||
*/
|
||||
public static String encryptByPublicKey(String publicKeyString, String text) throws Exception {
|
||||
X509EncodedKeySpec x509EncodedKeySpec2 = new X509EncodedKeySpec(Base64.decodeBase64(publicKeyString));
|
||||
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
|
||||
PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec2);
|
||||
Cipher cipher = Cipher.getInstance("RSA");
|
||||
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
|
||||
byte[] result = cipher.doFinal(text.getBytes());
|
||||
return Base64.encodeBase64String(result);
|
||||
}
|
||||
|
||||
/**
|
||||
* 构建RSA密钥对
|
||||
*
|
||||
* @return 生成后的公私钥信息
|
||||
*/
|
||||
public static RsaKeyPair generateKeyPair() throws NoSuchAlgorithmException {
|
||||
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
|
||||
keyPairGenerator.initialize(1024);
|
||||
KeyPair keyPair = keyPairGenerator.generateKeyPair();
|
||||
RSAPublicKey rsaPublicKey = (RSAPublicKey) keyPair.getPublic();
|
||||
RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) keyPair.getPrivate();
|
||||
String publicKeyString = Base64.encodeBase64String(rsaPublicKey.getEncoded());
|
||||
String privateKeyString = Base64.encodeBase64String(rsaPrivateKey.getEncoded());
|
||||
return new RsaKeyPair(publicKeyString, privateKeyString);
|
||||
}
|
||||
|
||||
/**
|
||||
* RSA密钥对对象
|
||||
*/
|
||||
public static class RsaKeyPair {
|
||||
private final String publicKey;
|
||||
private final String privateKey;
|
||||
|
||||
public RsaKeyPair(String publicKey, String privateKey) {
|
||||
this.publicKey = publicKey;
|
||||
this.privateKey = privateKey;
|
||||
}
|
||||
|
||||
public String getPublicKey() {
|
||||
return publicKey;
|
||||
}
|
||||
|
||||
public String getPrivateKey() {
|
||||
return privateKey;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user