commit
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
package io.v.nutz.base.utils;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import io.v.nutz.sys.models.Sys_log;
|
||||
import io.v.nutz.sys.models.Sys_user;
|
||||
import io.v.nutz.sys.services.SysUserService;
|
||||
@@ -15,6 +16,7 @@ import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.Lang;
|
||||
import org.nutz.lang.Times;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpSession;
|
||||
|
||||
@@ -46,6 +48,19 @@ public class LoginUtil {
|
||||
* @param loginOrigin 登录起源
|
||||
*/
|
||||
public void doLogin(AuthenticationToken token, HttpServletRequest request, HttpSession session, LoginOrigin loginOrigin) {
|
||||
doLogin(token, request, session, loginOrigin, null);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 密码登录
|
||||
*
|
||||
* @param token 令牌
|
||||
* @param request 请求
|
||||
* @param session 会话
|
||||
* @param loginOrigin 登录起源
|
||||
*/
|
||||
public void doLogin(AuthenticationToken token, HttpServletRequest request, HttpSession session, LoginOrigin loginOrigin, String openid) {
|
||||
|
||||
//设置登录源
|
||||
PlatformCaptchaToken platformCaptchaToken = (PlatformCaptchaToken) token;
|
||||
@@ -61,6 +76,9 @@ public class LoginUtil {
|
||||
Sys_user user = (Sys_user) subject.getPrincipal();
|
||||
int count = user.getLoginCount() == null ? 0 : user.getLoginCount();
|
||||
org.nutz.dao.Chain userUpdateChain = Chain.make("loginIp", user.getLoginIp()).add("loginAt", Times.getTS()).add("loginCount", count + 1).add("userOnline", true).add("loginSessionId", session.getId());
|
||||
if (StrUtil.isNotBlank(openid)) {
|
||||
userUpdateChain.add("openId", openid).add("weAppLoginCount", user.getWeAppLoginCount() + 1);
|
||||
}
|
||||
sysUserService.update(userUpdateChain, Cnd.where("id", "=", user.getId()));
|
||||
Sys_log sysLog = new Sys_log();
|
||||
sysLog.setType("info");
|
||||
|
||||
@@ -4,27 +4,31 @@ import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.http.HttpUtil;
|
||||
import cn.hutool.socket.SocketUtil;
|
||||
import io.v.nutz.base.payment.wxpay.util.WeChatUtils;
|
||||
import io.v.nutz.base.result.Result;
|
||||
import io.v.nutz.base.utils.LoginUtil;
|
||||
import io.v.nutz.sys.models.Sys_user;
|
||||
import io.v.nutz.sys.services.SysUserService;
|
||||
import io.v.nutz.web.commons.base.Globals;
|
||||
import io.v.nutz.web.commons.shiro.exception.CaptchaEmptyException;
|
||||
import io.v.nutz.web.commons.shiro.exception.CaptchaIncorrectException;
|
||||
import io.v.nutz.web.commons.slog.SLogService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.math.NumberUtils;
|
||||
import org.apache.shiro.SecurityUtils;
|
||||
import org.apache.shiro.authc.AuthenticationException;
|
||||
import org.apache.shiro.authc.AuthenticationToken;
|
||||
import org.apache.shiro.authc.LockedAccountException;
|
||||
import org.apache.shiro.authc.UnknownAccountException;
|
||||
import org.jasig.cas.client.util.AbstractCasFilter;
|
||||
import org.jasig.cas.client.validation.Assertion;
|
||||
import org.nutz.dao.Chain;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.integration.jedis.RedisService;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.json.Json;
|
||||
import org.nutz.lang.Lang;
|
||||
import org.nutz.lang.Strings;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Attr;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
@@ -159,47 +163,32 @@ public class SysWechatController {
|
||||
|
||||
@At
|
||||
@Ok("re")
|
||||
public String doLogin(HttpSession session,
|
||||
@Param("redirect") String redirect,
|
||||
@Param("state") String state,
|
||||
HttpServletRequest request) {
|
||||
|
||||
Assertion assertion = (Assertion) request.getSession().getAttribute(AbstractCasFilter.CONST_CAS_ASSERTION);
|
||||
if (assertion == null) {
|
||||
return ">>:" + Globals.AppDomain + "/platform/home/UnknownAccountError";
|
||||
}
|
||||
|
||||
String principal = assertion.getPrincipal().toString();
|
||||
|
||||
//工号 手机号 身份证
|
||||
Sys_user user = dao.fetch(Sys_user.class, Cnd.NEW().and("loginname", "=", principal).or("mobile", "=", principal).or("idcard", "=", principal));
|
||||
String loginName = Optional.ofNullable(user).map(Sys_user::getLoginname).orElse(null);
|
||||
|
||||
if (Lang.isEmpty(user)) {
|
||||
return ">>:" + Globals.AppDomain + "/platform/home/UnknownAccountError";
|
||||
}
|
||||
public Result doLogin(@Attr("platformLoginToken") AuthenticationToken token, HttpServletRequest request, HttpSession session, @Param("state") String state) {
|
||||
|
||||
System.out.println(state);
|
||||
int errCount = NumberUtils.toInt(Strings.sNull(SecurityUtils.getSubject().getSession(true).getAttribute("platformErrCount")));
|
||||
try {
|
||||
loginUtil.doLogin(loginName, request, session, LoginUtil.LoginOrigin.WEI_XIN);
|
||||
//绑定openId
|
||||
if (StrUtil.isNotBlank(state)) {
|
||||
String openId = weChatUtils.decrypt(state);
|
||||
dao.update(Sys_user.class, Chain.make("openId", openId).add("weAppLoginCount", user.getWeAppLoginCount() + 1), Cnd.where("loginname", "=", loginName));
|
||||
}
|
||||
if (StrUtil.isNotBlank(redirect)) {
|
||||
return ">>:" + redirect;
|
||||
}
|
||||
return ">>:" + Globals.AppDomain + "/mobile/index";
|
||||
String decrypt = weChatUtils.decrypt(state);
|
||||
loginUtil.doLogin(token, request, session, LoginUtil.LoginOrigin.WEI_XIN, decrypt);
|
||||
return Result.success("login.success");
|
||||
} catch (CaptchaIncorrectException e) {
|
||||
return Result.error(1, "login.error.captcha");
|
||||
} catch (CaptchaEmptyException e) {
|
||||
return Result.error(2, "验证码为空");
|
||||
} catch (LockedAccountException e) {
|
||||
request.setAttribute("errMsg", "帐号被锁定,请5分钟后再试");
|
||||
return ">>:" + Globals.AppDomain + "/platform/home/LockedAccountError";
|
||||
return Result.error(3, "login.error.locked");
|
||||
} catch (UnknownAccountException e) {
|
||||
request.setAttribute("errMsg", "系统中没有此用户");
|
||||
return ">>:" + Globals.AppDomain + "/platform/home/UnknownAccountError";
|
||||
errCount++;
|
||||
SecurityUtils.getSubject().getSession(true).setAttribute("platformErrCount", errCount);
|
||||
return Result.error(4, "login.error.user");
|
||||
} catch (AuthenticationException e) {
|
||||
errCount++;
|
||||
SecurityUtils.getSubject().getSession(true).setAttribute("platformErrCount", errCount);
|
||||
return Result.error(5, "login.error.user");
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
request.setAttribute("errMsg", "用户名或密码错误");
|
||||
return ">>:" + Globals.AppDomain + "/platform/home/500";
|
||||
errCount++;
|
||||
SecurityUtils.getSubject().getSession(true).setAttribute("platformErrCount", errCount);
|
||||
return Result.error(6, "login.error.system");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user