diff --git a/eladmin-common/src/main/java/me/zhengjie/utils/CacheKey.java b/eladmin-common/src/main/java/me/zhengjie/utils/CacheKey.java index aee6b47f..24ad0c59 100644 --- a/eladmin-common/src/main/java/me/zhengjie/utils/CacheKey.java +++ b/eladmin-common/src/main/java/me/zhengjie/utils/CacheKey.java @@ -15,11 +15,10 @@ */ package me.zhengjie.utils; - /** * @author: liaojinlong * @date: 2020/6/11 15:49 - * @apiNote: 关于缓存的Key 集合 + * @apiNote: 关于缓存的Key集合 */ public interface CacheKey { @@ -39,7 +38,7 @@ public interface CacheKey { String USER_ID = "user::id:"; String USER_NAME = "user::username:"; /** - * s数据 + * 数据 */ String DATE_USER = "data::user:"; /** @@ -50,6 +49,8 @@ public interface CacheKey { * 角色授权 */ String ROLE_AUTH = "role::auth:"; - + /** + * 角色信息 + */ String ROLE_ID = "role::id:"; } diff --git a/eladmin-common/src/main/java/me/zhengjie/utils/DateUtil.java b/eladmin-common/src/main/java/me/zhengjie/utils/DateUtil.java index 812f5639..0b0bf637 100644 --- a/eladmin-common/src/main/java/me/zhengjie/utils/DateUtil.java +++ b/eladmin-common/src/main/java/me/zhengjie/utils/DateUtil.java @@ -26,14 +26,15 @@ import java.util.Date; * @apiNote: JDK 8 新日期类 格式化与字符串转换 工具类 */ public class DateUtil { - public static final DateTimeFormatter dfyMdHms = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); - public static final DateTimeFormatter dfyMd = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + + public static final DateTimeFormatter DFY_MD_HMS = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + public static final DateTimeFormatter DFY_MD = DateTimeFormatter.ofPattern("yyyy-MM-dd"); /** * LocalDateTime 转时间戳 * - * @param localDateTime - * @return/ + * @param localDateTime / + * @return / */ public static Long getTimeStamp(LocalDateTime localDateTime) { return localDateTime.atZone(ZoneId.systemDefault()).toEpochSecond(); @@ -42,8 +43,8 @@ public class DateUtil { /** * 时间戳转LocalDateTime * - * @param timeStamp - * @return/ + * @param timeStamp / + * @return / */ public static LocalDateTime fromTimeStamp(Long timeStamp) { return LocalDateTime.ofEpochSecond(timeStamp, 0, OffsetDateTime.now().getOffset()); @@ -53,8 +54,8 @@ public class DateUtil { * LocalDateTime 转 Date * Jdk8 后 不推荐使用 {@link Date} Date * - * @param localDateTime - * @return/ + * @param localDateTime / + * @return / */ public static Date toDate(LocalDateTime localDateTime) { return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant()); @@ -64,8 +65,8 @@ public class DateUtil { * LocalDate 转 Date * Jdk8 后 不推荐使用 {@link Date} Date * - * @param localDate - * @return/ + * @param localDate / + * @return / */ public static Date toDate(LocalDate localDate) { return toDate(localDate.atTime(LocalTime.now(ZoneId.systemDefault()))); @@ -76,8 +77,8 @@ public class DateUtil { * Date转 LocalDateTime * Jdk8 后 不推荐使用 {@link Date} Date * - * @param date - * @return/ + * @param date / + * @return / */ public static LocalDateTime toLocalDateTime(Date date) { return LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault()); @@ -86,9 +87,9 @@ public class DateUtil { /** * 日期 格式化 * - * @param localDateTime - * @param patten - * @return/ + * @param localDateTime / + * @param patten / + * @return / */ public static String localDateTimeFormat(LocalDateTime localDateTime, String patten) { DateTimeFormatter df = DateTimeFormatter.ofPattern(patten); @@ -98,9 +99,9 @@ public class DateUtil { /** * 日期 格式化 * - * @param localDateTime - * @param df - * @return/ + * @param localDateTime / + * @param df / + * @return / */ public static String localDateTimeFormat(LocalDateTime localDateTime, DateTimeFormatter df) { return df.format(localDateTime); @@ -109,28 +110,28 @@ public class DateUtil { /** * 日期格式化 yyyy-MM-dd HH:mm:ss * - * @param localDateTime - * @return/ + * @param localDateTime / + * @return / */ public static String localDateTimeFormatyMdHms(LocalDateTime localDateTime) { - return dfyMdHms.format(localDateTime); + return DFY_MD_HMS.format(localDateTime); } /** * 日期格式化 yyyy-MM-dd * - * @param localDateTime - * @return/ + * @param localDateTime / + * @return / */ public String localDateTimeFormatyMd(LocalDateTime localDateTime) { - return dfyMd.format(localDateTime); + return DFY_MD.format(localDateTime); } /** * 字符串转 LocalDateTime ,字符串格式 yyyy-MM-dd * - * @param localDateTime - * @return/ + * @param localDateTime / + * @return / */ public static LocalDateTime parseLocalDateTimeFormat(String localDateTime, String pattern) { DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(pattern); @@ -140,30 +141,20 @@ public class DateUtil { /** * 字符串转 LocalDateTime ,字符串格式 yyyy-MM-dd * - * @param localDateTime - * @return/ + * @param localDateTime / + * @return / */ public static LocalDateTime parseLocalDateTimeFormat(String localDateTime, DateTimeFormatter dateTimeFormatter) { return LocalDateTime.from(dateTimeFormatter.parse(localDateTime)); } - /** - * 字符串转 LocalDateTime ,字符串格式 yyyy-MM-dd - * - * @param localDateTime - * @return/ - */ - public static LocalDateTime parseLocalDateTimeFormatyMd(String localDateTime) { - return LocalDateTime.from(dfyMd.parse(localDateTime)); - } - /** * 字符串转 LocalDateTime ,字符串格式 yyyy-MM-dd HH:mm:ss * - * @param localDateTime - * @return/ + * @param localDateTime / + * @return / */ public static LocalDateTime parseLocalDateTimeFormatyMdHms(String localDateTime) { - return LocalDateTime.from(dfyMdHms.parse(localDateTime)); + return LocalDateTime.from(DFY_MD_HMS.parse(localDateTime)); } } diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/security/rest/AuthorizationController.java b/eladmin-system/src/main/java/me/zhengjie/modules/security/rest/AuthorizationController.java index 77c84783..afed088a 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/security/rest/AuthorizationController.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/security/rest/AuthorizationController.java @@ -16,7 +16,6 @@ package me.zhengjie.modules.security.rest; import cn.hutool.core.util.IdUtil; -import com.wf.captcha.ArithmeticCaptcha; import com.wf.captcha.base.Captcha; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -38,7 +37,6 @@ import me.zhengjie.utils.RsaUtils; import me.zhengjie.utils.RedisUtils; import me.zhengjie.utils.SecurityUtils; import me.zhengjie.utils.StringUtils; -import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; @@ -47,7 +45,6 @@ import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; - import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import java.util.HashMap; @@ -91,7 +88,6 @@ public class AuthorizationController { } UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(authUser.getUsername(), password); - Authentication authentication = authenticationManagerBuilder.getObject().authenticate(authenticationToken); SecurityContextHolder.getContext().setAuthentication(authentication); // 生成令牌 diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/security/security/TokenFilter.java b/eladmin-system/src/main/java/me/zhengjie/modules/security/security/TokenFilter.java index 7b278bc1..c5cde05a 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/security/security/TokenFilter.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/security/security/TokenFilter.java @@ -93,8 +93,8 @@ public class TokenFilter extends GenericFilterBean { /** * 初步检测Token * - * @param request - * @return + * @param request / + * @return / */ private String resolveToken(HttpServletRequest request) { String bearerToken = request.getHeader(properties.getHeader()); diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/security/security/TokenProvider.java b/eladmin-system/src/main/java/me/zhengjie/modules/security/security/TokenProvider.java index df294967..3918568d 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/security/security/TokenProvider.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/security/security/TokenProvider.java @@ -52,7 +52,6 @@ public class TokenProvider implements InitializingBean { private final SecurityProperties properties; private final RedisUtils redisUtils; public static final String AUTHORITIES_KEY = "auth"; - private Key key; private JwtParser jwtParser; private JwtBuilder jwtBuilder; @@ -64,7 +63,7 @@ public class TokenProvider implements InitializingBean { @Override public void afterPropertiesSet() { byte[] keyBytes = Decoders.BASE64.decode(properties.getBase64Secret()); - this.key = Keys.hmacShaKeyFor(keyBytes); + Key key = Keys.hmacShaKeyFor(keyBytes); jwtParser = Jwts.parserBuilder() .setSigningKey(key) .build(); @@ -76,11 +75,11 @@ public class TokenProvider implements InitializingBean { * 创建Token 设置永不过期, * Token 的时间有效性转到Redis 维护 * - * @param authentication - * @return + * @param authentication / + * @return / */ public String createToken(Authentication authentication) { - /** + /* * 获取权限列表 */ String authorities = authentication.getAuthorities().stream() @@ -98,8 +97,8 @@ public class TokenProvider implements InitializingBean { /** * 依据Token 获取鉴权信息 * - * @param token - * @return + * @param token / + * @return / */ Authentication getAuthentication(String token) { Claims claims = getClaims(token); diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/security/service/UserCacheClean.java b/eladmin-system/src/main/java/me/zhengjie/modules/security/service/UserCacheClean.java index fbd7093b..3f9fe5b1 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/security/service/UserCacheClean.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/security/service/UserCacheClean.java @@ -27,12 +27,11 @@ import org.springframework.stereotype.Component; @Component public class UserCacheClean { - /** * 清理特定用户缓存信息
* 用户信息变更时 * - * @param userName + * @param userName / */ public void cleanUserCache(String userName) { if (StringUtils.isNotEmpty(userName)) { diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/security/service/UserDetailsServiceImpl.java b/eladmin-system/src/main/java/me/zhengjie/modules/security/service/UserDetailsServiceImpl.java index 857bf021..6ea954d6 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/security/service/UserDetailsServiceImpl.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/security/service/UserDetailsServiceImpl.java @@ -27,7 +27,6 @@ import me.zhengjie.modules.system.service.dto.UserDto; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.stereotype.Service; - import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -42,7 +41,6 @@ public class UserDetailsServiceImpl implements UserDetailsService { private final RoleService roleService; private final DataService dataService; private final LoginProperties loginProperties; - public void setEnableCache(boolean enableCache) { this.loginProperties.setCacheEnable(enableCache); } diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/RoleController.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/RoleController.java index de49a55c..f723e3d2 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/RoleController.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/RoleController.java @@ -27,10 +27,7 @@ import me.zhengjie.modules.system.service.dto.RoleDto; import me.zhengjie.modules.system.service.dto.RoleQueryCriteria; import me.zhengjie.modules.system.service.dto.RoleSmallDto; import me.zhengjie.utils.SecurityUtils; -import me.zhengjie.utils.ThrowableUtil; import org.springframework.data.domain.Pageable; -import org.springframework.data.domain.Sort; -import org.springframework.data.web.PageableDefault; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/RoleServiceImpl.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/RoleServiceImpl.java index a15d4edc..8005388b 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/RoleServiceImpl.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/RoleServiceImpl.java @@ -117,7 +117,7 @@ public class RoleServiceImpl implements RoleService { role.setLevel(resources.getLevel()); roleRepository.save(role); // 更新相关缓存 - delCaches(role.getId()); + delCaches(role.getId(), null); } @Override @@ -126,11 +126,10 @@ public class RoleServiceImpl implements RoleService { List users = userRepository.findByRoleId(role.getId()); // 更新菜单 role.setMenus(resources.getMenus()); - cleanCache(resources, users); + delCaches(resources.getId(), users); roleRepository.save(role); } - @Override @Transactional(rollbackFor = Exception.class) public void untiedMenu(Long menuId) { @@ -143,7 +142,7 @@ public class RoleServiceImpl implements RoleService { public void delete(Set ids) { for (Long id : ids) { // 更新相关缓存 - delCaches(id); + delCaches(id, null); } roleRepository.deleteAllByIdIn(ids); } @@ -208,40 +207,18 @@ public class RoleServiceImpl implements RoleService { /** * 清理缓存 - * * @param id / */ - public void delCaches(Long id) { - List users = userRepository.findByRoleId(id); + public void delCaches(Long id, List users) { + users = CollectionUtil.isEmpty(users) ? userRepository.findByRoleId(id) : users; if (CollectionUtil.isNotEmpty(users)) { - users.stream().forEach(item -> { - userCacheClean.cleanUserCache(item.getUsername()); - }); + users.forEach(item -> userCacheClean.cleanUserCache(item.getUsername())); Set userIds = users.stream().map(User::getId).collect(Collectors.toSet()); redisUtils.delByKeys(CacheKey.DATE_USER, userIds); redisUtils.delByKeys(CacheKey.MENU_USER, userIds); redisUtils.delByKeys(CacheKey.ROLE_AUTH, userIds); + redisUtils.del(CacheKey.ROLE_ID + id); } } - - /** - * 清理缓存 - * - * @param resources - * @param users - */ - private void cleanCache(Role resources, List users) { - // 清理缓存 - if (CollectionUtil.isNotEmpty(users)) { - users.forEach(item -> { - userCacheClean.cleanUserCache(item.getUsername()); - }); - Set userIds = users.stream().map(User::getId).collect(Collectors.toSet()); - redisUtils.delByKeys(CacheKey.MENU_USER, userIds); - redisUtils.delByKeys(CacheKey.ROLE_AUTH, userIds); - redisUtils.del(CacheKey.ROLE_ID + resources.getId()); - } - } - } diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/UserServiceImpl.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/UserServiceImpl.java index 7f788e8c..eca89aac 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/UserServiceImpl.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/UserServiceImpl.java @@ -235,7 +235,7 @@ public class UserServiceImpl implements UserService { /** * 清理 登陆时 用户缓存信息 * - * @param username + * @param username / */ private void flushCache(String username) { userCacheClean.cleanUserCache(username); diff --git a/eladmin-system/src/test/java/me/zhengjie/LoginCacheTest.java b/eladmin-system/src/test/java/me/zhengjie/LoginCacheTest.java index 008f61a8..4d7f55c8 100644 --- a/eladmin-system/src/test/java/me/zhengjie/LoginCacheTest.java +++ b/eladmin-system/src/test/java/me/zhengjie/LoginCacheTest.java @@ -5,19 +5,19 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; - import javax.annotation.Resource; @RunWith(SpringRunner.class) @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public class LoginCacheTest { + @Resource(name = "userDetailsService") private UserDetailsServiceImpl userDetailsService; - private int size = 10000; @Test public void testCache() { long start1 = System.currentTimeMillis(); + int size = 10000; for (int i = 0; i < size; i++) { userDetailsService.loadUserByUsername("admin"); } @@ -29,6 +29,6 @@ public class LoginCacheTest { userDetailsService.loadUserByUsername("admin"); } long end2 = System.currentTimeMillis(); - System.out.printf("使用缓存:" + (end1 - start1) + "毫秒\n 不使用缓存:" + (end2 - start2) + "毫秒"); + System.out.print("使用缓存:" + (end1 - start1) + "毫秒\n 不使用缓存:" + (end2 - start2) + "毫秒"); } } diff --git a/eladmin-tools/src/main/java/me/zhengjie/service/impl/AliPayServiceImpl.java b/eladmin-tools/src/main/java/me/zhengjie/service/impl/AliPayServiceImpl.java index 5271c4fa..0625ba42 100644 --- a/eladmin-tools/src/main/java/me/zhengjie/service/impl/AliPayServiceImpl.java +++ b/eladmin-tools/src/main/java/me/zhengjie/service/impl/AliPayServiceImpl.java @@ -38,20 +38,20 @@ import java.util.Optional; */ @Service @RequiredArgsConstructor -@CacheConfig(cacheNames = "alipay") +@CacheConfig(cacheNames = "aliPay") public class AliPayServiceImpl implements AliPayService { private final AliPayRepository alipayRepository; @Override - @Cacheable(key = "'id:1'") + @Cacheable(key = "'config'") public AlipayConfig find() { Optional alipayConfig = alipayRepository.findById(1L); return alipayConfig.orElseGet(AlipayConfig::new); } @Override - @CachePut(key = "'id:1'") + @CachePut(key = "'config'") @Transactional(rollbackFor = Exception.class) public AlipayConfig config(AlipayConfig alipayConfig) { alipayConfig.setId(1L); diff --git a/eladmin-tools/src/main/java/me/zhengjie/service/impl/EmailServiceImpl.java b/eladmin-tools/src/main/java/me/zhengjie/service/impl/EmailServiceImpl.java index 44cf9df3..3386500a 100644 --- a/eladmin-tools/src/main/java/me/zhengjie/service/impl/EmailServiceImpl.java +++ b/eladmin-tools/src/main/java/me/zhengjie/service/impl/EmailServiceImpl.java @@ -43,7 +43,7 @@ public class EmailServiceImpl implements EmailService { private final EmailRepository emailRepository; @Override - @CachePut(key = "'id:1'") + @CachePut(key = "'config'") @Transactional(rollbackFor = Exception.class) public EmailConfig config(EmailConfig emailConfig, EmailConfig old) throws Exception { emailConfig.setId(1L); @@ -55,7 +55,7 @@ public class EmailServiceImpl implements EmailService { } @Override - @Cacheable(key = "'id:1'") + @Cacheable(key = "'config'") public EmailConfig find() { Optional emailConfig = emailRepository.findById(1L); return emailConfig.orElseGet(EmailConfig::new); diff --git a/eladmin-tools/src/main/java/me/zhengjie/service/impl/QiNiuServiceImpl.java b/eladmin-tools/src/main/java/me/zhengjie/service/impl/QiNiuServiceImpl.java index 0db2d7af..942f437e 100644 --- a/eladmin-tools/src/main/java/me/zhengjie/service/impl/QiNiuServiceImpl.java +++ b/eladmin-tools/src/main/java/me/zhengjie/service/impl/QiNiuServiceImpl.java @@ -65,14 +65,14 @@ public class QiNiuServiceImpl implements QiNiuService { private Long maxSize; @Override - @Cacheable(key = "'id:1'") + @Cacheable(key = "'config'") public QiniuConfig find() { Optional qiniuConfig = qiNiuConfigRepository.findById(1L); return qiniuConfig.orElseGet(QiniuConfig::new); } @Override - @CachePut(key = "'id:1'") + @CachePut(key = "'config'") @Transactional(rollbackFor = Exception.class) public QiniuConfig config(QiniuConfig qiniuConfig) { qiniuConfig.setId(1L);