Commit 8abd77cb by 罗承锋

修改微信登录方法

parent a28cb087
......@@ -45,8 +45,8 @@ public class GetPhoneCodeController extends BaseController {
//登录验证码标识
private static String CODE="getPhoneCode";
//5分钟内有效
private static long CODETIME=1000 * 60*5;
//30分钟内有效
private static long CODETIME=1000 * 60*30;
//短信验证码错误key
private static String ERRCODENAME="ERRCODENAME";
......
......@@ -5,15 +5,20 @@ import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.winsun.auth.core.base.controller.BaseController;
import com.winsun.auth.core.base.tips.ErrorTip;
import com.winsun.auth.core.common.model.ResponseData;
import com.winsun.auth.core.support.HttpKit;
import com.winsun.auth.core.util.DateUtil;
import com.winsun.auth.model.user.User;
import com.winsun.bean.HhrUser;
import com.winsun.bean.School;
import com.winsun.bean.SysUser;
import com.winsun.item.core.shiro.ShiroKit;
import com.winsun.item.core.util.AccLoginUtil;
import com.winsun.item.core.util.IPUtils;
import com.winsun.item.core.util.ResponseEntity;
import com.winsun.item.modular.system.service.IUserService;
import com.winsun.item.modular.system.service.impl.AccServiceImpl;
import com.winsun.item.util.LoginUtils;
import com.winsun.mapper.HhrUserMapper;
import com.winsun.mapper.SchoolMapper;
......@@ -23,10 +28,14 @@ import com.winsun.utils.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.security.NoSuchAlgorithmException;
import java.util.Date;
import java.util.HashMap;
......@@ -59,12 +68,15 @@ public class LoginPwdController extends BaseController {
private static String ERRCODENAME = "ForgeERRCODENAME";
private static long CODETIME = 1000 * 60 * 5;
private static long CODETIME = 1000 * 60 * 30;
private static int ERRACCOUNT = 10;
private static String APPID = "wxfc18f5186b729d15";
private static String APPSECRET = "122278f3fb555468848ff040620505ad";
@Value("${weixin.appid}")
private String APPID = "";
@Value("${weixin.appsecret}")
private String APPSECRET = "";
//登录验证码标识
private static String GETPHONECODE = "getPhoneCode";
......@@ -107,32 +119,31 @@ public class LoginPwdController extends BaseController {
/*jsonObject = HttpHelper.doGet(url);*/
Map<String, Object> hashMap = new HashMap<>();
log.info(jsonObject);
hashMap.put("info",JSONObject.parseObject(jsonObject));
/* Map<String,Object> map = JSON.toJavaObject(jsonObject,Map.class);*/
Map<String,Object> map = JSON.parseObject(jsonObject, Map.class);
String openId = map.get("openid").toString();
Wrapper<HhrUser> wrapper = new EntityWrapper<>();
wrapper.eq("open_id", openId);
log.info("openId:"+openId);
List<HhrUser> hhrUsers = hhrUserMapper.selectList(wrapper);
if (hhrUsers.size() == 0) {
hashMap.put("info",JSONObject.parseObject(jsonObject));
return ResponseData.error(hashMap,"当前微信未绑定账号,请先登录绑定账号!");
}
HhrUser hhrUser = hhrUsers.get(0);
SysUser sysUser = sysUserMapper.selectById(hhrUser.getId());
if (StringUtils.isBlank(sysUser.getAccount())) {
hashMap.put("info",JSONObject.parseObject(jsonObject));
return ResponseData.error(hashMap,"当前账号异常!");
}
hashMap.put("username", sysUser.getAccount());
hashMap.put("openId", openId);
return ResponseData.success(hashMap);
// 信息正确,调用登录
return this.loginvalid(hashMap, sysUser.getAccount(), openId);
}
/**
* 微信登录
* 微信登录-- 前端未调用
*
* @param openid
* @return
......@@ -161,6 +172,50 @@ public class LoginPwdController extends BaseController {
}
/**
* 重写微信openId登录方法
* @param username 用户名
* @param openId 用户openId
* @return
*/
private ResponseData<Map<String, Object>> loginvalid(Map<String, Object> hashMap, String username, String openId) {
try{
// 关闭错误登录校验
stringRedisTemplate.opsForValue().set("SYS_LOGIN_ERROR" + username, "1");
String password = null;
ResponseData<String> canLogin = LoginUtils.canLogin(username);
if(!canLogin.isSuccess()) {
log.info("统一账号或子统一账号错误登录次数较多,不允许登录;请稍后再试!");
return ResponseData.error(hashMap, "登录失败,由于账号被锁定,请联系管理员或稍后重试!");
}
ResponseData<String> checkUserName = LoginUtils.checkUserName(username);
if(!checkUserName.isSuccess()) {
return ResponseData.error(hashMap, canLogin.getMsg());
}
// 获取数据库中的账号密码,准备比对
User user = userService.getByAccount(username);
if (null == user) {
log.info("统一账号或子统一账号在系统中找不到或被冻结!");
return ResponseData.error(hashMap, "统一账号或子统一账号在系统中找不到或被冻结!");
}
// 所有信息正确
Object object = AccLoginUtil.normalLogin(username, user.getPassword(), openId);
if(object instanceof ErrorTip) {
return ResponseData.error(hashMap, "授权登录错误");
}
Map<String, Object> map = (Map<String, Object>)object;
log.info("login result :{}", JSON.toJSONString(object));
Map<String, Object> resultMap = new HashMap<>();
resultMap.put("sessionId", map.get("sessionId"));
resultMap.put("id", map.get("id"));
return ResponseData.success(resultMap);
}catch(Exception e) {
log.error(e.getMessage());
return ResponseData.error(hashMap, "内部异常");
}
}
/**
* 微信解绑
*
* @param openid
......@@ -212,8 +267,10 @@ public class LoginPwdController extends BaseController {
* @return
*/
@RequestMapping("bindingAccount")
public ResponseData<String> bindingAccount(String openid,String accessToken, String username, String verificationCode) {
log.info(accessToken+":"+openid+":"+":"+username+":"+verificationCode);
public ResponseData<Map<String, Object>> bindingAccount(String openid,String accessToken,
String username, String verificationCode,
@RequestParam(value = "remember", defaultValue = "false") boolean remember) {
log.info(accessToken+":"+openid+":"+":"+username+":"+verificationCode + ":" + remember);
if (StringUtils.isBlank(accessToken) || StringUtils.isBlank(openid) || StringUtils.isBlank(username) || StringUtils.isBlank(verificationCode)) {
return ResponseData.error("绑定失败,授权失效或账号验证码为空!");
}
......@@ -252,12 +309,16 @@ public class LoginPwdController extends BaseController {
Wrapper wrapper = new EntityWrapper<>();
wrapper.eq("id", sysUser.getId());
Map<String, Object> dataMapping = new HashMap<>();
dataMapping.put("open_id", openid);
// 不绑定微信则不保存openId
if (remember) {
dataMapping.put("open_id", openid);
}
dataMapping.put("wx_head_img_url",headimgurl);
dataMapping.put("wx_nick_name",nickname);
Integer integer = hhrUserMapper.updateForSet(MyBatisPlusUpdateUtils.toUpdateSet(dataMapping), wrapper);
if (integer == 1) {
return ResponseData.success(openid);
return this.loginvalid(null, sysUser.getAccount(), openid);
}
return ResponseData.error("绑定失败!");
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment