From a30f97c5b5e09be61c767786a9c4020eb4aefdeb Mon Sep 17 00:00:00 2001 From: Odboy Date: Wed, 29 Oct 2025 20:02:00 +0800 Subject: [PATCH] =?UTF-8?q?refactor(system):=20=E9=87=8D=E6=9E=84=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E5=9C=A8=E7=BA=BF=E4=BF=A1=E6=81=AF=E5=92=8C=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E7=BC=93=E5=AD=98=E7=9B=B8=E5=85=B3=E7=B1=BB=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/SystemAuthController.java | 10 +- .../controller/SystemOnlineController.java | 12 +- .../system/dal/redis/SystemUserInfoRedis.java | 76 -------- .../dal/redis/SystemUserOnlineInfoRedis.java | 173 ------------------ .../config/SpringSecurityConfig.java | 73 ++------ .../permission/config/TokenConfigurer.java | 10 +- .../permission/core/handler/TokenFilter.java | 12 +- .../core/handler/UserDetailsHandler.java | 8 +- .../system/service/SystemUserService.java | 26 +-- 9 files changed, 57 insertions(+), 343 deletions(-) delete mode 100644 cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/redis/SystemUserInfoRedis.java delete mode 100644 cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/redis/SystemUserOnlineInfoRedis.java diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemAuthController.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemAuthController.java index fcc7a1da..5ceb4bc1 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemAuthController.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemAuthController.java @@ -28,7 +28,7 @@ import cn.odboy.system.dal.model.SystemUserInfoVo; import cn.odboy.system.dal.model.SystemUserJwtVo; import cn.odboy.system.dal.model.SystemUserLoginArgs; import cn.odboy.system.dal.redis.SystemCacheKey; -import cn.odboy.system.dal.redis.SystemUserOnlineInfoRedis; +import cn.odboy.system.dal.redis.SystemUserOnlineInfoDAO; import cn.odboy.system.framework.permission.core.CsSecurityHelper; import cn.odboy.system.framework.permission.core.handler.TokenProvider; import cn.odboy.system.framework.permission.core.handler.UserDetailsHandler; @@ -66,7 +66,7 @@ public class SystemAuthController { @Autowired private CsRedisHelper redisHelper; @Autowired - private SystemUserOnlineInfoRedis onlineUserService; + private SystemUserOnlineInfoDAO systemUserOnlineInfoDAO; @Autowired private TokenProvider tokenProvider; @Autowired @@ -108,10 +108,10 @@ public class SystemAuthController { }}; if (properties.getLogin().isSingle()) { // 踢掉之前已经登录的token - onlineUserService.kickOutByUsername(loginRequest.getUsername()); + systemUserOnlineInfoDAO.kickOutByUsername(loginRequest.getUsername()); } // 保存在线信息 - onlineUserService.saveUserJwtModelByToken(jwtUser, token, request); + systemUserOnlineInfoDAO.saveUserJwtModelByToken(jwtUser, token, request); // 返回登录信息 return ResponseEntity.ok(authInfo); } @@ -149,7 +149,7 @@ public class SystemAuthController { @AnonymousPostMapping(value = "/logout") public ResponseEntity logout(HttpServletRequest request) { String token = tokenProvider.getToken(request); - onlineUserService.logoutByToken(token); + systemUserOnlineInfoDAO.logoutByToken(token); return ResponseEntity.ok(null); } } diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemOnlineController.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemOnlineController.java index 8c60136d..fc321c2f 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemOnlineController.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/controller/SystemOnlineController.java @@ -19,14 +19,13 @@ package cn.odboy.system.controller; import cn.odboy.base.CsPageArgs; import cn.odboy.base.CsPageResult; import cn.odboy.system.dal.model.SystemUserOnlineVo; -import cn.odboy.system.dal.redis.SystemUserOnlineInfoRedis; +import cn.odboy.system.dal.redis.SystemUserOnlineInfoDAO; import cn.odboy.util.CsDesEncryptUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; @@ -41,22 +40,21 @@ import java.util.Set; @Api(tags = "系统:在线用户管理") public class SystemOnlineController { @Autowired - private SystemUserOnlineInfoRedis systemUserOnlineInfoRedis; + private SystemUserOnlineInfoDAO systemUserOnlineInfoDAO; @ApiOperation("查询在线用户") @PostMapping @PreAuthorize("@el.check()") public ResponseEntity> queryOnlineUser(@Validated @RequestBody CsPageArgs args) { IPage page = new Page<>(args.getPage(), args.getSize()); - return ResponseEntity.ok(systemUserOnlineInfoRedis.queryUserOnlineModelPage(args.getArgs(), page)); + return ResponseEntity.ok(systemUserOnlineInfoDAO.queryUserOnlineModelPage(args.getArgs(), page)); } @ApiOperation("导出数据") @GetMapping(value = "/download") @PreAuthorize("@el.check()") public void exportOnlineUser(HttpServletResponse response, String username) throws IOException { - systemUserOnlineInfoRedis.downloadUserOnlineModelExcel(systemUserOnlineInfoRedis.queryUserOnlineModelListByUsername( - username), response); + systemUserOnlineInfoDAO.downloadUserOnlineModelExcel(systemUserOnlineInfoDAO.queryUserOnlineModelListByUsername(username), response); } @ApiOperation("踢出用户") @@ -66,7 +64,7 @@ public class SystemOnlineController { for (String token : keys) { // 解密Key token = CsDesEncryptUtil.desDecrypt(token); - systemUserOnlineInfoRedis.logoutByToken(token); + systemUserOnlineInfoDAO.logoutByToken(token); } return ResponseEntity.ok(null); } diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/redis/SystemUserInfoRedis.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/redis/SystemUserInfoRedis.java deleted file mode 100644 index 1ad6ee34..00000000 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/redis/SystemUserInfoRedis.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright 2021-2025 Odboy - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package cn.odboy.system.dal.redis; - -import cn.hutool.core.util.RandomUtil; -import cn.odboy.framework.redis.CsRedisHelper; -import cn.odboy.system.dal.model.SystemUserJwtVo; -import cn.odboy.util.CsStringUtil; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.scheduling.annotation.Async; -import org.springframework.stereotype.Component; - -/** - * 用户缓存管理 - */ -@Component -public class SystemUserInfoRedis { - @Autowired - private CsRedisHelper redisHelper; - - /** - * 添加缓存到Redis - * - * @param userName 用户名 - */ - @Async - public void saveUserLoginInfoByUserName(String userName, SystemUserJwtVo user) { - if (CsStringUtil.isNotEmpty(userName)) { - // 添加数据, 避免数据同时过期(2小时左右) - long time = 7200 + RandomUtil.randomInt(900, 1800); - redisHelper.set(SystemCacheKey.USER_INFO + userName, user, time); - } - } - - /** - * 清理用户缓存信息 用户信息变更时 - * - * @param userName 用户名 - */ - @Async - public void deleteUserLoginInfoByUserName(String userName) { - if (CsStringUtil.isNotEmpty(userName)) { - // 清除数据 - redisHelper.del(SystemCacheKey.USER_INFO + userName); - } - } - - /** - * 返回用户缓存 - * - * @param username 用户名 - * @return UserJwtVo - */ - - public SystemUserJwtVo getUserLoginInfoByUserName(String username) { - if (CsStringUtil.isNotEmpty(username)) { - // 获取数据 - return redisHelper.get(SystemCacheKey.USER_INFO + username, SystemUserJwtVo.class); - } - return null; - } -} diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/redis/SystemUserOnlineInfoRedis.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/redis/SystemUserOnlineInfoRedis.java deleted file mode 100644 index 1df93e7c..00000000 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/redis/SystemUserOnlineInfoRedis.java +++ /dev/null @@ -1,173 +0,0 @@ -/* - * Copyright 2021-2025 Odboy - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package cn.odboy.system.dal.redis; - -import cn.odboy.base.CsPageResult; -import cn.odboy.framework.properties.AppProperties; -import cn.odboy.framework.redis.CsRedisHelper; -import cn.odboy.system.dal.model.SystemUserJwtVo; -import cn.odboy.system.dal.model.SystemUserOnlineVo; -import cn.odboy.system.framework.permission.core.handler.TokenProvider; -import cn.odboy.util.*; -import com.baomidou.mybatisplus.core.metadata.IPage; -import lombok.AllArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; -import java.util.*; -import java.util.concurrent.TimeUnit; - -@Slf4j -@Component -@AllArgsConstructor -public class SystemUserOnlineInfoRedis { - private final AppProperties properties; - private final TokenProvider tokenProvider; - private final CsRedisHelper redisHelper; - - /** - * 保存在线用户信息 - * - * @param userJwtVo / - * @param token / - * @param request / - */ - - public void saveUserJwtModelByToken(SystemUserJwtVo userJwtVo, String token, HttpServletRequest request) { - String dept = userJwtVo.getUser().getDept().getName(); - String ip = CsBrowserUtil.getIp(request); - String id = tokenProvider.getId(token); - String version = CsBrowserUtil.getVersion(request); - String address = CsIPUtil.getCityInfo(ip); - SystemUserOnlineVo userOnlineVo = null; - try { - userOnlineVo = new SystemUserOnlineVo(); - userOnlineVo.setUid(id); - userOnlineVo.setUserName(userJwtVo.getUsername()); - userOnlineVo.setNickName(userJwtVo.getUser().getNickName()); - userOnlineVo.setDept(dept); - userOnlineVo.setBrowser(version); - userOnlineVo.setIp(ip); - userOnlineVo.setAddress(address); - userOnlineVo.setKey(CsDesEncryptUtil.desEncrypt(token)); - userOnlineVo.setLoginTime(new Date()); - } catch (Exception e) { - log.error(e.getMessage(), e); - } - String loginKey = tokenProvider.loginKey(token); - redisHelper.set(loginKey, userOnlineVo, properties.getJwt().getTokenValidityInSeconds(), TimeUnit.MILLISECONDS); - } - - /** - * 退出登录 - * - * @param token / - */ - - public void logoutByToken(String token) { - String loginKey = tokenProvider.loginKey(token); - redisHelper.del(loginKey); - } - - /** - * 导出 - * - * @param all / - * @param response / - * @throws IOException / - */ - - public void downloadUserOnlineModelExcel(List all, HttpServletResponse response) - throws IOException { - List> list = new ArrayList<>(); - for (SystemUserOnlineVo user : all) { - Map map = new LinkedHashMap<>(); - map.put("用户名", user.getUserName()); - map.put("部门", user.getDept()); - map.put("登录IP", user.getIp()); - map.put("登录地点", user.getAddress()); - map.put("浏览器", user.getBrowser()); - map.put("登录日期", user.getLoginTime()); - list.add(map); - } - CsFileUtil.downloadExcel(list, response); - } - - /** - * 根据用户名强退用户 - * - * @param username / - */ - - public void kickOutByUsername(String username) { - String loginKey = SystemCacheKey.ONLINE_USER + username + "*"; - redisHelper.scanDel(loginKey); - } - - /** - * 查询全部数据 - * - * @param onlineVo / - * @param pageable / - * @return / - */ - - public CsPageResult queryUserOnlineModelPage( - SystemUserOnlineVo onlineVo, - IPage pageable) { - String username = null; - if (onlineVo != null) { - username = onlineVo.getUserName(); - } - List onlineUserList = queryUserOnlineModelListByUsername(username); - List paging = CsPageUtil.softPaging(pageable.getCurrent(), pageable.getSize(), onlineUserList); - return CsPageUtil.toPage(paging, onlineUserList.size()); - } - - /** - * 查询全部数据,不分页 - * - * @param username / - * @return / - */ - - public List queryUserOnlineModelListByUsername(String username) { - String loginKey = SystemCacheKey.ONLINE_USER + (CsStringUtil.isBlank(username) ? "" : "*" + username); - List keys = redisHelper.scan(loginKey + "*"); - Collections.reverse(keys); - List onlineUserList = new ArrayList<>(); - for (String key : keys) { - onlineUserList.add(redisHelper.get(key, SystemUserOnlineVo.class)); - } - onlineUserList.sort((o1, o2) -> o2.getLoginTime().compareTo(o1.getLoginTime())); - return onlineUserList; - } - - /** - * 查询用户 - * - * @param key / - * @return / - */ - - public SystemUserOnlineVo queryUserOnlineModelByKey(String key) { - return redisHelper.get(key, SystemUserOnlineVo.class); - } -} diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/config/SpringSecurityConfig.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/config/SpringSecurityConfig.java index 17fa879b..dcbb78c4 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/config/SpringSecurityConfig.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/config/SpringSecurityConfig.java @@ -17,7 +17,7 @@ package cn.odboy.system.framework.permission.config; import cn.odboy.constant.RequestMethodEnum; -import cn.odboy.system.dal.redis.SystemUserOnlineInfoRedis; +import cn.odboy.system.dal.redis.SystemUserOnlineInfoDAO; import cn.odboy.system.framework.permission.core.handler.JwtAccessDeniedHandler; import cn.odboy.system.framework.permission.core.handler.JwtAuthenticationEntryPoint; import cn.odboy.system.framework.permission.core.handler.TokenProvider; @@ -53,7 +53,7 @@ public class SpringSecurityConfig { @Autowired private ApplicationContext applicationContext; @Autowired - private SystemUserOnlineInfoRedis systemUserOnlineInfoRedis; + private SystemUserOnlineInfoDAO systemUserOnlineInfoDAO; @Bean public GrantedAuthorityDefaults grantedAuthorityDefaults() { @@ -73,76 +73,41 @@ public class SpringSecurityConfig { Map> anonymousUrls = CsAnonTagUtil.getAnonymousUrl(applicationContext); return httpSecurity // 禁用 CSRF - .csrf() - .disable() - .addFilter(corsFilter) + .csrf().disable().addFilter(corsFilter) // 授权异常 - .exceptionHandling() - .authenticationEntryPoint(authenticationErrorHandler) - .accessDeniedHandler(jwtAccessDeniedHandler) + .exceptionHandling().authenticationEntryPoint(authenticationErrorHandler).accessDeniedHandler(jwtAccessDeniedHandler) // 防止iframe 造成跨域 - .and() - .headers() - .frameOptions() - .disable() + .and().headers().frameOptions().disable() // 不创建会话 - .and() - .sessionManagement() - .sessionCreationPolicy(SessionCreationPolicy.STATELESS) - .and() - .authorizeRequests() + .and().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and().authorizeRequests() // 静态资源等等 - .antMatchers(HttpMethod.GET, "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/websocket/**") - .permitAll() + .antMatchers(HttpMethod.GET, "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/websocket/**").permitAll() // swagger 文档 - .antMatchers("/swagger-ui.html") - .permitAll() - .antMatchers("/swagger-resources/**") - .permitAll() - .antMatchers("/webjars/**") - .permitAll() - .antMatchers("/*/api-docs") - .permitAll() + .antMatchers("/swagger-ui.html").permitAll().antMatchers("/swagger-resources/**").permitAll().antMatchers("/webjars/**").permitAll().antMatchers("/*/api-docs").permitAll() // 文件 - .antMatchers("/avatar/**") - .permitAll() - .antMatchers("/file/**") - .permitAll() + .antMatchers("/avatar/**").permitAll().antMatchers("/file/**").permitAll() // 阿里巴巴 druid - .antMatchers("/druid/**") - .permitAll() + .antMatchers("/druid/**").permitAll() // 放行OPTIONS请求 - .antMatchers(HttpMethod.OPTIONS, "/**") - .permitAll() + .antMatchers(HttpMethod.OPTIONS, "/**").permitAll() // 自定义匿名访问所有url放行:允许匿名和带Token访问,细腻化到每个 Request 类型 // GET - .antMatchers(HttpMethod.GET, anonymousUrls.get(RequestMethodEnum.GET.getType()).toArray(new String[0])) - .permitAll() + .antMatchers(HttpMethod.GET, anonymousUrls.get(RequestMethodEnum.GET.getType()).toArray(new String[0])).permitAll() // POST - .antMatchers(HttpMethod.POST, anonymousUrls.get(RequestMethodEnum.POST.getType()).toArray(new String[0])) - .permitAll() + .antMatchers(HttpMethod.POST, anonymousUrls.get(RequestMethodEnum.POST.getType()).toArray(new String[0])).permitAll() // PUT - .antMatchers(HttpMethod.PUT, anonymousUrls.get(RequestMethodEnum.PUT.getType()).toArray(new String[0])) - .permitAll() + .antMatchers(HttpMethod.PUT, anonymousUrls.get(RequestMethodEnum.PUT.getType()).toArray(new String[0])).permitAll() // PATCH - .antMatchers(HttpMethod.PATCH, anonymousUrls.get(RequestMethodEnum.PATCH.getType()).toArray(new String[0])) - .permitAll() + .antMatchers(HttpMethod.PATCH, anonymousUrls.get(RequestMethodEnum.PATCH.getType()).toArray(new String[0])).permitAll() // DELETE - .antMatchers(HttpMethod.DELETE, anonymousUrls.get(RequestMethodEnum.DELETE.getType()).toArray(new String[0])) - .permitAll() + .antMatchers(HttpMethod.DELETE, anonymousUrls.get(RequestMethodEnum.DELETE.getType()).toArray(new String[0])).permitAll() // 所有类型的接口都放行 - .antMatchers(anonymousUrls.get(RequestMethodEnum.ALL.getType()).toArray(new String[0])) - .permitAll() + .antMatchers(anonymousUrls.get(RequestMethodEnum.ALL.getType()).toArray(new String[0])).permitAll() // 所有请求都需要认证 - .anyRequest() - .authenticated() - .and() - .apply(securityConfigurerAdapter()) - .and() - .build(); + .anyRequest().authenticated().and().apply(securityConfigurerAdapter()).and().build(); } private TokenConfigurer securityConfigurerAdapter() { - return new TokenConfigurer(tokenProvider, systemUserOnlineInfoRedis); + return new TokenConfigurer(tokenProvider, systemUserOnlineInfoDAO); } } diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/config/TokenConfigurer.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/config/TokenConfigurer.java index 5edc356d..d479cae0 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/config/TokenConfigurer.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/config/TokenConfigurer.java @@ -16,7 +16,7 @@ package cn.odboy.system.framework.permission.config; -import cn.odboy.system.dal.redis.SystemUserOnlineInfoRedis; +import cn.odboy.system.dal.redis.SystemUserOnlineInfoDAO; import cn.odboy.system.framework.permission.core.handler.TokenFilter; import cn.odboy.system.framework.permission.core.handler.TokenProvider; import org.springframework.security.config.annotation.SecurityConfigurerAdapter; @@ -26,16 +26,16 @@ import org.springframework.security.web.authentication.UsernamePasswordAuthentic public class TokenConfigurer extends SecurityConfigurerAdapter { private final TokenProvider tokenProvider; - private final SystemUserOnlineInfoRedis systemUserOnlineInfoRedis; + private final SystemUserOnlineInfoDAO systemUserOnlineInfoDAO; - public TokenConfigurer(TokenProvider tokenProvider, SystemUserOnlineInfoRedis systemUserOnlineInfoRedis) { + public TokenConfigurer(TokenProvider tokenProvider, SystemUserOnlineInfoDAO systemUserOnlineInfoDAO) { this.tokenProvider = tokenProvider; - this.systemUserOnlineInfoRedis = systemUserOnlineInfoRedis; + this.systemUserOnlineInfoDAO = systemUserOnlineInfoDAO; } @Override public void configure(HttpSecurity http) { - TokenFilter customFilter = new TokenFilter(tokenProvider, systemUserOnlineInfoRedis); + TokenFilter customFilter = new TokenFilter(tokenProvider, systemUserOnlineInfoDAO); http.addFilterBefore(customFilter, UsernamePasswordAuthenticationFilter.class); } } diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/handler/TokenFilter.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/handler/TokenFilter.java index bfce0304..c143dcd6 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/handler/TokenFilter.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/handler/TokenFilter.java @@ -19,7 +19,7 @@ package cn.odboy.system.framework.permission.core.handler; import cn.hutool.core.util.StrUtil; import cn.odboy.constant.SystemConst; import cn.odboy.system.dal.model.SystemUserOnlineVo; -import cn.odboy.system.dal.redis.SystemUserOnlineInfoRedis; +import cn.odboy.system.dal.redis.SystemUserOnlineInfoDAO; import lombok.extern.slf4j.Slf4j; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; @@ -36,14 +36,14 @@ import java.io.IOException; @Slf4j public class TokenFilter extends GenericFilterBean { private final TokenProvider tokenProvider; - private final SystemUserOnlineInfoRedis systemUserOnlineInfoRedis; + private final SystemUserOnlineInfoDAO systemUserOnlineInfoDAO; /** * @param tokenProvider Token - * @param systemUserOnlineInfoRedis 用户在线 + * @param systemUserOnlineInfoDAO 用户在线 */ - public TokenFilter(TokenProvider tokenProvider, SystemUserOnlineInfoRedis systemUserOnlineInfoRedis) { - this.systemUserOnlineInfoRedis = systemUserOnlineInfoRedis; + public TokenFilter(TokenProvider tokenProvider, SystemUserOnlineInfoDAO systemUserOnlineInfoDAO) { + this.systemUserOnlineInfoDAO = systemUserOnlineInfoDAO; this.tokenProvider = tokenProvider; } @@ -55,7 +55,7 @@ public class TokenFilter extends GenericFilterBean { if (StrUtil.isNotBlank(token)) { // 获取用户Token的Key String loginKey = tokenProvider.loginKey(token); - SystemUserOnlineVo userOnlineVo = systemUserOnlineInfoRedis.queryUserOnlineModelByKey(loginKey); + SystemUserOnlineVo userOnlineVo = systemUserOnlineInfoDAO.queryUserOnlineModelByKey(loginKey); // 判断用户在线信息是否为空 if (userOnlineVo != null) { // Token 续期判断 diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/handler/UserDetailsHandler.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/handler/UserDetailsHandler.java index 4c54d08b..7796c549 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/handler/UserDetailsHandler.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/framework/permission/core/handler/UserDetailsHandler.java @@ -20,7 +20,7 @@ import cn.odboy.framework.exception.BadRequestException; import cn.odboy.system.dal.dataobject.SystemUserTb; import cn.odboy.system.dal.model.SystemRoleCodeVo; import cn.odboy.system.dal.model.SystemUserJwtVo; -import cn.odboy.system.dal.redis.SystemUserInfoRedis; +import cn.odboy.system.dal.redis.SystemUserInfoDAO; import cn.odboy.system.service.SystemDataService; import cn.odboy.system.service.SystemRoleService; import cn.odboy.system.service.SystemUserService; @@ -44,11 +44,11 @@ public class UserDetailsHandler implements UserDetailsService { @Autowired private SystemDataService systemDataService; @Autowired - private SystemUserInfoRedis systemUserInfoRedis; + private SystemUserInfoDAO systemUserInfoDAO; @Override public SystemUserJwtVo loadUserByUsername(String username) { - SystemUserJwtVo userJwtVo = systemUserInfoRedis.getUserLoginInfoByUserName(username); + SystemUserJwtVo userJwtVo = systemUserInfoDAO.getUserLoginInfoByUserName(username); if (userJwtVo == null) { SystemUserTb user = systemUserService.getUserByUsername(username); if (user == null) { @@ -62,7 +62,7 @@ public class UserDetailsHandler implements UserDetailsService { // 初始化JwtUserDto userJwtVo = new SystemUserJwtVo(user, systemDataService.queryDeptIdListByArgs(user), authorities); // 添加缓存数据 - systemUserInfoRedis.saveUserLoginInfoByUserName(username, userJwtVo); + systemUserInfoDAO.saveUserLoginInfoByUserName(username, userJwtVo); } } return userJwtVo; diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemUserService.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemUserService.java index b3063d49..7eaa99c4 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemUserService.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemUserService.java @@ -27,8 +27,8 @@ import cn.odboy.system.dal.model.SystemQueryUserArgs; import cn.odboy.system.dal.mysql.SystemUserJobMapper; import cn.odboy.system.dal.mysql.SystemUserMapper; import cn.odboy.system.dal.mysql.SystemUserRoleMapper; -import cn.odboy.system.dal.redis.SystemUserInfoRedis; -import cn.odboy.system.dal.redis.SystemUserOnlineInfoRedis; +import cn.odboy.system.dal.redis.SystemUserInfoDAO; +import cn.odboy.system.dal.redis.SystemUserOnlineInfoDAO; import cn.odboy.system.framework.permission.core.CsSecurityHelper; import cn.odboy.util.CsFileUtil; import cn.odboy.util.CsPageUtil; @@ -56,9 +56,9 @@ public class SystemUserService { @Autowired private SystemUserRoleMapper systemUserRoleMapper; @Autowired - private SystemUserInfoRedis systemUserInfoRedis; + private SystemUserInfoDAO systemUserInfoDAO; @Autowired - private SystemUserOnlineInfoRedis systemUserOnlineInfoRedis; + private SystemUserOnlineInfoDAO systemUserOnlineInfoDAO; @Autowired private CsFileLocalUploadHelper fileUploadPathHelper; @@ -111,7 +111,7 @@ public class SystemUserService { } // 如果用户被禁用, 则清除用户登录信息 if (!args.getEnabled()) { - systemUserOnlineInfoRedis.kickOutByUsername(args.getUsername()); + systemUserOnlineInfoDAO.kickOutByUsername(args.getUsername()); } user.setDeptId(args.getDept().getId()); user.setUsername(args.getUsername()); @@ -125,7 +125,7 @@ public class SystemUserService { user.setGender(args.getGender()); systemUserMapper.insertOrUpdate(user); // 清除用户登录缓存 - systemUserInfoRedis.deleteUserLoginInfoByUserName(user.getUsername()); + systemUserInfoDAO.deleteUserLoginInfoByUserName(user.getUsername()); // 更新用户岗位 systemUserJobMapper.batchDeleteUserJob(Collections.singleton(args.getId())); systemUserJobMapper.batchInsertUserJob(args.getJobs(), args.getId()); @@ -151,7 +151,7 @@ public class SystemUserService { user.setPhone(args.getPhone()); user.setGender(args.getGender()); systemUserMapper.insertOrUpdate(user); - systemUserInfoRedis.deleteUserLoginInfoByUserName(user.getUsername()); + systemUserInfoDAO.deleteUserLoginInfoByUserName(user.getUsername()); } /** @@ -165,7 +165,7 @@ public class SystemUserService { for (Long id : ids) { // 清理缓存 SystemUserTb user = systemUserMapper.selectById(id); - systemUserInfoRedis.deleteUserLoginInfoByUserName(user.getUsername()); + systemUserInfoDAO.deleteUserLoginInfoByUserName(user.getUsername()); } systemUserMapper.deleteByIds(ids); // 删除用户岗位 @@ -184,7 +184,7 @@ public class SystemUserService { @Transactional(rollbackFor = Exception.class) public void modifyUserPasswordByUsername(String username, String encryptPassword) { systemUserMapper.updateUserPasswordByUsername(username, encryptPassword); - systemUserInfoRedis.deleteUserLoginInfoByUserName(username); + systemUserInfoDAO.deleteUserLoginInfoByUserName(username); } /** @@ -200,9 +200,9 @@ public class SystemUserService { // 清除缓存 users.forEach(user -> { // 清除缓存 - systemUserInfoRedis.deleteUserLoginInfoByUserName(user.getUsername()); + systemUserInfoDAO.deleteUserLoginInfoByUserName(user.getUsername()); // 强制退出 - systemUserOnlineInfoRedis.kickOutByUsername(user.getUsername()); + systemUserOnlineInfoDAO.kickOutByUsername(user.getUsername()); }); // 重置密码 systemUserMapper.batchUpdatePassword(password, ids); @@ -238,7 +238,7 @@ public class SystemUserService { if (CsStringUtil.isNotBlank(oldPath)) { CsFileUtil.del(oldPath); } - systemUserInfoRedis.deleteUserLoginInfoByUserName(username); + systemUserInfoDAO.deleteUserLoginInfoByUserName(username); return new HashMap<>(1) {{ put("avatar", file.getName()); }}; @@ -254,7 +254,7 @@ public class SystemUserService { @Transactional(rollbackFor = Exception.class) public void modifyUserEmailByUsername(String username, String email) { systemUserMapper.updateUserEmailByUsername(username, email); - systemUserInfoRedis.deleteUserLoginInfoByUserName(username); + systemUserInfoDAO.deleteUserLoginInfoByUserName(username); } /**