From 1ee4b4af30605541e24ab63fd52fd9e5665b6d48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=BE=E6=96=87=E8=B1=AA?= <980287353@qq.com> Date: Wed, 7 Aug 2024 14:09:28 +0800 Subject: [PATCH] =?UTF-8?q?perf=EF=BC=9A=E8=AF=B7=E6=B1=82=E6=97=B6?= =?UTF-8?q?=E5=B0=86=E9=80=9A=E8=BF=87getCurrentUserName()=E6=96=B9?= =?UTF-8?q?=E6=B3=95=E8=BF=94=E5=9B=9E=E7=9A=84=E5=AF=B9=E8=B1=A1=E6=A3=80?= =?UTF-8?q?=E9=AA=8C=E7=94=A8=E6=88=B7=E6=98=AF=E5=90=A6=E9=9D=9E=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../demo/config/DemoWebConfigurer.java | 35 +++--- .../demo/config/DemoWebMvcConfigurer.java | 15 --- .../tiesheng/login/LoginAutoConfigurer.java | 16 --- .../login/config/TokenWebMvcConfigurer.java | 15 ++- .../login/controller/LoginController.java | 26 ++-- .../login}/mapper/CoreLogLoginMapper.java | 4 +- .../mapper/CorePlatformUniqueMapper.java | 4 +- .../login}/pojos/RequestUserInfo.java | 2 +- .../login}/pojos/dao/CoreLogLogin.java | 2 +- .../login}/pojos/dao/CorePlatformUnique.java | 2 +- .../service/CorePlatformUniqueService.java | 113 ++++++++++++++++++ .../service/TieshengLoginConfigurer.java | 36 ------ .../login/service/TsLoginConfigurer.java | 69 +++++++++++ .../service/impl/DefaultLoginConfigurer.java | 32 ----- .../db/migration/core_login_init.sql | 18 +++ .../resources/mapper/CoreLogLoginMapper.xml | 4 +- .../mapper/CorePlatformUniqueMapper.xml | 4 +- .../config/ding/PlatformDingConfig.java | 2 +- .../tiesheng/util/config/TsTokenConfig.java | 8 +- .../tiesheng/util/service/TsCacheService.java | 10 ++ .../com/tiesheng/web/EnableTieshengWeb.java | 4 +- .../com/tiesheng/web/WebAutoConfigurer.java | 3 +- .../web/controller/LogController.java | 2 +- .../tiesheng/web/service/CoreLogService.java | 47 +------- .../service/CorePlatformUniqueService.java | 72 ----------- .../web/service/TieshengWebConfigurer.java | 44 ++----- .../db/migration/tiesheng_init_log.sql | 20 +--- 27 files changed, 295 insertions(+), 314 deletions(-) delete mode 100644 springboot-ademo/src/main/java/com/tiesheng/demo/config/DemoWebMvcConfigurer.java delete mode 100644 springboot-login/src/main/java/com/tiesheng/login/LoginAutoConfigurer.java rename {springboot-web/src/main/java/com/tiesheng/web => springboot-login/src/main/java/com/tiesheng/login}/mapper/CoreLogLoginMapper.java (60%) rename {springboot-web/src/main/java/com/tiesheng/web => springboot-login/src/main/java/com/tiesheng/login}/mapper/CorePlatformUniqueMapper.java (61%) rename {springboot-web/src/main/java/com/tiesheng/web => springboot-login/src/main/java/com/tiesheng/login}/pojos/RequestUserInfo.java (95%) rename {springboot-web/src/main/java/com/tiesheng/web => springboot-login/src/main/java/com/tiesheng/login}/pojos/dao/CoreLogLogin.java (98%) rename {springboot-web/src/main/java/com/tiesheng/web => springboot-login/src/main/java/com/tiesheng/login}/pojos/dao/CorePlatformUnique.java (98%) create mode 100644 springboot-login/src/main/java/com/tiesheng/login/service/CorePlatformUniqueService.java delete mode 100644 springboot-login/src/main/java/com/tiesheng/login/service/TieshengLoginConfigurer.java create mode 100644 springboot-login/src/main/java/com/tiesheng/login/service/TsLoginConfigurer.java delete mode 100644 springboot-login/src/main/java/com/tiesheng/login/service/impl/DefaultLoginConfigurer.java rename springboot-web/src/main/resources/db/migration/core_platform_unique.sql => springboot-login/src/main/resources/db/migration/core_login_init.sql (51%) rename {springboot-web => springboot-login}/src/main/resources/mapper/CoreLogLoginMapper.xml (87%) rename {springboot-web => springboot-login}/src/main/resources/mapper/CorePlatformUniqueMapper.xml (86%) delete mode 100644 springboot-web/src/main/java/com/tiesheng/web/service/CorePlatformUniqueService.java diff --git a/springboot-ademo/src/main/java/com/tiesheng/demo/config/DemoWebConfigurer.java b/springboot-ademo/src/main/java/com/tiesheng/demo/config/DemoWebConfigurer.java index c8595ff..987f08e 100644 --- a/springboot-ademo/src/main/java/com/tiesheng/demo/config/DemoWebConfigurer.java +++ b/springboot-ademo/src/main/java/com/tiesheng/demo/config/DemoWebConfigurer.java @@ -1,11 +1,12 @@ package com.tiesheng.demo.config; import cn.hutool.core.util.StrUtil; -import com.tiesheng.web.pojos.RequestUserInfo; -import com.tiesheng.web.pojos.dao.CorePlatformUnique; -import com.tiesheng.web.service.TieshengWebConfigurer; -import com.tiesheng.util.pojos.TokenBean; +import com.tiesheng.login.pojos.RequestUserInfo; +import com.tiesheng.login.pojos.dao.CorePlatformUnique; +import com.tiesheng.login.service.TsLoginConfigurer; import com.tiesheng.util.config.GlobalConfig; +import com.tiesheng.util.pojos.TokenBean; +import com.tiesheng.web.service.TieshengWebConfigurer; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -13,24 +14,28 @@ import javax.servlet.http.HttpServletResponse; import java.util.Objects; @Component -public class DemoWebConfigurer implements TieshengWebConfigurer { +public class DemoWebConfigurer implements TieshengWebConfigurer, TsLoginConfigurer { @Autowired GlobalConfig globalConfig; + @Override public RequestUserInfo getCurrentUserName(TokenBean tokenBean) { RequestUserInfo info = new RequestUserInfo(); - info.setId("1"); - info.setName("test"); - return info; + if (Objects.equals(tokenBean.getId(), "1")) { + return info; + } + return null; } - @Override public TokenBean login(CorePlatformUnique platformUnique) { TokenBean tokenBean = null; if (!StrUtil.isEmpty(platformUnique.getUserId())) { tokenBean = new TokenBean(platformUnique.getUserId(), "", globalConfig.getService()); + } else if (Objects.equals(platformUnique.getUniqueId(), "1110290049")) { + tokenBean = new TokenBean("1", "", globalConfig.getService()); + tokenBean.setExtra("1110290049"); } return tokenBean; @@ -39,13 +44,11 @@ public class DemoWebConfigurer implements TieshengWebConfigurer { @Override public void redirect(TokenBean bean, String to, String extra, HttpServletResponse response) { - // 默认跳转到mobile - to = StrUtil.emptyToDefault(to, "static/mobile"); - bean.setEnvironmentType(to); - - if (Objects.equals(bean.getEnvironmentType(), "static/mobile")) { - globalConfig.redirect("static/mobile", "/?token=" + bean.toToken(), response); - } } + + @Override + public TsLoginConfigurer configureLogin() { + return this; + } } diff --git a/springboot-ademo/src/main/java/com/tiesheng/demo/config/DemoWebMvcConfigurer.java b/springboot-ademo/src/main/java/com/tiesheng/demo/config/DemoWebMvcConfigurer.java deleted file mode 100644 index 2cff832..0000000 --- a/springboot-ademo/src/main/java/com/tiesheng/demo/config/DemoWebMvcConfigurer.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.tiesheng.demo.config; - -import org.springframework.stereotype.Component; -import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; - -@Component -public class DemoWebMvcConfigurer implements WebMvcConfigurer { - - @Override - public void addResourceHandlers(ResourceHandlerRegistry registry) { - registry.addResourceHandler("/mobile/**").addResourceLocations("classpath:/mobile/0.0.13/"); - } - -} diff --git a/springboot-login/src/main/java/com/tiesheng/login/LoginAutoConfigurer.java b/springboot-login/src/main/java/com/tiesheng/login/LoginAutoConfigurer.java deleted file mode 100644 index 2324fa4..0000000 --- a/springboot-login/src/main/java/com/tiesheng/login/LoginAutoConfigurer.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.tiesheng.login; - -import com.tiesheng.platform.PlatformAutoConfigurer; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Import; - -/** - * @author hao - */ - -@ComponentScan({ - "com.tiesheng.login.**.*", -}) -@Import(PlatformAutoConfigurer.class) -public class LoginAutoConfigurer { -} diff --git a/springboot-login/src/main/java/com/tiesheng/login/config/TokenWebMvcConfigurer.java b/springboot-login/src/main/java/com/tiesheng/login/config/TokenWebMvcConfigurer.java index 21953c2..8fa0337 100644 --- a/springboot-login/src/main/java/com/tiesheng/login/config/TokenWebMvcConfigurer.java +++ b/springboot-login/src/main/java/com/tiesheng/login/config/TokenWebMvcConfigurer.java @@ -3,7 +3,10 @@ package com.tiesheng.login.config; import cn.hutool.core.util.ObjUtil; import cn.hutool.core.util.StrUtil; import com.tiesheng.annotation.token.TokenIgnore; +import com.tiesheng.login.pojos.RequestUserInfo; +import com.tiesheng.login.service.TsLoginConfigurer; import com.tiesheng.util.config.TsTokenConfig; +import com.tiesheng.util.exception.ApiException; import com.tiesheng.util.pojos.TokenBean; import org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController; import org.springframework.context.annotation.Configuration; @@ -29,6 +32,8 @@ public class TokenWebMvcConfigurer implements WebMvcConfigurer { @Resource TsTokenConfig tsTokenConfig; + @Resource + TsLoginConfigurer tsLoginConfigurer; @Override public void addArgumentResolvers(List resolvers) { @@ -96,8 +101,14 @@ public class TokenWebMvcConfigurer implements WebMvcConfigurer { return true; } - // token验证 - tsTokenConfig.validToken(request, true); + // 验证TOKEN是否存在 + TokenBean tokenBean = tsTokenConfig.validToken(request, true); + + // 验证用户是否存在 + RequestUserInfo cachedUserInfo = tsLoginConfigurer.getCachedUserInfo(tokenBean); + if (cachedUserInfo == null) { + throw new ApiException("非法TOKEN,请重新登录"); + } return true; } diff --git a/springboot-login/src/main/java/com/tiesheng/login/controller/LoginController.java b/springboot-login/src/main/java/com/tiesheng/login/controller/LoginController.java index 5303302..e82307a 100644 --- a/springboot-login/src/main/java/com/tiesheng/login/controller/LoginController.java +++ b/springboot-login/src/main/java/com/tiesheng/login/controller/LoginController.java @@ -6,13 +6,11 @@ import cn.hutool.core.util.URLUtil; import com.alibaba.fastjson.JSON; import com.tiesheng.annotation.operation.OperationIgnore; import com.tiesheng.annotation.token.TokenIgnore; -import com.tiesheng.util.config.TsTokenConfig; -import com.tiesheng.util.pojos.TokenBean; import com.tiesheng.login.pojos.CodeExtraDTO; import com.tiesheng.login.pojos.DoLoginInfo; import com.tiesheng.login.pojos.UniqueIndexDTO; import com.tiesheng.login.pojos.WxminiLoginVo; -import com.tiesheng.login.service.TieshengLoginConfigurer; +import com.tiesheng.login.service.CorePlatformUniqueService; import com.tiesheng.platform.config.ding.PlatformDingConfig; import com.tiesheng.platform.config.ding.bean.DingJsapiSignature; import com.tiesheng.platform.config.ding.bean.DingUserInfo; @@ -23,8 +21,10 @@ import com.tiesheng.platform.config.wxmp.bean.WxConfigBean; import com.tiesheng.platform.config.wxmp.bean.WxJsapiSignature; import com.tiesheng.platform.config.wxmp.bean.WxUserInfo; import com.tiesheng.util.config.GlobalConfig; +import com.tiesheng.util.config.TsTokenConfig; import com.tiesheng.util.exception.ApiException; import com.tiesheng.util.pojos.ApiResp; +import com.tiesheng.util.pojos.TokenBean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -49,7 +49,7 @@ public class LoginController { @Autowired PlatformWxminiConfig platformWxminiConfig; @Autowired - TieshengLoginConfigurer tieshengLoginConfigurer; + CorePlatformUniqueService corePlatformUniqueService; @Autowired GlobalConfig globalConfig; @Autowired @@ -65,13 +65,13 @@ public class LoginController { @OperationIgnore public void uniqueIndex(UniqueIndexDTO dto, HttpServletResponse response) { if (tsTokenConfig.isValidLoginSign() && !dto.validSign()) { - tieshengLoginConfigurer.onSignError(response); + corePlatformUniqueService.onSignError(response); return; } - TokenBean tokenBean = tieshengLoginConfigurer.doLogin(new DoLoginInfo("web_unique_redirect", + TokenBean tokenBean = corePlatformUniqueService.login(new DoLoginInfo("web_unique_redirect", dto.getNo(), dto.getPlatform(), dto.getInfo())); - tieshengLoginConfigurer.onLoginRedirect(tokenBean, dto.getTo(), dto.getExtra(), response); + corePlatformUniqueService.redirect(tokenBean, dto.getTo(), dto.getExtra(), response); } @@ -84,7 +84,7 @@ public class LoginController { @PostMapping("/unique/index") @OperationIgnore public ApiResp uniqueIndex(@RequestBody UniqueIndexDTO dto) { - TokenBean tokenBean = tieshengLoginConfigurer.doLogin(new DoLoginInfo("web_unique_index", + TokenBean tokenBean = corePlatformUniqueService.login(new DoLoginInfo("web_unique_index", dto.getNo(), dto.getPlatform(), dto.getInfo())); if (tokenBean == null || StrUtil.isEmpty(tokenBean.getId())) { throw new ApiException("登录失败"); @@ -134,9 +134,9 @@ public class LoginController { public void dingOauth2(@PathVariable String service, CodeExtraDTO dto, HttpServletResponse response) { DingUserSimple userSimple = platformDingConfig.getUserIdByCode(service, dto.getCode()); DingUserInfo dingUserInfo = platformDingConfig.topapiV2UserGet(service, userSimple.getUserid()); - TokenBean tokenBean = tieshengLoginConfigurer.doLogin(new DoLoginInfo(dingUserInfo.getAppId(), + TokenBean tokenBean = corePlatformUniqueService.login(new DoLoginInfo(dingUserInfo.getAppId(), dingUserInfo.getUserid(), "ding", JSON.toJSONString(dingUserInfo))); - tieshengLoginConfigurer.onLoginRedirect(tokenBean, dto.getTo(), dto.getExtra(), response); + corePlatformUniqueService.redirect(tokenBean, dto.getTo(), dto.getExtra(), response); } @@ -182,9 +182,9 @@ public class LoginController { @OperationIgnore public void wxmpOauth2(@PathVariable String service, CodeExtraDTO dto, HttpServletResponse response) { WxUserInfo wxUserInfo = platformWxmpConfig.getOAuth2AccessToken(service, dto.getCode()); - TokenBean tokenBean = tieshengLoginConfigurer.doLogin(new DoLoginInfo(wxUserInfo.getAppId(), + TokenBean tokenBean = corePlatformUniqueService.login(new DoLoginInfo(wxUserInfo.getAppId(), wxUserInfo.getOpenid(), "wxmp", JSON.toJSONString(wxUserInfo))); - tieshengLoginConfigurer.onLoginRedirect(tokenBean, dto.getTo(), dto.getExtra(), response); + corePlatformUniqueService.redirect(tokenBean, dto.getTo(), dto.getExtra(), response); } @@ -214,7 +214,7 @@ public class LoginController { public ApiResp wxminiIndex(@PathVariable String service, String code) { String openid = platformWxminiConfig.jscode2session(service, code); WxConfigBean configBean = platformWxminiConfig.getConfigBean(service); - TokenBean tokenBean = tieshengLoginConfigurer.doLogin(new DoLoginInfo(configBean.getAppId(), + TokenBean tokenBean = corePlatformUniqueService.login(new DoLoginInfo(configBean.getAppId(), openid, "wxmini", "{}")); WxminiLoginVo loginVo = new WxminiLoginVo(); diff --git a/springboot-web/src/main/java/com/tiesheng/web/mapper/CoreLogLoginMapper.java b/springboot-login/src/main/java/com/tiesheng/login/mapper/CoreLogLoginMapper.java similarity index 60% rename from springboot-web/src/main/java/com/tiesheng/web/mapper/CoreLogLoginMapper.java rename to springboot-login/src/main/java/com/tiesheng/login/mapper/CoreLogLoginMapper.java index 0660f08..b6790b2 100644 --- a/springboot-web/src/main/java/com/tiesheng/web/mapper/CoreLogLoginMapper.java +++ b/springboot-login/src/main/java/com/tiesheng/login/mapper/CoreLogLoginMapper.java @@ -1,7 +1,7 @@ -package com.tiesheng.web.mapper; +package com.tiesheng.login.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.tiesheng.web.pojos.dao.CoreLogLogin; +import com.tiesheng.login.pojos.dao.CoreLogLogin; public interface CoreLogLoginMapper extends BaseMapper { } diff --git a/springboot-web/src/main/java/com/tiesheng/web/mapper/CorePlatformUniqueMapper.java b/springboot-login/src/main/java/com/tiesheng/login/mapper/CorePlatformUniqueMapper.java similarity index 61% rename from springboot-web/src/main/java/com/tiesheng/web/mapper/CorePlatformUniqueMapper.java rename to springboot-login/src/main/java/com/tiesheng/login/mapper/CorePlatformUniqueMapper.java index e0f36d8..c22ed97 100644 --- a/springboot-web/src/main/java/com/tiesheng/web/mapper/CorePlatformUniqueMapper.java +++ b/springboot-login/src/main/java/com/tiesheng/login/mapper/CorePlatformUniqueMapper.java @@ -1,7 +1,7 @@ -package com.tiesheng.web.mapper; +package com.tiesheng.login.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.tiesheng.web.pojos.dao.CorePlatformUnique; +import com.tiesheng.login.pojos.dao.CorePlatformUnique; public interface CorePlatformUniqueMapper extends BaseMapper { } diff --git a/springboot-web/src/main/java/com/tiesheng/web/pojos/RequestUserInfo.java b/springboot-login/src/main/java/com/tiesheng/login/pojos/RequestUserInfo.java similarity index 95% rename from springboot-web/src/main/java/com/tiesheng/web/pojos/RequestUserInfo.java rename to springboot-login/src/main/java/com/tiesheng/login/pojos/RequestUserInfo.java index ed3ea9d..7bdacff 100644 --- a/springboot-web/src/main/java/com/tiesheng/web/pojos/RequestUserInfo.java +++ b/springboot-login/src/main/java/com/tiesheng/login/pojos/RequestUserInfo.java @@ -1,4 +1,4 @@ -package com.tiesheng.web.pojos; +package com.tiesheng.login.pojos; /** * 当前token的数据 diff --git a/springboot-web/src/main/java/com/tiesheng/web/pojos/dao/CoreLogLogin.java b/springboot-login/src/main/java/com/tiesheng/login/pojos/dao/CoreLogLogin.java similarity index 98% rename from springboot-web/src/main/java/com/tiesheng/web/pojos/dao/CoreLogLogin.java rename to springboot-login/src/main/java/com/tiesheng/login/pojos/dao/CoreLogLogin.java index 0468132..729c0f1 100644 --- a/springboot-web/src/main/java/com/tiesheng/web/pojos/dao/CoreLogLogin.java +++ b/springboot-login/src/main/java/com/tiesheng/login/pojos/dao/CoreLogLogin.java @@ -1,4 +1,4 @@ -package com.tiesheng.web.pojos.dao; +package com.tiesheng.login.pojos.dao; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; diff --git a/springboot-web/src/main/java/com/tiesheng/web/pojos/dao/CorePlatformUnique.java b/springboot-login/src/main/java/com/tiesheng/login/pojos/dao/CorePlatformUnique.java similarity index 98% rename from springboot-web/src/main/java/com/tiesheng/web/pojos/dao/CorePlatformUnique.java rename to springboot-login/src/main/java/com/tiesheng/login/pojos/dao/CorePlatformUnique.java index 4d81540..ab53ce8 100644 --- a/springboot-web/src/main/java/com/tiesheng/web/pojos/dao/CorePlatformUnique.java +++ b/springboot-login/src/main/java/com/tiesheng/login/pojos/dao/CorePlatformUnique.java @@ -1,4 +1,4 @@ -package com.tiesheng.web.pojos.dao; +package com.tiesheng.login.pojos.dao; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; diff --git a/springboot-login/src/main/java/com/tiesheng/login/service/CorePlatformUniqueService.java b/springboot-login/src/main/java/com/tiesheng/login/service/CorePlatformUniqueService.java new file mode 100644 index 0000000..d292f17 --- /dev/null +++ b/springboot-login/src/main/java/com/tiesheng/login/service/CorePlatformUniqueService.java @@ -0,0 +1,113 @@ +package com.tiesheng.login.service; + +import cn.hutool.core.util.StrUtil; +import cn.hutool.extra.servlet.ServletUtil; +import com.tiesheng.login.mapper.CoreLogLoginMapper; +import com.tiesheng.login.mapper.CorePlatformUniqueMapper; +import com.tiesheng.login.pojos.DoLoginInfo; +import com.tiesheng.login.pojos.RequestUserInfo; +import com.tiesheng.login.pojos.dao.CoreLogLogin; +import com.tiesheng.login.pojos.dao.CorePlatformUnique; +import com.tiesheng.util.ServletKit; +import com.tiesheng.util.config.Ip2regionConfig; +import com.tiesheng.util.pojos.TokenBean; +import com.tiesheng.util.service.TsServiceBase; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.Objects; + +/** + * @author hao + */ +@Service +public class CorePlatformUniqueService extends TsServiceBase { + + @Resource + CoreLogLoginMapper coreLogLoginMapper; + @Resource + Ip2regionConfig ip2regionConfig; + @Resource + TsLoginConfigurer tsLoginConfigurer; + + + @Transactional(rollbackFor = Exception.class) + public TokenBean login(DoLoginInfo loginInfo) { + + CorePlatformUnique platformUnique = getOneByColumn("unique_id", loginInfo.getUnique()); + if (platformUnique == null) { + platformUnique = new CorePlatformUnique(); + platformUnique.setAppId(loginInfo.getAppId()); + platformUnique.setUniqueId(loginInfo.getUnique()); + } + platformUnique.setPlatform(loginInfo.getPlatform()); + platformUnique.setInfo(loginInfo.getInfo()); + saveOrUpdate(platformUnique); + + String oldUserId = platformUnique.getUserId(); + TokenBean tokenBean = tsLoginConfigurer.login(platformUnique); + if (tokenBean != null) { + + // 添加登录日志 + addLoginLog(platformUnique, tokenBean); + + // 更新唯一值 + if (!StrUtil.isEmpty(tokenBean.getId()) && + !Objects.equals(oldUserId, tokenBean.getId())) { + platformUnique.setUserId(tokenBean.getId()); + saveOrUpdate(platformUnique); + } + } + + return tokenBean; + } + + + /** + * 授权登录回调 + * + * @param bean + */ + public void redirect(TokenBean bean, String to, String extra, HttpServletResponse response) { + tsLoginConfigurer.redirect(bean, to, extra, response); + } + + + /** + * 签名错误的时候 + */ + public void onSignError(HttpServletResponse response) { + tsLoginConfigurer.onSignError(response); + } + + /////////////////////////////////////////////////////////////////////////// + // 登录日志 + /////////////////////////////////////////////////////////////////////////// + + /** + * 添加登录日志 + * + * @param platformUnique + * @param tokenBean + */ + public void addLoginLog(CorePlatformUnique platformUnique, TokenBean tokenBean) { + + HttpServletRequest request = ServletKit.getRequest(); + String ip = ServletUtil.getClientIP(request); + + CoreLogLogin login = new CoreLogLogin(); + login.setUserId(tokenBean.getId()); + login.setPlatform(platformUnique.getPlatform()); + + RequestUserInfo requestUserInfo = tsLoginConfigurer.getCachedUserInfo(tokenBean); + login.setUserName(requestUserInfo.getName()); + + login.setIp(ip); + login.setAddress(ip2regionConfig.search(login.getIp())); + coreLogLoginMapper.insert(login); + } + +} diff --git a/springboot-login/src/main/java/com/tiesheng/login/service/TieshengLoginConfigurer.java b/springboot-login/src/main/java/com/tiesheng/login/service/TieshengLoginConfigurer.java deleted file mode 100644 index d83233e..0000000 --- a/springboot-login/src/main/java/com/tiesheng/login/service/TieshengLoginConfigurer.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.tiesheng.login.service; - -import com.tiesheng.util.pojos.TokenBean; -import com.tiesheng.login.pojos.DoLoginInfo; -import org.springframework.context.annotation.Configuration; - -import javax.servlet.http.HttpServletResponse; - -/** - * @author hao - */ -@Configuration -public interface TieshengLoginConfigurer { - - /** - * 执行登录 - * - * @return - */ - TokenBean doLogin(DoLoginInfo loginInfo); - - - /** - * 授权登录回调 - * - * @param bean - */ - void onLoginRedirect(TokenBean bean, String to, String extra, HttpServletResponse response); - - - /** - * 签名错误的时候 - */ - void onSignError(HttpServletResponse response); - -} diff --git a/springboot-login/src/main/java/com/tiesheng/login/service/TsLoginConfigurer.java b/springboot-login/src/main/java/com/tiesheng/login/service/TsLoginConfigurer.java new file mode 100644 index 0000000..bf1fe84 --- /dev/null +++ b/springboot-login/src/main/java/com/tiesheng/login/service/TsLoginConfigurer.java @@ -0,0 +1,69 @@ +package com.tiesheng.login.service; + +import cn.hutool.core.util.StrUtil; +import cn.hutool.extra.servlet.ServletUtil; +import com.tiesheng.login.pojos.RequestUserInfo; +import com.tiesheng.login.pojos.dao.CorePlatformUnique; +import com.tiesheng.util.config.TsTokenConfig; +import com.tiesheng.util.pojos.TokenBean; +import com.tiesheng.util.service.TsCacheService; +import org.springframework.context.annotation.Configuration; + +import javax.servlet.http.HttpServletResponse; + +/** + * @author hao + */ +@Configuration +public interface TsLoginConfigurer { + + /** + * 执行登录 + * + * @return + */ + TokenBean login(CorePlatformUnique platformUnique); + + + /** + * 授权登录回调 + * + * @param bean + */ + void redirect(TokenBean bean, String to, String extra, HttpServletResponse response); + + + /** + * 签名错误的时候 + */ + default void onSignError(HttpServletResponse response) { + ServletUtil.write(response, "404", "text"); + } + + + /** + * 获取当前用户的信息 + * + * @param tokenBean + * @return + */ + default RequestUserInfo getCachedUserInfo(TokenBean tokenBean) { + String key = StrUtil.format(TsTokenConfig.CACHE_REQUEST_LOGIN_KEY, tokenBean.getId()); + RequestUserInfo obj = TsCacheService.of().getObj(key, RequestUserInfo.class, -1); + if (obj == null) { + obj = getCurrentUserName(tokenBean); + } + if (obj != null) { + TsCacheService.of().putObj(key, obj, 30 * 60); + } + return obj; + } + + /** + * 获取当前用户的姓名 + * + * @return + */ + RequestUserInfo getCurrentUserName(TokenBean userId); + +} diff --git a/springboot-login/src/main/java/com/tiesheng/login/service/impl/DefaultLoginConfigurer.java b/springboot-login/src/main/java/com/tiesheng/login/service/impl/DefaultLoginConfigurer.java deleted file mode 100644 index 3703beb..0000000 --- a/springboot-login/src/main/java/com/tiesheng/login/service/impl/DefaultLoginConfigurer.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.tiesheng.login.service.impl; - -import com.tiesheng.util.pojos.TokenBean; -import com.tiesheng.login.pojos.DoLoginInfo; -import com.tiesheng.login.service.TieshengLoginConfigurer; -import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; -import org.springframework.context.annotation.Configuration; - -import javax.servlet.http.HttpServletResponse; - -/** - * @author hao - */ -@Configuration -@ConditionalOnMissingBean(value = TieshengLoginConfigurer.class, ignored = DefaultLoginConfigurer.class) -public class DefaultLoginConfigurer implements TieshengLoginConfigurer { - - @Override - public TokenBean doLogin(DoLoginInfo loginInfo) { - return null; - } - - @Override - public void onLoginRedirect(TokenBean bean, String to, String extra, HttpServletResponse response) { - - } - - @Override - public void onSignError(HttpServletResponse response) { - - } -} diff --git a/springboot-web/src/main/resources/db/migration/core_platform_unique.sql b/springboot-login/src/main/resources/db/migration/core_login_init.sql similarity index 51% rename from springboot-web/src/main/resources/db/migration/core_platform_unique.sql rename to springboot-login/src/main/resources/db/migration/core_login_init.sql index b517b02..dde9f5e 100644 --- a/springboot-web/src/main/resources/db/migration/core_platform_unique.sql +++ b/springboot-login/src/main/resources/db/migration/core_login_init.sql @@ -1,6 +1,24 @@ SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; +-- ---------------------------- +-- Table structure for core_log_login +-- ---------------------------- +CREATE TABLE `core_log_login` +( + `id` varchar(50) NOT NULL, + `create_time` datetime NOT NULL, + `update_time` datetime NOT NULL, + `is_deleted` int(6) NOT NULL DEFAULT '0', + `user_id` varchar(50) DEFAULT NULL COMMENT '用户id', + `user_name` varchar(255) DEFAULT NULL COMMENT '用户姓名', + `platform` varchar(50) DEFAULT NULL COMMENT '登录方式', + `ip` varchar(100) DEFAULT NULL COMMENT 'ip', + `address` varchar(255) DEFAULT NULL COMMENT 'ip地址', + PRIMARY KEY (`id`) +) ENGINE = InnoDB + DEFAULT CHARSET = utf8mb4 COMMENT ='日志-登录'; + -- ---------------------------- -- Table structure for core_platform_unique -- ---------------------------- diff --git a/springboot-web/src/main/resources/mapper/CoreLogLoginMapper.xml b/springboot-login/src/main/resources/mapper/CoreLogLoginMapper.xml similarity index 87% rename from springboot-web/src/main/resources/mapper/CoreLogLoginMapper.xml rename to springboot-login/src/main/resources/mapper/CoreLogLoginMapper.xml index 42d2359..2f91dca 100644 --- a/springboot-web/src/main/resources/mapper/CoreLogLoginMapper.xml +++ b/springboot-login/src/main/resources/mapper/CoreLogLoginMapper.xml @@ -1,7 +1,7 @@ - - + + diff --git a/springboot-web/src/main/resources/mapper/CorePlatformUniqueMapper.xml b/springboot-login/src/main/resources/mapper/CorePlatformUniqueMapper.xml similarity index 86% rename from springboot-web/src/main/resources/mapper/CorePlatformUniqueMapper.xml rename to springboot-login/src/main/resources/mapper/CorePlatformUniqueMapper.xml index 6c5d205..00d96cf 100644 --- a/springboot-web/src/main/resources/mapper/CorePlatformUniqueMapper.xml +++ b/springboot-login/src/main/resources/mapper/CorePlatformUniqueMapper.xml @@ -1,7 +1,7 @@ - - + + diff --git a/springboot-platform/src/main/java/com/tiesheng/platform/config/ding/PlatformDingConfig.java b/springboot-platform/src/main/java/com/tiesheng/platform/config/ding/PlatformDingConfig.java index 2e3a1a5..f5d37b6 100644 --- a/springboot-platform/src/main/java/com/tiesheng/platform/config/ding/PlatformDingConfig.java +++ b/springboot-platform/src/main/java/com/tiesheng/platform/config/ding/PlatformDingConfig.java @@ -104,7 +104,7 @@ public class PlatformDingConfig { * @return accessToken * @see */ - public String getAccessToken(String service) { + public synchronized String getAccessToken(String service) { DingConfigBean dingConfigBean = getConfigBean(service); String accessToken = TsCacheService.of().get(CACHE_ACCESS_TOKEN + dingConfigBean.getAppKey(), -1); if (!StrUtil.isEmpty(accessToken)) { diff --git a/springboot-util/src/main/java/com/tiesheng/util/config/TsTokenConfig.java b/springboot-util/src/main/java/com/tiesheng/util/config/TsTokenConfig.java index 8d10d4a..bbd0806 100644 --- a/springboot-util/src/main/java/com/tiesheng/util/config/TsTokenConfig.java +++ b/springboot-util/src/main/java/com/tiesheng/util/config/TsTokenConfig.java @@ -23,6 +23,12 @@ import java.util.Map; @ConfigurationProperties("tiesheng.token") public class TsTokenConfig { + /** + * 用户登录的KEY + */ + public static String CACHE_REQUEST_LOGIN_KEY = "request:login:{}"; + + /** * token常量 */ @@ -79,7 +85,7 @@ public class TsTokenConfig { } catch (Exception ignored) { } - if (tokenBean == null && thrExp) { + if ((tokenBean == null || StrUtil.isEmpty(tokenBean.getId())) && thrExp) { throw new ApiException(StrUtil.isEmpty(token) ? 110 : 112, StrUtil.isEmpty(token) ? "请先登录" : "登录过期,请重新登陆"); } diff --git a/springboot-util/src/main/java/com/tiesheng/util/service/TsCacheService.java b/springboot-util/src/main/java/com/tiesheng/util/service/TsCacheService.java index 80b3179..db15153 100644 --- a/springboot-util/src/main/java/com/tiesheng/util/service/TsCacheService.java +++ b/springboot-util/src/main/java/com/tiesheng/util/service/TsCacheService.java @@ -45,6 +45,16 @@ public class TsCacheService { return tsCacheHandler.get(key, seconds); } + + /** + * 获取一个缓存对象 + * + * @param key + * @param tClass + * @param seconds =0时获取数据后会删除缓存,<0时不改变原有缓存时间 + * @param + * @return + */ public T getObj(String key, Class tClass, long seconds) { return JSONUtil.toBean(get(key, seconds), tClass, true); } diff --git a/springboot-web/src/main/java/com/tiesheng/web/EnableTieshengWeb.java b/springboot-web/src/main/java/com/tiesheng/web/EnableTieshengWeb.java index 7d89aa6..df06cc2 100644 --- a/springboot-web/src/main/java/com/tiesheng/web/EnableTieshengWeb.java +++ b/springboot-web/src/main/java/com/tiesheng/web/EnableTieshengWeb.java @@ -2,8 +2,8 @@ package com.tiesheng.web; import com.tiesheng.database.DatabaseAutoConfigurer; import com.tiesheng.encrypt.EncryptAutoConfigurer; -import com.tiesheng.login.LoginAutoConfigurer; import com.tiesheng.message.MessageAutoConfigurer; +import com.tiesheng.platform.PlatformAutoConfigurer; import com.tiesheng.util.UtilAutoConfigurer; import com.tiesheng.web.service.TieshengWebConfigurer; import org.springframework.context.annotation.Import; @@ -20,9 +20,9 @@ import java.lang.annotation.*; UtilAutoConfigurer.class, MessageAutoConfigurer.class, WebAutoConfigurer.class, - LoginAutoConfigurer.class, DatabaseAutoConfigurer.class, EncryptAutoConfigurer.class, + PlatformAutoConfigurer.class, }) public @interface EnableTieshengWeb { diff --git a/springboot-web/src/main/java/com/tiesheng/web/WebAutoConfigurer.java b/springboot-web/src/main/java/com/tiesheng/web/WebAutoConfigurer.java index c79fb24..47f0efe 100644 --- a/springboot-web/src/main/java/com/tiesheng/web/WebAutoConfigurer.java +++ b/springboot-web/src/main/java/com/tiesheng/web/WebAutoConfigurer.java @@ -10,7 +10,8 @@ import org.springframework.context.annotation.ComponentScan; @ComponentScan({ "com.tiesheng.web.**.*", "com.tiesheng.role.**.*", + "com.tiesheng.login.**.*", }) -@MapperScan(value = {"com.tiesheng.web.mapper", "com.tiesheng.role.mapper"}) +@MapperScan(value = {"com.tiesheng.web.mapper", "com.tiesheng.role.mapper", "com.tiesheng.login.mapper"}) public class WebAutoConfigurer { } diff --git a/springboot-web/src/main/java/com/tiesheng/web/controller/LogController.java b/springboot-web/src/main/java/com/tiesheng/web/controller/LogController.java index d8bffe7..d04882d 100644 --- a/springboot-web/src/main/java/com/tiesheng/web/controller/LogController.java +++ b/springboot-web/src/main/java/com/tiesheng/web/controller/LogController.java @@ -6,7 +6,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.tiesheng.util.pojos.ApiResp; import com.tiesheng.util.pojos.PageDTO; import com.tiesheng.web.pojos.dao.CoreLogApi; -import com.tiesheng.web.pojos.dao.CoreLogLogin; +import com.tiesheng.login.pojos.dao.CoreLogLogin; import com.tiesheng.web.pojos.dao.CoreLogOperation; import com.tiesheng.web.pojos.dao.CoreLogProcess; import com.tiesheng.web.pojos.vo.ProcessDetailVo; diff --git a/springboot-web/src/main/java/com/tiesheng/web/service/CoreLogService.java b/springboot-web/src/main/java/com/tiesheng/web/service/CoreLogService.java index b759e4f..41c331e 100644 --- a/springboot-web/src/main/java/com/tiesheng/web/service/CoreLogService.java +++ b/springboot-web/src/main/java/com/tiesheng/web/service/CoreLogService.java @@ -5,30 +5,24 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.util.StrUtil; -import cn.hutool.extra.servlet.ServletUtil; import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.tiesheng.util.ServletKit; -import com.tiesheng.util.config.Ip2regionConfig; +import com.tiesheng.login.mapper.CoreLogLoginMapper; +import com.tiesheng.login.pojos.RequestUserInfo; import com.tiesheng.util.exception.ApiException; import com.tiesheng.util.pojos.TokenBean; import com.tiesheng.util.service.TsServiceBase; import com.tiesheng.web.mapper.CoreLogApiMapper; -import com.tiesheng.web.mapper.CoreLogLoginMapper; import com.tiesheng.web.mapper.CoreLogOperationMapper; import com.tiesheng.web.mapper.CoreLogProcessMapper; -import com.tiesheng.web.pojos.RequestUserInfo; -import com.tiesheng.web.pojos.dao.CoreLogLogin; import com.tiesheng.web.pojos.dao.CoreLogOperation; import com.tiesheng.web.pojos.dao.CoreLogProcess; -import com.tiesheng.web.pojos.dao.CorePlatformUnique; import com.tiesheng.web.pojos.vo.ProcessDetailVo; import com.tiesheng.web.util.ProcessImportConsumer; import com.tiesheng.web.util.ProcessSyncConsumer; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import javax.servlet.http.HttpServletRequest; import java.util.ArrayList; import java.util.List; @@ -50,8 +44,6 @@ public class CoreLogService extends TsServiceBase implements TieshengLoginConfigurer { - - @Autowired - TieshengWebConfigurer tieshengWebConfigurer; - @Autowired - CoreLogService coreLogService; - - @Override - @Transactional(rollbackFor = Exception.class) - public TokenBean doLogin(DoLoginInfo loginInfo) { - - CorePlatformUnique platformUnique = getOneByColumn("unique_id", loginInfo.getUnique()); - if (platformUnique == null) { - platformUnique = new CorePlatformUnique(); - platformUnique.setAppId(loginInfo.getAppId()); - platformUnique.setUniqueId(loginInfo.getUnique()); - } - platformUnique.setPlatform(loginInfo.getPlatform()); - platformUnique.setInfo(loginInfo.getInfo()); - saveOrUpdate(platformUnique); - - String oldUserId = platformUnique.getUserId(); - TokenBean tokenBean = tieshengWebConfigurer.login(platformUnique); - if (tokenBean != null) { - - // 添加登录日志 - coreLogService.addLoginLog(platformUnique, tokenBean); - - // 更新唯一值 - if (!StrUtil.isEmpty(tokenBean.getId()) && - !Objects.equals(oldUserId, tokenBean.getId())) { - platformUnique.setUserId(tokenBean.getId()); - saveOrUpdate(platformUnique); - } - } - - - return tokenBean; - } - - @Override - public void onLoginRedirect(TokenBean bean, String to, String extra, HttpServletResponse response) { - tieshengWebConfigurer.redirect(bean, to, extra, response); - } - - @Override - public void onSignError(HttpServletResponse response) { - tieshengWebConfigurer.onSignError(response); - } - - -} diff --git a/springboot-web/src/main/java/com/tiesheng/web/service/TieshengWebConfigurer.java b/springboot-web/src/main/java/com/tiesheng/web/service/TieshengWebConfigurer.java index 7e8b82f..5060337 100644 --- a/springboot-web/src/main/java/com/tiesheng/web/service/TieshengWebConfigurer.java +++ b/springboot-web/src/main/java/com/tiesheng/web/service/TieshengWebConfigurer.java @@ -1,33 +1,19 @@ package com.tiesheng.web.service; import cn.hutool.log.LogFactory; -import com.tiesheng.web.pojos.RequestUserInfo; -import com.tiesheng.web.pojos.dao.CoreConfigSystem; -import com.tiesheng.web.pojos.dao.CorePlatformUnique; -import com.tiesheng.util.pojos.TokenBean; -import com.tiesheng.util.ServletKit; +import com.tiesheng.login.service.TsLoginConfigurer; import com.tiesheng.util.exception.ApiRespEnum; import com.tiesheng.util.pojos.ApiResp; +import com.tiesheng.web.pojos.dao.CoreConfigSystem; import org.springframework.web.multipart.MultipartFile; -import javax.servlet.http.HttpServletResponse; - /** - * WEB配置 + * 核心配置 * * @author hao */ public interface TieshengWebConfigurer { - - /** - * 获取当前用户的姓名 - * - * @return - */ - RequestUserInfo getCurrentUserName(TokenBean userId); - - /** * 添加其他异常处理 * @@ -75,28 +61,16 @@ public interface TieshengWebConfigurer { default void configSystemCheck(CoreConfigSystem configSystem) { } - /** - * 登录逻辑 - * - * @param platformUnique - * @return - */ - TokenBean login(CorePlatformUnique platformUnique); + /////////////////////////////////////////////////////////////////////////// + // 登录配置 + /////////////////////////////////////////////////////////////////////////// /** - * 登录重定向 + * 登录配置 * - * @param bean - * @param extra - * @param response + * @return */ - void redirect(TokenBean bean, String to, String extra, HttpServletResponse response); + TsLoginConfigurer configureLogin(); - /** - * 签名错误的时候 - */ - default void onSignError(HttpServletResponse response) { - ServletKit.write(response, "404", "text"); - } } diff --git a/springboot-web/src/main/resources/db/migration/tiesheng_init_log.sql b/springboot-web/src/main/resources/db/migration/tiesheng_init_log.sql index 38d864c..08c988f 100644 --- a/springboot-web/src/main/resources/db/migration/tiesheng_init_log.sql +++ b/springboot-web/src/main/resources/db/migration/tiesheng_init_log.sql @@ -2,25 +2,7 @@ SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- --- Table structure for core_log_login --- ---------------------------- -CREATE TABLE `core_log_login` -( - `id` varchar(50) NOT NULL, - `create_time` datetime NOT NULL, - `update_time` datetime NOT NULL, - `is_deleted` int(6) NOT NULL DEFAULT '0', - `user_id` varchar(50) DEFAULT NULL COMMENT '用户id', - `user_name` varchar(255) DEFAULT NULL COMMENT '用户姓名', - `platform` varchar(50) DEFAULT NULL COMMENT '登录方式', - `ip` varchar(100) DEFAULT NULL COMMENT 'ip', - `address` varchar(255) DEFAULT NULL COMMENT 'ip地址', - PRIMARY KEY (`id`) -) ENGINE = InnoDB - DEFAULT CHARSET = utf8mb4 COMMENT ='日志-登录'; - --- ---------------------------- --- Table structure for core_log_message +-- Table structure for core_log_api -- ---------------------------- CREATE TABLE `core_log_api` (