From 3fb6ce2c0ee737d20af5a0d157694e6d971929fe Mon Sep 17 00:00:00 2001 From: lvzk <897706680@qq.com> Date: Thu, 7 Dec 2023 19:18:54 +0800 Subject: [PATCH 1/6] =?UTF-8?q?[=E5=8A=9F=E8=83=BD]=E8=A7=92=E8=89=B2?= =?UTF-8?q?=E7=AE=A1=E7=90=86-=E8=A7=92=E8=89=B2=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E5=8A=A8=E6=80=81=E5=8C=B9=E9=85=8D=E7=94=9F=E6=95=88=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=20#[1014988100042752]=E8=A7=92=E8=89=B2=E7=AE=A1?= =?UTF-8?q?=E7=90=86-=E8=A7=92=E8=89=B2=E5=A2=9E=E5=8A=A0=E5=8A=A8?= =?UTF-8?q?=E6=80=81=E5=8C=B9=E9=85=8D=E7=94=9F=E6=95=88=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=20http://192.168.0.96:8090/demo/rdm.html#/story-detail/9390509?= =?UTF-8?q?47543040/939050947543042/1014988100042752?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../threadlocal/UserContext.java | 15 +++- .../framework/dao/cache/UserSessionCache.java | 62 +++++++------- .../framework/dao/mapper/RoleMapper.java | 8 +- .../framework/dao/mapper/RoleMapper.xml | 80 +++++++++++++------ .../dao/mapper/UserSessionMapper.java | 8 +- .../dao/mapper/UserSessionMapper.xml | 18 ++--- .../java/neatlogic/framework/dto/JwtVo.java | 67 +++++++++++++++- .../java/neatlogic/framework/dto/RoleVo.java | 11 +++ .../java/neatlogic/framework/dto/UserVo.java | 12 +++ .../filter/JsonWebTokenValidFilter.java | 10 +-- .../filter/core/LoginAuthHandlerBase.java | 42 +++------- .../service/AuthenticationInfoService.java | 26 +++++- .../AuthenticationInfoServiceImpl.java | 76 +++++++++++------- .../handler/DefaultLoginAuthHandler.java | 2 + .../login/handler/LoginController.java | 10 +-- 15 files changed, 295 insertions(+), 152 deletions(-) diff --git a/src/main/java/neatlogic/framework/asynchronization/threadlocal/UserContext.java b/src/main/java/neatlogic/framework/asynchronization/threadlocal/UserContext.java index b104140ac..5f42cd8fc 100644 --- a/src/main/java/neatlogic/framework/asynchronization/threadlocal/UserContext.java +++ b/src/main/java/neatlogic/framework/asynchronization/threadlocal/UserContext.java @@ -50,6 +50,8 @@ public class UserContext implements Serializable { //是否超级管理员 private Boolean isSuperAdmin = false; + private String tokenHash; + public static UserContext init(UserContext _userContext) { UserContext context = new UserContext(); if (_userContext != null) { @@ -102,6 +104,9 @@ public class UserContext implements Serializable { context.setResponse(response); context.setTimezone(timezone); context.setAuthenticationInfoVo(authenticationInfoVo); + if(userVo.getJwtVo() != null) { + context.setTokenHash(userVo.getJwtVo().getTokenHash()); + } instance.set(context); return context; } @@ -259,8 +264,16 @@ public class UserContext implements Serializable { } public void setIsSuperAdmin(Boolean isSuperAdmin) { - if(isSuperAdmin != null) { + if (isSuperAdmin != null) { this.isSuperAdmin = isSuperAdmin; } } + + public String getTokenHash() { + return tokenHash; + } + + public void setTokenHash(String tokenHash) { + this.tokenHash = tokenHash; + } } diff --git a/src/main/java/neatlogic/framework/dao/cache/UserSessionCache.java b/src/main/java/neatlogic/framework/dao/cache/UserSessionCache.java index 00411f4f3..10461fd18 100644 --- a/src/main/java/neatlogic/framework/dao/cache/UserSessionCache.java +++ b/src/main/java/neatlogic/framework/dao/cache/UserSessionCache.java @@ -7,39 +7,39 @@ import net.sf.ehcache.config.CacheConfiguration; import net.sf.ehcache.config.Configuration; public class UserSessionCache { - private static CacheManager CACHE_MANAGER; + private static CacheManager CACHE_MANAGER; - private synchronized static Ehcache getCache() { - if (CACHE_MANAGER == null) { - CacheConfiguration cacheConfiguration = new CacheConfiguration(); - cacheConfiguration.setName("UserSessionCache"); - cacheConfiguration.setMemoryStoreEvictionPolicy("LRU"); - cacheConfiguration.setMaxEntriesLocalHeap(1000); - cacheConfiguration.internalSetTimeToIdle(300); - cacheConfiguration.internalSetTimeToLive(600); - Configuration config = new Configuration(); - config.addCache(cacheConfiguration); - CACHE_MANAGER = CacheManager.newInstance(config); - } - if (!CACHE_MANAGER.cacheExists("UserSessionCache")) { - CACHE_MANAGER.addCache("UserSessionCache"); - } - return CACHE_MANAGER.getEhcache("UserSessionCache"); - } + private synchronized static Ehcache getCache() { + if (CACHE_MANAGER == null) { + CacheConfiguration cacheConfiguration = new CacheConfiguration(); + cacheConfiguration.setName("UserSessionCache"); + cacheConfiguration.setMemoryStoreEvictionPolicy("LRU"); + cacheConfiguration.setMaxEntriesLocalHeap(1000); + cacheConfiguration.internalSetTimeToIdle(300); + cacheConfiguration.internalSetTimeToLive(600); + Configuration config = new Configuration(); + config.addCache(cacheConfiguration); + CACHE_MANAGER = CacheManager.newInstance(config); + } + if (!CACHE_MANAGER.cacheExists("UserSessionCache")) { + CACHE_MANAGER.addCache("UserSessionCache"); + } + return CACHE_MANAGER.getEhcache("UserSessionCache"); + } - public static void addItem(String tenant, String userUuid, Object item) { - getCache().put(new Element(tenant + ":" + userUuid, item)); - } + public static void addItem(String key, Object item) { + getCache().put(new Element(key, item)); + } - public static Object getItem(String tenant, String userUuid) { - Element cachedElement = getCache().get(tenant + ":" + userUuid); - if (cachedElement == null) { - return null; - } - return cachedElement.getObjectValue(); - } + public static Object getItem(String key) { + Element cachedElement = getCache().get(key); + if (cachedElement == null) { + return null; + } + return cachedElement.getObjectValue(); + } - public static boolean removeItem(String tenant, String userUuid){ - return getCache().remove(tenant + ":" + userUuid); - } + public static void removeItem(String key) { + getCache().remove(key); + } } diff --git a/src/main/java/neatlogic/framework/dao/mapper/RoleMapper.java b/src/main/java/neatlogic/framework/dao/mapper/RoleMapper.java index d694615b6..a6d67d952 100644 --- a/src/main/java/neatlogic/framework/dao/mapper/RoleMapper.java +++ b/src/main/java/neatlogic/framework/dao/mapper/RoleMapper.java @@ -35,6 +35,8 @@ public interface RoleMapper { List getRoleUuidListByUserUuid(String userUuid); + List getRoleUuidListByUserUuidAndEnv(@Param("userUuid") String userUuid, @Param("env") String env); + List searchRoleForSelect(RoleVo roleVo); List searchRoleAuthByRoleUuid(String roleUuid); @@ -69,9 +71,11 @@ public interface RoleMapper { List getRoleTeamListByRoleUuidList(@Param("list") List roleList); - List getRoleUserListByRoleUuidList(@Param("list")List roleList); + List getRoleUserListByRoleUuidList(@Param("list") List roleList); + + List getRoleUuidListByTeamUuidListAndEnv(@Param("teamUuidList") List teamUuidList, @Param("env") String env); - List getRoleUuidListByTeamUuidListAndCheckedChildren(@Param("teamUuidList") List teamUuidList, @Param("checkedChildren") Integer checkedChildren); + List getRoleUuidListByTeamUuidListAndCheckedChildrenAndEnv(@Param("teamUuidList") List teamUuidList, @Param("checkedChildren") Integer checkedChildren, @Param("env") String env); /** * 根据team的uuid获取当前组的roleList diff --git a/src/main/java/neatlogic/framework/dao/mapper/RoleMapper.xml b/src/main/java/neatlogic/framework/dao/mapper/RoleMapper.xml index 7671472bf..68b1f8e3e 100644 --- a/src/main/java/neatlogic/framework/dao/mapper/RoleMapper.xml +++ b/src/main/java/neatlogic/framework/dao/mapper/RoleMapper.xml @@ -48,7 +48,7 @@ limitations under the License. a.`description` FROM `role` a LEFT JOIN `role_authority` c ON a.`uuid` = c.`role_uuid` - + AND (name LIKE CONCAT('%',#{keyword}, '%') OR description LIKE CONCAT('%',#{keyword}, '%')) @@ -58,13 +58,13 @@ limitations under the License. AND c.`auth` = #{auth} - - and uuid in - - #{roleUuid} - - - + + and uuid in + + #{roleUuid} + + + GROUP BY a.`uuid` ORDER BY a.`id` DESC @@ -216,9 +216,8 @@ limitations under the License. @@ -256,13 +255,32 @@ limitations under the License. - + SELECT tr.`role_uuid` FROM `team_role` tr + + left join `role` r on r.uuid= tr.role_uuid + + WHERE tr.`team_uuid` IN + + #{teamUuid} + + AND tr.`checked_children` = #{checkedChildren} + + and (r.`env` = #{env} or r.`env` is null ) + + + + @@ -278,13 +296,13 @@ limitations under the License. @@ -338,11 +356,22 @@ limitations under the License. #{item} + - INSERT INTO `role` (`id`, `uuid`, `name`, `description`) - VALUES (#{id}, #{uuid}, #{name}, #{description}) + INSERT INTO `role` (`id`, `uuid`, `name`, `description`, `env`) + VALUES (#{id}, #{uuid}, #{name}, #{description}, #{env}) @@ -374,7 +403,8 @@ limitations under the License. UPDATE `role` SET `name` = #{name}, - `description` = #{description} + `description` = #{description}, + `env` = #{env} WHERE `uuid` = #{uuid} diff --git a/src/main/java/neatlogic/framework/dao/mapper/UserSessionMapper.java b/src/main/java/neatlogic/framework/dao/mapper/UserSessionMapper.java index 90892ab4a..33c3eeae8 100644 --- a/src/main/java/neatlogic/framework/dao/mapper/UserSessionMapper.java +++ b/src/main/java/neatlogic/framework/dao/mapper/UserSessionMapper.java @@ -23,7 +23,7 @@ import java.util.Date; import java.util.List; public interface UserSessionMapper { - UserSessionVo getUserSessionByUserUuid(String userUuid); + UserSessionVo getUserSessionByTokenHash(String userUuid); int getAllOnlineUserCount(Date sessionTime); @@ -48,10 +48,10 @@ public interface UserSessionMapper { int getUserSessionCountByDate(String limitDate); - int insertUserSession(@Param("userUuid") String userUuid, @Param("authInfo") String authInfo); + int insertUserSession(@Param("userUuid") String userUuid, @Param("tokenHash") String tokenHash, @Param("tokenCreateTime") Long tokenCreateTime, @Param("authInfo") String authInfo); - int updateUserSession(String userUuid); + int updateUserSession(String tokenHash); - int deleteUserSessionByUserUuid(String userUuid); + int deleteUserSessionByTokenHash(String tokenHash); } \ No newline at end of file diff --git a/src/main/java/neatlogic/framework/dao/mapper/UserSessionMapper.xml b/src/main/java/neatlogic/framework/dao/mapper/UserSessionMapper.xml index ccb8eeea9..4850297f8 100644 --- a/src/main/java/neatlogic/framework/dao/mapper/UserSessionMapper.xml +++ b/src/main/java/neatlogic/framework/dao/mapper/UserSessionMapper.xml @@ -19,11 +19,11 @@ limitations under the License. - - + + SELECT + ra.`auth_group` AS authGroup, + ra.`auth` + FROM `role_authority` ra + + JOIN `role` r on ra.role_uuid = r.uuid + + + AND r.`env` = #{env} + - UNION - SELECT - `auth_group` AS authGroup, - `auth` - FROM `user_authority` - WHERE `user_uuid` = #{userUuid} - - AND `auth` = #{auth} + + UNION - UNION - SELECT - c.`auth_group` AS authGroup, - c.`auth` - FROM `user_team` a - JOIN `team_role` b ON b.`team_uuid` = a.`team_uuid` - JOIN `role_authority` c ON c.`role_uuid` = b.`role_uuid` - WHERE a.`user_uuid` = #{userUuid} - - AND `auth` = #{auth} + + SELECT + `auth_group` AS authGroup, + `auth` + FROM `user_authority` + WHERE `user_uuid` in + + #{userUuid} + + + + UNION diff --git a/src/main/java/neatlogic/framework/dao/mapper/UserSessionMapper.xml b/src/main/java/neatlogic/framework/dao/mapper/UserSessionMapper.xml index 4850297f8..9649443f8 100644 --- a/src/main/java/neatlogic/framework/dao/mapper/UserSessionMapper.xml +++ b/src/main/java/neatlogic/framework/dao/mapper/UserSessionMapper.xml @@ -21,7 +21,7 @@ limitations under the License. @@ -140,7 +140,7 @@ limitations under the License. INSERT INTO `user_session` (`user_uuid`, `visit_time`, `token_hash`, `token_create_time`, `auth_info`) VALUES (#{userUuid}, NOW(3), #{tokenHash}, #{tokenCreateTime}, #{authInfo}) ON DUPLICATE KEY - UPDATE `visit_time` = NOW(3), `auth_info` = #{authInfo} + UPDATE `visit_time` = NOW(3), `auth_info` = #{authInfo}, `token_create_time` = #{tokenCreateTime} diff --git a/src/main/java/neatlogic/framework/dto/JwtVo.java b/src/main/java/neatlogic/framework/dto/JwtVo.java index 91d8bbb01..594202eb9 100644 --- a/src/main/java/neatlogic/framework/dto/JwtVo.java +++ b/src/main/java/neatlogic/framework/dto/JwtVo.java @@ -1,11 +1,13 @@ package neatlogic.framework.dto; import com.alibaba.fastjson.JSONObject; +import neatlogic.framework.asynchronization.threadlocal.RequestContext; import neatlogic.framework.common.constvalue.ApiParamType; import neatlogic.framework.restful.annotation.EntityField; import neatlogic.framework.util.Md5Util; import org.apache.commons.lang3.StringUtils; +import java.nio.charset.StandardCharsets; import java.util.Base64; public class JwtVo { @@ -23,7 +25,7 @@ public class JwtVo { } - public JwtVo(UserVo checkUserVo) { + public JwtVo(UserVo checkUserVo, Long tokenCreateTime) { JSONObject jwtBodyObj = new JSONObject(); jwtBodyObj.put("useruuid", checkUserVo.getUuid()); jwtBodyObj.put("userid", checkUserVo.getUserId()); @@ -31,6 +33,13 @@ public class JwtVo { jwtBodyObj.put("tenant", checkUserVo.getTenant()); jwtBodyObj.put("isSuperAdmin", checkUserVo.getIsSuperAdmin()); jwtBodyObj.put("createTime", tokenCreateTime); + if (RequestContext.get() != null && RequestContext.get().getRequest() != null) { + String env = RequestContext.get().getRequest().getHeader("Env"); + if (StringUtils.isNotBlank(env)) { + jwtBodyObj.put("env", env); + } + } + this.setTokenCreateTime(tokenCreateTime); jwtbody = Base64.getUrlEncoder().encodeToString(jwtBodyObj.toJSONString().getBytes()); } @@ -87,6 +96,20 @@ public class JwtVo { } public String getTokenHash() { - return Md5Util.encryptMD5(getJwthead() + "." + getJwtbody() + "." + getJwtsign()); + String jwtBody = new String(Base64.getUrlDecoder().decode(getJwtbody()), StandardCharsets.UTF_8); + JSONObject jwtBodyObj = JSONObject.parseObject(jwtBody); + JSONObject tokenJson = new JSONObject(); + tokenJson.put("tenant", jwtBodyObj.getString("tenant")); + tokenJson.put("useruuid", jwtBodyObj.getString("useruuid")); + if (jwtBodyObj.containsKey("env")) { + tokenJson.put("env", jwtBodyObj.getString("env")); + } + return Md5Util.encryptMD5(tokenJson.toJSONString()); + } + + public String getEnv() { + String jwtBody = new String(Base64.getUrlDecoder().decode(getJwtbody()), StandardCharsets.UTF_8); + JSONObject jwtBodyObj = JSONObject.parseObject(jwtBody); + return jwtBodyObj.getString("env"); } } diff --git a/src/main/java/neatlogic/framework/dto/UserAuthVo.java b/src/main/java/neatlogic/framework/dto/UserAuthVo.java index 1324759dd..5faca16a7 100644 --- a/src/main/java/neatlogic/framework/dto/UserAuthVo.java +++ b/src/main/java/neatlogic/framework/dto/UserAuthVo.java @@ -24,6 +24,9 @@ public class UserAuthVo extends BasePageVo implements Serializable { @EntityField(name = "权限名", type = ApiParamType.STRING) private String authName; + @EntityField(name = "环境", type = ApiParamType.STRING) + private String env; + public UserAuthVo() { @@ -31,6 +34,9 @@ public class UserAuthVo extends BasePageVo implements Serializable { public UserAuthVo(String _userUuid) { this.userUuid = _userUuid; + if (UserContext.get() != null) { + this.env = UserContext.get().getEnv(); + } } public UserAuthVo(String _userUuid, String _auth) { @@ -84,4 +90,11 @@ public class UserAuthVo extends BasePageVo implements Serializable { return authName; } + public String getEnv() { + return env; + } + + public void setEnv(String env) { + this.env = env; + } } diff --git a/src/main/java/neatlogic/framework/dto/UserSessionVo.java b/src/main/java/neatlogic/framework/dto/UserSessionVo.java index 965326366..630dd4edb 100644 --- a/src/main/java/neatlogic/framework/dto/UserSessionVo.java +++ b/src/main/java/neatlogic/framework/dto/UserSessionVo.java @@ -15,6 +15,9 @@ public class UserSessionVo { @EntityField(name = "权限", type = ApiParamType.STRING) private AuthenticationInfoVo authInfo; + @EntityField(name = "token创建时间", type = ApiParamType.LONG) + private Long tokenCreateTime; + public UserSessionVo(String userUuid, Date sessionTime) { this.userUuid = userUuid; this.sessionTime = sessionTime; @@ -54,4 +57,12 @@ public class UserSessionVo { public void setAuthInfoStr(String authInfoStr) { this.authInfoStr = authInfoStr; } + + public Long getTokenCreateTime() { + return tokenCreateTime; + } + + public void setTokenCreateTime(Long tokenCreateTime) { + this.tokenCreateTime = tokenCreateTime; + } } diff --git a/src/main/java/neatlogic/framework/filter/JsonWebTokenValidFilter.java b/src/main/java/neatlogic/framework/filter/JsonWebTokenValidFilter.java index ec74c3303..aa8a0e77f 100644 --- a/src/main/java/neatlogic/framework/filter/JsonWebTokenValidFilter.java +++ b/src/main/java/neatlogic/framework/filter/JsonWebTokenValidFilter.java @@ -44,6 +44,7 @@ import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.net.URLDecoder; import java.util.Date; +import java.util.Objects; public class JsonWebTokenValidFilter extends OncePerRequestFilter { // private ServletContext context; @@ -200,12 +201,10 @@ public class JsonWebTokenValidFilter extends OncePerRequestFilter { * @return 不超时返回权限信息,否则返回null */ private boolean userExpirationValid(UserVo userVo, String timezone, HttpServletRequest request, HttpServletResponse response) { - String userUuid = userVo.getUuid(); - String tenant = TenantContext.get().getTenantUuid(); AuthenticationInfoVo authenticationInfo = (AuthenticationInfoVo) UserSessionCache.getItem(userVo.getJwtVo().getTokenHash()); if (authenticationInfo == null || authenticationInfo.getUserUuid() == null) { UserSessionVo userSessionVo = userSessionMapper.getUserSessionByTokenHash(userVo.getJwtVo().getTokenHash()); - if (null != userSessionVo) { + if (null != userSessionVo && Objects.equals(userSessionVo.getTokenCreateTime(), userVo.getJwtVo().getTokenCreateTime())) { Date visitTime = userSessionVo.getSessionTime(); Date now = new Date(); int expire = Config.USER_EXPIRETIME(); diff --git a/src/main/java/neatlogic/framework/filter/core/LoginAuthHandlerBase.java b/src/main/java/neatlogic/framework/filter/core/LoginAuthHandlerBase.java index 0b5b54618..17330da9a 100644 --- a/src/main/java/neatlogic/framework/filter/core/LoginAuthHandlerBase.java +++ b/src/main/java/neatlogic/framework/filter/core/LoginAuthHandlerBase.java @@ -117,7 +117,7 @@ public abstract class LoginAuthHandlerBase implements ILoginAuthHandler { */ public static JwtVo buildJwt(UserVo checkUserVo) throws Exception { Long tokenCreateTime = System.currentTimeMillis(); - JwtVo jwtVo = new JwtVo(checkUserVo); + JwtVo jwtVo = new JwtVo(checkUserVo,tokenCreateTime); SecretKeySpec signingKey = new SecretKeySpec(Config.JWT_SECRET().getBytes(), "HmacSHA1"); Mac mac; mac = Mac.getInstance("HmacSHA1"); @@ -135,7 +135,6 @@ public abstract class LoginAuthHandlerBase implements ILoginAuthHandler { bos.close(); jwtVo.setCc(cc); jwtVo.setJwtsign(jwtsign); - jwtVo.setTokenCreateTime(tokenCreateTime); return jwtVo; } diff --git a/src/main/java/neatlogic/module/framework/filter/handler/DefaultLoginAuthHandler.java b/src/main/java/neatlogic/module/framework/filter/handler/DefaultLoginAuthHandler.java index ba89d58f0..3eb28f4dc 100644 --- a/src/main/java/neatlogic/module/framework/filter/handler/DefaultLoginAuthHandler.java +++ b/src/main/java/neatlogic/module/framework/filter/handler/DefaultLoginAuthHandler.java @@ -112,6 +112,7 @@ public class DefaultLoginAuthHandler extends LoginAuthHandlerBase { userVo.setUserId(jwtBodyObj.getString("userid")); userVo.setUserName(jwtBodyObj.getString("username")); userVo.setIsSuperAdmin(jwtBodyObj.getBoolean("isSuperAdmin")); + userVo.getJwtVo().setTokenCreateTime(jwtBodyObj.getLong("createTime")); if(jwtBodyObj.getJSONArray("rolelist") != null) { userVo.setRoleUuidList(JSONArray.parseArray(jwtBodyObj.getJSONArray("rolelist").toJSONString(),String.class)); } diff --git a/src/main/java/neatlogic/module/framework/login/handler/LoginController.java b/src/main/java/neatlogic/module/framework/login/handler/LoginController.java index e83a3cf40..b621e5943 100644 --- a/src/main/java/neatlogic/module/framework/login/handler/LoginController.java +++ b/src/main/java/neatlogic/module/framework/login/handler/LoginController.java @@ -17,6 +17,7 @@ limitations under the License. package neatlogic.module.framework.login.handler; import com.alibaba.fastjson.JSONObject; +import neatlogic.framework.asynchronization.threadlocal.RequestContext; import neatlogic.framework.asynchronization.threadlocal.TenantContext; import neatlogic.framework.asynchronization.threadlocal.UserContext; import neatlogic.framework.auth.init.MaintenanceMode; @@ -174,6 +175,8 @@ public class LoginController { } if (checkUserVo != null) { + //初始化request上下文 + RequestContext.init(request, request.getRequestURI(), response); checkUserVo.setTenant(tenant); JwtVo jwtVo = LoginAuthHandlerBase.buildJwt(checkUserVo); String AuthenticationInfoStr = null; diff --git a/src/main/java/neatlogic/module/framework/restful/api/ModuleListApi.java b/src/main/java/neatlogic/module/framework/restful/api/ModuleListApi.java index 1b681e2da..b986cd809 100644 --- a/src/main/java/neatlogic/module/framework/restful/api/ModuleListApi.java +++ b/src/main/java/neatlogic/module/framework/restful/api/ModuleListApi.java @@ -22,6 +22,7 @@ import neatlogic.framework.asynchronization.threadlocal.TenantContext; import neatlogic.framework.asynchronization.threadlocal.UserContext; import neatlogic.framework.common.constvalue.ApiParamType; import neatlogic.framework.dao.mapper.UserMapper; +import neatlogic.framework.dto.AuthenticationInfoVo; import neatlogic.framework.dto.UserAuthVo; import neatlogic.framework.dto.module.ModuleVo; import neatlogic.framework.restful.annotation.*; @@ -39,52 +40,54 @@ import java.util.Set; @Service @OperationType(type = OperationTypeEnum.SEARCH) public class ModuleListApi extends PrivateApiComponentBase { - @Autowired - UserMapper userMapper; + @Autowired + UserMapper userMapper; - @Override - public String getToken() { - return "/module/list"; - } + @Override + public String getToken() { + return "/module/list"; + } - @Override - public String getName() { - return "获取租户激活模块接口"; - } + @Override + public String getName() { + return "获取租户激活模块接口"; + } - @Override - public String getConfig() { - return null; - } + @Override + public String getConfig() { + return null; + } - @Input({}) - @Output({ - @Param( name = "value", type = ApiParamType.STRING, desc = "模块"), - @Param( name = "text", type = ApiParamType.STRING, desc = "模块名") - }) - @Description(desc = "获取租户激活模块接口") - @Override - public Object myDoService(JSONObject jsonObj) throws Exception { - JSONArray resultArray = new JSONArray(); - Set authGroupSet = new HashSet(); + @Input({}) + @Output({ + @Param(name = "value", type = ApiParamType.STRING, desc = "模块"), + @Param(name = "text", type = ApiParamType.STRING, desc = "模块名") + }) + @Description(desc = "获取租户激活模块接口") + @Override + public Object myDoService(JSONObject jsonObj) throws Exception { + JSONArray resultArray = new JSONArray(); + Set authGroupSet = new HashSet(); //获取用户权限 - List userAuthList = userMapper.searchUserAllAuthByUserAuth(new UserAuthVo(UserContext.get().getUserUuid())); - for(UserAuthVo userAuth:userAuthList) { - authGroupSet.add(userAuth.getAuthGroup()); + AuthenticationInfoVo authenticationInfoVo = UserContext.get().getAuthenticationInfoVo(); + String env = UserContext.get().getEnv(); + List userAuthList = userMapper.searchUserAllAuthByUserAuth(authenticationInfoVo, env); + for (UserAuthVo userAuth : userAuthList) { + authGroupSet.add(userAuth.getAuthGroup()); } - Set checkSet = new HashSet<>(); - for (ModuleVo moduleVo : TenantContext.get().getActiveModuleList()) { - if (authGroupSet.contains(moduleVo.getGroup())&&!checkSet.contains(moduleVo.getGroup())) { - checkSet.add(moduleVo.getGroup()); - JSONObject returnObj = new JSONObject(); - returnObj.put("value", moduleVo.getGroup()); - returnObj.put("text", $.t(moduleVo.getGroupName())); - returnObj.put("sort", moduleVo.getGroupSort()); - resultArray.add(returnObj); - } - } - resultArray.sort(Comparator.comparing(obj-> ((JSONObject) obj).getInteger("sort"))); - - return resultArray; - } + Set checkSet = new HashSet<>(); + for (ModuleVo moduleVo : TenantContext.get().getActiveModuleList()) { + if (authGroupSet.contains(moduleVo.getGroup()) && !checkSet.contains(moduleVo.getGroup())) { + checkSet.add(moduleVo.getGroup()); + JSONObject returnObj = new JSONObject(); + returnObj.put("value", moduleVo.getGroup()); + returnObj.put("text", $.t(moduleVo.getGroupName())); + returnObj.put("sort", moduleVo.getGroupSort()); + resultArray.add(returnObj); + } + } + resultArray.sort(Comparator.comparing(obj -> ((JSONObject) obj).getInteger("sort"))); + + return resultArray; + } } -- Gitee From 729708bdfff1205b359e0d7c5d686bf438568db3 Mon Sep 17 00:00:00 2001 From: lvzk <897706680@qq.com> Date: Fri, 15 Dec 2023 19:32:50 +0800 Subject: [PATCH 3/6] =?UTF-8?q?[=E5=8A=9F=E8=83=BD]=E8=A7=92=E8=89=B2?= =?UTF-8?q?=E7=AE=A1=E7=90=86-=E8=A7=92=E8=89=B2=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E5=8A=A8=E6=80=81=E5=8C=B9=E9=85=8D=E7=94=9F=E6=95=88=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=20#[1014988100042752]=E8=A7=92=E8=89=B2=E7=AE=A1?= =?UTF-8?q?=E7=90=86-=E8=A7=92=E8=89=B2=E5=A2=9E=E5=8A=A0=E5=8A=A8?= =?UTF-8?q?=E6=80=81=E5=8C=B9=E9=85=8D=E7=94=9F=E6=95=88=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=20http://192.168.0.96:8090/demo/rdm.html#/story-detail/9390509?= =?UTF-8?q?47543040/939050947543042/1014988100042752?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../threadlocal/UserContext.java | 2 +- .../framework/dao/mapper/UserMapper.java | 4 +- .../framework/dao/mapper/UserMapper.xml | 55 ++++++++++++++++--- .../login/handler/LoginController.java | 6 +- 4 files changed, 53 insertions(+), 14 deletions(-) diff --git a/src/main/java/neatlogic/framework/asynchronization/threadlocal/UserContext.java b/src/main/java/neatlogic/framework/asynchronization/threadlocal/UserContext.java index f1fd5d856..4829f25bb 100644 --- a/src/main/java/neatlogic/framework/asynchronization/threadlocal/UserContext.java +++ b/src/main/java/neatlogic/framework/asynchronization/threadlocal/UserContext.java @@ -52,7 +52,7 @@ public class UserContext implements Serializable { private String tokenHash; - private String env; + private String env = null; public static UserContext init(UserContext _userContext) { UserContext context = new UserContext(); diff --git a/src/main/java/neatlogic/framework/dao/mapper/UserMapper.java b/src/main/java/neatlogic/framework/dao/mapper/UserMapper.java index b7ee01314..399ee355a 100644 --- a/src/main/java/neatlogic/framework/dao/mapper/UserMapper.java +++ b/src/main/java/neatlogic/framework/dao/mapper/UserMapper.java @@ -55,7 +55,9 @@ public interface UserMapper { UserVo getUserById(Long id); - UserVo getUserByUuid(String uuid); + UserVo getUserByUuidAndEnv(@Param("uuid") String uuid, @Param("env") String env); + + UserVo getUserByUuid(@Param("uuid") String uuid); UserVo getUserSimpleInfoByUuid(String uuid); diff --git a/src/main/java/neatlogic/framework/dao/mapper/UserMapper.xml b/src/main/java/neatlogic/framework/dao/mapper/UserMapper.xml index b461b5c61..57f02b28c 100644 --- a/src/main/java/neatlogic/framework/dao/mapper/UserMapper.xml +++ b/src/main/java/neatlogic/framework/dao/mapper/UserMapper.xml @@ -166,6 +166,35 @@ limitations under the License. + + diff --git a/src/main/resources/neatlogic/resources/framework/changelog/2023-12-19/neatlogic_tenant.sql b/src/main/resources/neatlogic/resources/framework/changelog/2023-12-19/neatlogic_tenant.sql new file mode 100644 index 000000000..d37c5776f --- /dev/null +++ b/src/main/resources/neatlogic/resources/framework/changelog/2023-12-19/neatlogic_tenant.sql @@ -0,0 +1,9 @@ +truncate `user_session`; + +ALTER TABLE `user_session` ADD COLUMN `token_hash` char(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'token哈希值' AFTER `user_uuid`; + +ALTER TABLE `user_session` ADD COLUMN `token_create_time` bigint NULL DEFAULT NULL COMMENT 'token创建的时间' AFTER `token_hash`; + +ALTER TABLE `user_session` DROP PRIMARY KEY; + +ALTER TABLE `user_session` ADD PRIMARY KEY (`token_hash`) USING HASH; \ No newline at end of file diff --git a/src/main/resources/neatlogic/resources/framework/changelog/2023-12-19/version.json b/src/main/resources/neatlogic/resources/framework/changelog/2023-12-19/version.json new file mode 100644 index 000000000..106d5f32f --- /dev/null +++ b/src/main/resources/neatlogic/resources/framework/changelog/2023-12-19/version.json @@ -0,0 +1,12 @@ +{ + "content":[ + { + "type":"新增功能", + "detail":[ + {"msg":"1.根据访问入口header env,动态生效角色"}, + {"msg":"2.资源中心--资产清单查看权限依据团体和模型查看权限"}, + {"msg":"3.优化登录及认证逻辑"} + ] + } + ] +} -- Gitee