From 63f444c81f621fd1049f40391eea2e7cb5cafdf9 Mon Sep 17 00:00:00 2001 From: lhc Date: Wed, 27 Jan 2021 17:55:08 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=A1=86=E6=9E=B6yml?= =?UTF-8?q?=E7=BB=9F=E4=B8=80=E9=85=8D=E7=BD=AE=EF=BC=8C=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E7=BC=96=E8=AF=91=E5=99=A8=E4=B8=8D=E8=AF=86=E5=88=AByml?= =?UTF-8?q?=E9=97=AE=E9=A2=98=EF=BC=8C=E4=BF=AE=E5=A4=8Dredis=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 5 +++ .../com/common/base/config/FrameConfig.java | 14 ++++++++ .../com/common/base/druid/DruidConfig.java | 5 --- .../com/common/base/log/RequestLogAspect.java | 15 ++++++-- .../com/common/base/shiro/CustomRealm.java | 9 +++-- .../base/shiro/service/ShiroServiceImpl.java | 34 +++++++++++-------- .../java/com/common/base/utils/RedisUtil.java | 7 ++-- 7 files changed, 61 insertions(+), 28 deletions(-) create mode 100644 src/main/java/com/common/base/config/FrameConfig.java diff --git a/pom.xml b/pom.xml index 86b7d31..c086230 100644 --- a/pom.xml +++ b/pom.xml @@ -139,6 +139,11 @@ sqlite-jdbc 3.32.3.2 + + org.springframework.boot + spring-boot-configuration-processor + true + org.springframework.boot spring-boot-starter-test diff --git a/src/main/java/com/common/base/config/FrameConfig.java b/src/main/java/com/common/base/config/FrameConfig.java new file mode 100644 index 0000000..803e2ec --- /dev/null +++ b/src/main/java/com/common/base/config/FrameConfig.java @@ -0,0 +1,14 @@ +package com.common.base.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +@Data +@Component +@ConfigurationProperties(prefix = "frame") +public class FrameConfig { + private Boolean isRedisLogin = false; + private Integer loginTimeout = 4; + private Boolean showControllerLog = true; +} diff --git a/src/main/java/com/common/base/druid/DruidConfig.java b/src/main/java/com/common/base/druid/DruidConfig.java index 4fd10bf..6616879 100644 --- a/src/main/java/com/common/base/druid/DruidConfig.java +++ b/src/main/java/com/common/base/druid/DruidConfig.java @@ -19,11 +19,6 @@ import java.util.Map; @Configuration public class DruidConfig implements WebMvcConfigurer { - @ConfigurationProperties(prefix = "spring.datasource") - @Bean - public DataSource druid(){ - return new DruidDataSource(); - } @ConfigurationProperties(prefix = "druid") @Bean diff --git a/src/main/java/com/common/base/log/RequestLogAspect.java b/src/main/java/com/common/base/log/RequestLogAspect.java index 4df6262..49f19e1 100644 --- a/src/main/java/com/common/base/log/RequestLogAspect.java +++ b/src/main/java/com/common/base/log/RequestLogAspect.java @@ -1,6 +1,8 @@ package com.common.base.log; import com.alibaba.fastjson.JSON; +import com.common.base.config.FrameConfig; +import com.common.base.druid.DruidAuth; import com.common.base.log.model.RequestErrorInfo; import com.common.base.log.model.RequestInfo; import org.aspectj.lang.JoinPoint; @@ -12,7 +14,10 @@ import org.aspectj.lang.annotation.Pointcut; import org.aspectj.lang.reflect.MethodSignature; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; import org.springframework.stereotype.Component; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; @@ -30,12 +35,16 @@ import java.util.*; public class RequestLogAspect { private final static Logger LOGGER = LoggerFactory.getLogger(RequestLogAspect.class); + public RequestLogAspect(FrameConfig frameConfig) { + this.frameConfig = frameConfig; + } + @Pointcut("execution(public * com..*.controller..*(..))") public void requestServer() { } - @Value("${show-controller-log}") - public boolean flag; + final + FrameConfig frameConfig; @Around("requestServer()") public Object doAround(ProceedingJoinPoint proceedingJoinPoint) throws Throwable { @@ -45,7 +54,7 @@ public class RequestLogAspect { HttpServletRequest request = attributes.getRequest(); Object result = proceedingJoinPoint.proceed(); - if (flag) { + if (frameConfig.getShowControllerLog()) { RequestInfo requestInfo = new RequestInfo(); requestInfo.setIp(request.getRemoteAddr()); requestInfo.setUrl(request.getRequestURL().toString()); diff --git a/src/main/java/com/common/base/shiro/CustomRealm.java b/src/main/java/com/common/base/shiro/CustomRealm.java index f24e081..0c9cc9e 100644 --- a/src/main/java/com/common/base/shiro/CustomRealm.java +++ b/src/main/java/com/common/base/shiro/CustomRealm.java @@ -1,6 +1,7 @@ package com.common.base.shiro; +import com.common.base.config.FrameConfig; import com.common.base.shiro.service.ShiroService; import com.common.base.shiro.service.SystemRealm; import com.common.base.utils.RedisUtil; @@ -8,6 +9,7 @@ import org.apache.shiro.authc.*; import org.apache.shiro.authz.AuthorizationInfo; import org.apache.shiro.realm.AuthorizingRealm; import org.apache.shiro.subject.PrincipalCollection; +import org.springframework.beans.factory.annotation.Autowired; import javax.annotation.Resource; import java.util.Date; @@ -21,6 +23,9 @@ public class CustomRealm extends AuthorizingRealm { @Resource private RedisUtil redisUtil; + @Autowired + FrameConfig frameConfig; + @Resource private SystemRealm systemRealm; @@ -35,8 +40,8 @@ public class CustomRealm extends AuthorizingRealm { protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) { String accessToken = (String) token.getPrincipal(); String userId; - if (RedisUtil.isUseful) { - Map hashMap = redisUtil.hmget(accessToken); + if (frameConfig.getIsRedisLogin()) { + Map hashMap = (Map) redisUtil.hget("tokenSession",accessToken); userId = (String) hashMap.get("userId"); if (userId == null) { throw new IncorrectCredentialsException("token失效,请重新登录"); diff --git a/src/main/java/com/common/base/shiro/service/ShiroServiceImpl.java b/src/main/java/com/common/base/shiro/service/ShiroServiceImpl.java index 53c1427..7ead69c 100644 --- a/src/main/java/com/common/base/shiro/service/ShiroServiceImpl.java +++ b/src/main/java/com/common/base/shiro/service/ShiroServiceImpl.java @@ -2,10 +2,12 @@ package com.common.base.shiro.service; import com.common.base.common.ResultVO; import com.common.base.common.ServiceException; +import com.common.base.config.FrameConfig; import com.common.base.dao.FtTokenDao; import com.common.base.shiro.FtToken; import com.common.base.utils.RedisUtil; import com.common.base.utils.TokenProccessor; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import tk.mybatis.mapper.entity.Example; @@ -24,11 +26,13 @@ public class ShiroServiceImpl implements ShiroService { */ private static int EXPIRE; - @Value("${login-time-out}") - public void setHost(int hours) { - ShiroServiceImpl.EXPIRE = hours * 3600 * 1000; - } + private static Boolean isRedisLogin; + @Autowired + public void setHost(FrameConfig frameConfig) { + ShiroServiceImpl.EXPIRE = frameConfig.getLoginTimeout() * 3600 * 1000; + isRedisLogin = frameConfig.getIsRedisLogin(); + } @Resource FtTokenDao tokenMapper; @@ -45,19 +49,19 @@ public class ShiroServiceImpl implements ShiroService { *@param [userId] *@return Result */ - public ResultVO createToken(String userId,String token,Date expireTime) { + public ResultVO createToken(String userId, String token, Date expireTime) { Map result = new HashMap<>(); FtToken tokenEntity = new FtToken(); Date now = new Date(); // 是否使用redis存入token - if (RedisUtil.isUseful) { - boolean flag = redisUtil.hset("session", String.valueOf(userId), token,EXPIRE / 1000); + if (isRedisLogin) { + boolean flag = redisUtil.hset("session", String.valueOf(userId), token, EXPIRE / 1000); if (flag) { Map map = new HashMap<>(2); map.put("userId", userId); - map.put("expireTime",expireTime); - flag = redisUtil.hmset(token, map, EXPIRE / 1000); + map.put("expireTime", expireTime); + flag = redisUtil.hset("tokenSession",token, map, EXPIRE / 1000); if (!flag) { throw new ServiceException("登陆失败"); } @@ -70,7 +74,7 @@ public class ShiroServiceImpl implements ShiroService { tokenEntity = tokenMapper.selectOne(tokenEntity); if (tokenEntity == null) { tokenEntity = new FtToken(); - tokenEntity.setTokenId(UUID.randomUUID().toString()+System.currentTimeMillis()); + tokenEntity.setTokenId(UUID.randomUUID().toString() + System.currentTimeMillis()); tokenEntity.setUserId(userId); tokenEntity.setToken(token); tokenEntity.setUpdateTime(now); @@ -93,11 +97,11 @@ public class ShiroServiceImpl implements ShiroService { @Override public ResultVO logout(String accessToken) { - if (RedisUtil.isUseful) { - Map map = redisUtil.hmget(accessToken); - Integer userId = (Integer) map.get("userId"); - redisUtil.del(accessToken); - redisUtil.hdel("session", String.valueOf(userId)); + if (isRedisLogin) { + Map map = (Map) redisUtil.hget("tokenSession",accessToken); + String userId = (String) map.get("userId"); + redisUtil.hdel("tokenSession",accessToken); + redisUtil.hdel("session", userId); return ResultVO.getSuccess(); } else { //生成一个token diff --git a/src/main/java/com/common/base/utils/RedisUtil.java b/src/main/java/com/common/base/utils/RedisUtil.java index 0674480..81846a3 100644 --- a/src/main/java/com/common/base/utils/RedisUtil.java +++ b/src/main/java/com/common/base/utils/RedisUtil.java @@ -5,6 +5,7 @@ import java.util.Map; import java.util.Set; import java.util.concurrent.TimeUnit; +import com.common.base.config.FrameConfig; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -27,9 +28,9 @@ public final class RedisUtil { public static boolean isUseful; // 通过yml文件获取host - @Value("${isRedisLogin}") - public void setHost(boolean isUseful) { - RedisUtil.isUseful = isUseful; + @Autowired + public void setHost(FrameConfig config) { + RedisUtil.isUseful = config.getIsRedisLogin(); } private final static Logger logger = LoggerFactory.getLogger(RedisUtil.class);