diff --git a/1.SSO单点登录/sso/pom.xml b/1.SSO单点登录/sso/pom.xml index 02ca007..7781a5e 100644 --- a/1.SSO单点登录/sso/pom.xml +++ b/1.SSO单点登录/sso/pom.xml @@ -28,6 +28,22 @@ org.springframework.boot spring-boot-starter-data-redis + + + io.lettuce + lettuce-core + + + + + + org.apache.commons + commons-pool2 + + + + redis.clients + jedis diff --git a/1.SSO单点登录/sso/src/main/java/com/infinova/sso/config/RedisConfig.java b/1.SSO单点登录/sso/src/main/java/com/infinova/sso/config/RedisConfig.java index ed26de3..1fa30ce 100644 --- a/1.SSO单点登录/sso/src/main/java/com/infinova/sso/config/RedisConfig.java +++ b/1.SSO单点登录/sso/src/main/java/com/infinova/sso/config/RedisConfig.java @@ -3,6 +3,9 @@ package com.infinova.sso.config; import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.PropertyAccessor; import com.fasterxml.jackson.databind.ObjectMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; import org.springframework.cache.CacheManager; import org.springframework.cache.annotation.CachingConfigurerSupport; import org.springframework.cache.annotation.EnableCaching; @@ -12,11 +15,13 @@ import org.springframework.data.redis.cache.RedisCacheConfiguration; import org.springframework.data.redis.cache.RedisCacheManager; import org.springframework.data.redis.cache.RedisCacheWriter; import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.connection.jedis.JedisConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; import org.springframework.data.redis.serializer.RedisSerializer; import org.springframework.data.redis.serializer.StringRedisSerializer; +import redis.clients.jedis.JedisPoolConfig; import java.time.Duration; @@ -31,6 +36,28 @@ import java.time.Duration; @Configuration public class RedisConfig extends CachingConfigurerSupport { + private static Logger logger = LoggerFactory.getLogger(RedisConfig.class); + + @Value("${spring.redis.host}") + private String host; + @Value("${spring.redis.password}") + private String password; + @Value("${spring.redis.port}") + private int port; + @Value("${spring.redis.timeout}") + private int timeout; + @Value("${spring.redis.database}") + private int database; + @Value("${spring.redis.jedis.pool.max-idle}") + private int maxIdle; + @Value("${spring.redis.jedis.pool.min-idle}") + private int minIdle; + @Value("${spring.redis.jedis.pool.max-wait}") + private long maxWaitMillis; + @Value("${spring.redis.jedis.pool.max-active}") + private int maxActive; + + /** * 设置缓存管理器,这里可以配置默认过期时间等 * @@ -38,11 +65,11 @@ public class RedisConfig extends CachingConfigurerSupport { * @return */ @Bean - public CacheManager cacheManager(RedisConnectionFactory connectionFactory) { + public CacheManager cacheManager(JedisConnectionFactory jedisConnectionFactory) { RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration .defaultCacheConfig() .entryTtl(Duration.ofSeconds(60)); - RedisCacheWriter redisCacheWriter = RedisCacheWriter.nonLockingRedisCacheWriter(connectionFactory); + RedisCacheWriter redisCacheWriter = RedisCacheWriter.nonLockingRedisCacheWriter(jedisConnectionFactory); RedisCacheManager manager = new RedisCacheManager(redisCacheWriter, redisCacheConfiguration); return manager; } @@ -64,4 +91,27 @@ public class RedisConfig extends CachingConfigurerSupport { template.afterPropertiesSet(); return template; } + + + @Bean + public JedisConnectionFactory jedisConnectionFactory() { + logger.info("jedisConnectionFactory:初始化了"); + JedisPoolConfig config = new JedisPoolConfig(); + config.setMaxIdle(maxIdle); + config.setMinIdle(minIdle); + config.setMaxWaitMillis(maxWaitMillis); + config.setMaxTotal(maxActive); + //链接耗尽时是否阻塞,默认true + config.setBlockWhenExhausted(true); + //是否启用pool的jmx管理功能,默认true + config.setJmxEnabled(true); + JedisConnectionFactory factory = new JedisConnectionFactory(); + factory.setPoolConfig(config); + factory.setHostName(host); + factory.setPort(port); + factory.setPassword(password); + factory.setDatabase(database); + factory.setTimeout(timeout); + return factory; + } } diff --git a/1.SSO单点登录/sso/src/main/java/com/infinova/sso/controller/JwtController.java b/1.SSO单点登录/sso/src/main/java/com/infinova/sso/controller/JwtController.java index 4654c7d..274d51d 100644 --- a/1.SSO单点登录/sso/src/main/java/com/infinova/sso/controller/JwtController.java +++ b/1.SSO单点登录/sso/src/main/java/com/infinova/sso/controller/JwtController.java @@ -1,10 +1,8 @@ package com.infinova.sso.controller; -import com.alibaba.fastjson.JSONArray; import com.infinova.sso.entity.ReturnEntity; import com.infinova.sso.entity.User; import com.infinova.sso.service.JwtService; -import com.infinova.sso.util.HttpUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; @@ -34,14 +32,13 @@ public class JwtController { return ReturnEntity.successResult(token); } - @PostMapping("/checkJwt") + @GetMapping("/checkJwt") public ReturnEntity checkJwt(String token) { return ReturnEntity.successResult(service.checkJwt(token)); } @GetMapping("/inValid") - public ReturnEntity inValid() { - String token = HttpUtil.getData(JwtService.JWT_KEY); + public ReturnEntity inValid(String token) { service.inValid(token); return ReturnEntity.successResult(null); } diff --git a/1.SSO单点登录/sso/src/main/java/com/infinova/sso/util/RedisUtil.java b/1.SSO单点登录/sso/src/main/java/com/infinova/sso/util/RedisUtil.java index 4dbe147..4d82e68 100644 --- a/1.SSO单点登录/sso/src/main/java/com/infinova/sso/util/RedisUtil.java +++ b/1.SSO单点登录/sso/src/main/java/com/infinova/sso/util/RedisUtil.java @@ -1,8 +1,7 @@ package com.infinova.sso.util; -import com.alibaba.fastjson.JSON; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Component; import java.util.concurrent.TimeUnit; @@ -18,20 +17,23 @@ import java.util.concurrent.TimeUnit; public class RedisUtil { private static final int DEFAULT_EXPIRE_TIME = 60 * 1000; - public static RedisTemplate redisTemplate; + public static StringRedisTemplate redisTemplate; @Autowired - public void setRedisTemplate(RedisTemplate redisTemplate) { + public void setRedisTemplate(StringRedisTemplate redisTemplate) { RedisUtil.redisTemplate = redisTemplate; } + @Autowired + + /** * 设置键值对,使用默认过期时间 * * @param key 键 * @param value 值 */ - public static void set(String key, Object value) { + public static void set(String key, String value) { set(key, value, DEFAULT_EXPIRE_TIME); } @@ -42,8 +44,8 @@ public class RedisUtil { * @param value value * @param expireTime 过期时间 */ - public static void set(String key, Object value, long expireTime) { - redisTemplate.opsForValue().set(key, JSON.toJSONString(value)); + public static void set(String key, String value, long expireTime) { + redisTemplate.opsForValue().set(key, value); redisTemplate.expire(key, expireTime, TimeUnit.MILLISECONDS); } diff --git a/1.SSO单点登录/sso/src/main/resources/application.yml b/1.SSO单点登录/sso/src/main/resources/application.yml index 2d06dbf..584b359 100644 --- a/1.SSO单点登录/sso/src/main/resources/application.yml +++ b/1.SSO单点登录/sso/src/main/resources/application.yml @@ -9,22 +9,22 @@ spring: type: redis redis: database: 0 - host: 192.168.1.100 + host: 10.82.27.177 port: 6379 password: # 连接超时时间(ms) - timeout: 1000ms + timeout: 5000 # 高版本springboot中使用jedis或者lettuce jedis: pool: # 连接池最大连接数(负值表示无限制) max-active: 8 # 连接池最大阻塞等待时间(负值无限制) - max-wait: 5000ms + max-wait: 5000 # 最大空闲链接数 max-idle: 8 # 最小空闲链接数 - min-idle: 0 + min-idle: 1 mvc: static-path-pattern: /static/** # jwt过期时间,单位分钟 diff --git a/1.SSO单点登录/sso/src/main/resources/static/index.html b/1.SSO单点登录/sso/src/main/resources/static/index.html index 03c92c2..c03e868 100644 --- a/1.SSO单点登录/sso/src/main/resources/static/index.html +++ b/1.SSO单点登录/sso/src/main/resources/static/index.html @@ -25,9 +25,10 @@ } else { //有token,检查token是否还有效 $.get("/sso/checkJwt?token=" + localStorage.getItem("token"), function (res) { - if (res.code === 1) { + console.log(res); + if (res.data === true) { alert('已登录,跳转到回调页面'); - window.location.href = getUrlParam("redirect") + "&token=" + getToken(); + window.location.href = getUrlParam("redirect") + "?token=" + localStorage.getItem("token"); } else { goLogin(); } diff --git a/1.SSO单点登录/sso/src/main/resources/static/login.html b/1.SSO单点登录/sso/src/main/resources/static/login.html index 966ba19..115f37a 100644 --- a/1.SSO单点登录/sso/src/main/resources/static/login.html +++ b/1.SSO单点登录/sso/src/main/resources/static/login.html @@ -25,9 +25,9 @@ data: JSON.stringify({name: name, password: password}), success: function (res) { if (res.code === 1) { - setToken(res.data); + localStorage.setItem("token", res.data); alert("登录成功,跳转到回调地址"); - window.location.href = getUrlParam("redirect") + "&token=" + res.data; + window.location.href = getUrlParam("redirect") + "?token=" + res.data; } else { alert("账号密码错误"); } diff --git a/1.SSO单点登录/sys-a/src/main/java/com/example/sysa/controller/Main.java b/1.SSO单点登录/sys-a/src/main/java/com/example/sysa/controller/Main.java index 94656c6..1b9f50a 100644 --- a/1.SSO单点登录/sys-a/src/main/java/com/example/sysa/controller/Main.java +++ b/1.SSO单点登录/sys-a/src/main/java/com/example/sysa/controller/Main.java @@ -2,7 +2,6 @@ package com.example.sysa.controller; import com.example.sysa.entity.ReturnEntity; import com.example.sysa.entity.UserContext; -import com.example.sysa.filter.LoginFilter; import com.example.sysa.util.HttpClient; import com.example.sysa.util.UserContextHolder; import org.springframework.beans.factory.annotation.Value; @@ -31,7 +30,7 @@ public class Main { @RequestMapping("/logout") public ReturnEntity logout() throws Exception { UserContext context = UserContextHolder.get(); - HttpClient.get(serverHost + "/clearToken?token=" + context.getToken()); + HttpClient.get(serverHost + "/inValid?token=" + context.getToken()); return null; } } diff --git a/1.SSO单点登录/sys-a/src/main/java/com/example/sysa/filter/LoginFilter.java b/1.SSO单点登录/sys-a/src/main/java/com/example/sysa/filter/LoginFilter.java index bc8c803..75c7803 100644 --- a/1.SSO单点登录/sys-a/src/main/java/com/example/sysa/filter/LoginFilter.java +++ b/1.SSO单点登录/sys-a/src/main/java/com/example/sysa/filter/LoginFilter.java @@ -17,8 +17,6 @@ import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; /** @@ -76,7 +74,7 @@ public class LoginFilter implements Filter { return false; } JSONObject object = HttpClient.get(serverHost + "/checkJwt?token=" + jwt); - return object.getInteger("code") == 1; + return object.getBoolean("data"); } catch (Exception e) { logger.error("向认证中心请求失败", e); return false; diff --git a/1.SSO单点登录/sys-a/src/main/resources/static/index.html b/1.SSO单点登录/sys-a/src/main/resources/static/index.html index 010b660..bd70646 100644 --- a/1.SSO单点登录/sys-a/src/main/resources/static/index.html +++ b/1.SSO单点登录/sys-a/src/main/resources/static/index.html @@ -2,7 +2,7 @@ - 系统A + 系统
@@ -14,16 +14,12 @@ diff --git a/1.SSO单点登录/sys-a/src/main/resources/static/redirect.html b/1.SSO单点登录/sys-a/src/main/resources/static/redirect.html new file mode 100644 index 0000000..c599f32 --- /dev/null +++ b/1.SSO单点登录/sys-a/src/main/resources/static/redirect.html @@ -0,0 +1,24 @@ + + + + + 系统 + + + + + + \ No newline at end of file diff --git a/springcloud/configFolder/licensingservice/licensingservice-dev.yml b/springcloud/configFolder/licensingservice/licensingservice-dev.yml new file mode 100644 index 0000000..75b95c2 --- /dev/null +++ b/springcloud/configFolder/licensingservice/licensingservice-dev.yml @@ -0,0 +1,2 @@ +server: + port: 10011 \ No newline at end of file diff --git a/springcloud/configFolder/licensingservice/licensingservice-prod.yml b/springcloud/configFolder/licensingservice/licensingservice-prod.yml new file mode 100644 index 0000000..e3e8735 --- /dev/null +++ b/springcloud/configFolder/licensingservice/licensingservice-prod.yml @@ -0,0 +1,3 @@ +server: + port: 10012 + \ No newline at end of file diff --git a/springcloud/configFolder/licensingservice/licensingservice.yml b/springcloud/configFolder/licensingservice/licensingservice.yml new file mode 100644 index 0000000..6ad51a0 --- /dev/null +++ b/springcloud/configFolder/licensingservice/licensingservice.yml @@ -0,0 +1,5 @@ +server: + port: 10001 +spring: + application: + name: licensingservice \ No newline at end of file diff --git a/springcloud/configFolder/organizationservice/organizationservice-dev.yml b/springcloud/configFolder/organizationservice/organizationservice-dev.yml new file mode 100644 index 0000000..821192d --- /dev/null +++ b/springcloud/configFolder/organizationservice/organizationservice-dev.yml @@ -0,0 +1,2 @@ +server: + port: 10012 \ No newline at end of file diff --git a/springcloud/configFolder/organizationservice/organizationservice-prod.yml b/springcloud/configFolder/organizationservice/organizationservice-prod.yml new file mode 100644 index 0000000..e3e8735 --- /dev/null +++ b/springcloud/configFolder/organizationservice/organizationservice-prod.yml @@ -0,0 +1,3 @@ +server: + port: 10012 + \ No newline at end of file diff --git a/springcloud/configFolder/organizationservice/organizationservice.yml b/springcloud/configFolder/organizationservice/organizationservice.yml new file mode 100644 index 0000000..451c207 --- /dev/null +++ b/springcloud/configFolder/organizationservice/organizationservice.yml @@ -0,0 +1,3 @@ +spring: + application: + name: organizationservice \ No newline at end of file