From 6dc9c359e303268bc332dcf79d8347a8048b1c14 Mon Sep 17 00:00:00 2001 From: fanxb Date: Wed, 13 Mar 2019 23:14:35 +0800 Subject: [PATCH] no message --- .../infinova/sso/controller/JwtController.java | 11 +- .../java/com/infinova/sso/entity/JwtInfo.java | 34 ----- .../java/com/infinova/sso/service/JwtService.java | 124 ++++-------------- .../main/java/com/infinova/sso/util/JwtUtil.java | 4 +- .../sso/src/main/resources/application.yml | 8 +- .../sso/src/main/resources/static/index.html | 34 ++--- .../sso/src/main/resources/static/login.html | 11 +- .../sso/src/main/resources/static/main.js | 18 --- .../java/com/example/sysa/controller/Main.java | 10 +- .../com/example/sysa/entity/ReturnEntity.java | 8 ++ .../java/com/example/sysa/filter/LoginFilter.java | 47 ++++--- .../src/main/resources/application.properties | 2 - .../sys-a/src/main/resources/application.yml | 6 + .../sys-a/src/main/resources/static/index.html | 30 +++-- .../sys-a/src/main/resources/static/main.js | 24 ---- .../sys-a/src/main/resources/static/redirect.html | 18 --- 16 files changed, 111 insertions(+), 278 deletions(-) delete mode 100644 1.SSO单点登录/sso/src/main/java/com/infinova/sso/entity/JwtInfo.java delete mode 100644 1.SSO单点登录/sys-a/src/main/resources/application.properties create mode 100644 1.SSO单点登录/sys-a/src/main/resources/application.yml delete mode 100644 1.SSO单点登录/sys-a/src/main/resources/static/main.js delete mode 100644 1.SSO单点登录/sys-a/src/main/resources/static/redirect.html 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 ca07929..4654c7d 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 @@ -35,15 +35,8 @@ public class JwtController { } @PostMapping("/checkJwt") - public ReturnEntity checkJwt(@RequestBody JSONArray tokenList) { - return ReturnEntity.successResult(service.checkJwt(tokenList)); - } - - @GetMapping("/refreshJwt") - public ReturnEntity refreshJwt() { - String oldToken = HttpUtil.getData(JwtService.JWT_KEY); - String newToken = service.refreshJwt(oldToken); - return ReturnEntity.successResult(newToken); + public ReturnEntity checkJwt(String token) { + return ReturnEntity.successResult(service.checkJwt(token)); } @GetMapping("/inValid") diff --git a/1.SSO单点登录/sso/src/main/java/com/infinova/sso/entity/JwtInfo.java b/1.SSO单点登录/sso/src/main/java/com/infinova/sso/entity/JwtInfo.java deleted file mode 100644 index 1394468..0000000 --- a/1.SSO单点登录/sso/src/main/java/com/infinova/sso/entity/JwtInfo.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.infinova.sso.entity; - -/** - * 类功能简述: - * 类功能详述: - * - * @author fanxb - * @date 2019/3/7 16:46 - */ -public class JwtInfo { - private String secret; - private long lastRefreshTime; - - public JwtInfo(String secret, long lastRefreshTime) { - this.secret = secret; - this.lastRefreshTime = lastRefreshTime; - } - - public String getSecret() { - return secret; - } - - public void setSecret(String secret) { - this.secret = secret; - } - - public long getLastRefreshTime() { - return lastRefreshTime; - } - - public void setLastRefreshTime(long lastRefreshTime) { - this.lastRefreshTime = lastRefreshTime; - } -} diff --git a/1.SSO单点登录/sso/src/main/java/com/infinova/sso/service/JwtService.java b/1.SSO单点登录/sso/src/main/java/com/infinova/sso/service/JwtService.java index e14c126..d1159f9 100644 --- a/1.SSO单点登录/sso/src/main/java/com/infinova/sso/service/JwtService.java +++ b/1.SSO单点登录/sso/src/main/java/com/infinova/sso/service/JwtService.java @@ -1,21 +1,16 @@ package com.infinova.sso.service; -import com.alibaba.fastjson.JSONArray; -import com.auth0.jwt.JWT; -import com.infinova.sso.entity.JwtInfo; import com.infinova.sso.entity.User; import com.infinova.sso.exception.CustomException; -import com.infinova.sso.util.HttpUtil; import com.infinova.sso.util.JwtUtil; +import com.infinova.sso.util.RedisUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.EnableScheduling; -import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; -import javax.servlet.http.Cookie; import java.util.*; -import java.util.concurrent.ConcurrentHashMap; /** * 类功能简述: @@ -33,18 +28,14 @@ public class JwtService { private Logger logger = LoggerFactory.getLogger(JwtService.class); /** - * 存储jwt与secret对应关系 + * jwt token超时时间,单位ms */ - private static Map jwtMap = new ConcurrentHashMap<>(); + private static int expireTime; - /** - * jwt token超时时间,单位s - */ - private static final int TIME_OUT = 60 * 60; - /** - * 在此时间段内,一个jwt不能重复刷新 - */ - private static final int REFRESH_INTERVAL = 5 * 60 * 1000; + @Value("${jwt_expire_time}") + public void setExpireTime(int expireTime) { + JwtService.expireTime = expireTime * 60 * 1000; + } /** * Description:登录获取token @@ -58,77 +49,48 @@ public class JwtService { //进行登录校验 try { if (user.getName().equalsIgnoreCase(user.getPassword())) { - String token = this.generateNewJwt(user.getName()); - setCookie(token, TIME_OUT); - return token; + return this.generateNewJwt(user.getName()); } else { logger.info("账号密码错误:{}{}", user.getName(), user.getPassword()); throw new CustomException("账号密码错误"); } } catch (Exception e) { logger.info("账号密码错误:{},{}", user.getName(), user.getPassword()); - throw new CustomException("账号密码错误"); + throw new CustomException(e, "账号密码错误"); } } - /** - * Description:刷新token - * - * @return java.lang.String - * @author fanxb - * @date 2019/3/5 11:06 - */ - public String refreshJwt(String token) { - try { - JwtInfo info = jwtMap.get(token); - Long nowTime = System.currentTimeMillis(); - if (nowTime - info.getLastRefreshTime() < REFRESH_INTERVAL) { - throw new CustomException("token刷新间隔过短"); - } - info.setLastRefreshTime(nowTime); - String id = JwtUtil.decode(token, info.getSecret()).get("loginId").asString(); - String newToken = generateNewJwt(id); - setCookie(newToken, TIME_OUT); - return newToken; - } catch (Exception e) { - throw new CustomException(e, "token校验失败"); - } - } /** * Description: 生成新的jwt,并放入jwtMap中 * * @return java.lang.String * @author fanxb - * @date 2019/3/5 10:44 + * date 2019/3/5 10:44 */ private String generateNewJwt(String name) { String secret = UUID.randomUUID().toString().replaceAll("-", ""); - String token = JwtUtil.encode(name, secret, TIME_OUT); - jwtMap.put(token, new JwtInfo(secret, 0)); + String token = JwtUtil.encode(name, secret, expireTime); + RedisUtil.set(token, secret, expireTime); return token; } /** - * Description:检查jwt有效性,返回失效jwt + * Description:检查jwt有效性 * - * @return List 失效jwt列表 + * @return Boolean * @author fanxb * @date 2019/3/4 18:47 */ - public List checkJwt(JSONArray tokens) { - List res = new ArrayList<>(); - tokens.forEach(item -> { - String jwt = (String) item; - try { - String secret = jwtMap.get(jwt).getSecret(); - JwtUtil.decode(jwt, secret); - } catch (Exception e) { - e.printStackTrace(); - res.add(jwt); - } - }); - return res; + public Boolean checkJwt(String jwt) { + try { + String secret = RedisUtil.redisTemplate.opsForValue().get(jwt); + JwtUtil.decode(jwt, secret); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } } /** @@ -138,43 +100,7 @@ public class JwtService { * @date 2019/3/4 19:58 */ public void inValid(String jwt) { - jwtMap.remove(jwt); - setCookie("", 0); + RedisUtil.delete(jwt); } - /** - * Description:定时检查过期的jwt,并从map中删除 - * - * @author fanxb - * @date 2019/3/5 18:16 - */ - @Scheduled(fixedRate = 10 * 1000) - private void cleanJwtMap() { - Date now = new Date(); - Set keys = jwtMap.keySet(); - keys.forEach(item -> { - if (now.getTime() > JWT.decode(item).getExpiresAt().getTime()) { - jwtMap.remove(item); - logger.info("清理掉了:{}", item); - } - }); - } - - /** - * Description: 写入jwt token到cookie - * - * @param token token - * @param maxAge 失效时间 单位s - * @return void - * @author fanxb - * @date 2019/3/5 18:43 - */ - private void setCookie(String token, int maxAge) { - Cookie cookie = new Cookie(JWT_KEY, token); - cookie.setMaxAge(maxAge); - cookie.setPath("/"); - HttpUtil.getResponse().addCookie(cookie); - } - - } diff --git a/1.SSO单点登录/sso/src/main/java/com/infinova/sso/util/JwtUtil.java b/1.SSO单点登录/sso/src/main/java/com/infinova/sso/util/JwtUtil.java index 6b6bfaa..b900cdd 100644 --- a/1.SSO单点登录/sso/src/main/java/com/infinova/sso/util/JwtUtil.java +++ b/1.SSO单点登录/sso/src/main/java/com/infinova/sso/util/JwtUtil.java @@ -33,7 +33,7 @@ public class JwtUtil { Algorithm algorithm = Algorithm.HMAC256(secret); String token = JWT.create() //设置过期时间为一个小时 - .withExpiresAt(new Date(System.currentTimeMillis() + timeOut * 1000)) + .withExpiresAt(new Date(System.currentTimeMillis() + timeOut)) //设置负载 .withClaim("name", name) .sign(algorithm); @@ -45,7 +45,7 @@ public class JwtUtil { * * @param token token * @param secret secret - * @return java.util.Map + * @return java.util.Map * @author fanxb * @date 2019/3/4 18:14 */ diff --git a/1.SSO单点登录/sso/src/main/resources/application.yml b/1.SSO单点登录/sso/src/main/resources/application.yml index f00ada3..2d06dbf 100644 --- a/1.SSO单点登录/sso/src/main/resources/application.yml +++ b/1.SSO单点登录/sso/src/main/resources/application.yml @@ -1,5 +1,5 @@ server: - port: 8081 + port: 8080 servlet: context-path: /sso spring: @@ -9,7 +9,7 @@ spring: type: redis redis: database: 0 - host: 10.82.27.177 + host: 192.168.1.100 port: 6379 password: # 连接超时时间(ms) @@ -25,4 +25,8 @@ spring: max-idle: 8 # 最小空闲链接数 min-idle: 0 + mvc: + static-path-pattern: /static/** +# jwt过期时间,单位分钟 +jwt_expire_time: 60 diff --git a/1.SSO单点登录/sso/src/main/resources/static/index.html b/1.SSO单点登录/sso/src/main/resources/static/index.html index 8d40c7e..03c92c2 100644 --- a/1.SSO单点登录/sso/src/main/resources/static/index.html +++ b/1.SSO单点登录/sso/src/main/resources/static/index.html @@ -5,59 +5,41 @@ 认证中心
这里是认证中心主页
-
- -
\ No newline at end of file diff --git a/1.SSO单点登录/sso/src/main/resources/static/login.html b/1.SSO单点登录/sso/src/main/resources/static/login.html index e0e5da1..966ba19 100644 --- a/1.SSO单点登录/sso/src/main/resources/static/login.html +++ b/1.SSO单点登录/sso/src/main/resources/static/login.html @@ -11,26 +11,23 @@ - - + - diff --git a/1.SSO单点登录/sys-a/src/main/resources/static/main.js b/1.SSO单点登录/sys-a/src/main/resources/static/main.js deleted file mode 100644 index 07c0a87..0000000 --- a/1.SSO单点登录/sys-a/src/main/resources/static/main.js +++ /dev/null @@ -1,24 +0,0 @@ -function getToken() { - return window.localStorage.token || null; -} - -function setToken(token) { - window.localStorage.token = token; -} - -function getUserName() { - var token = getToken(); - if (token == null) { - return "未登录"; - } else { - var info = token.split(".")[1]; - return JSON.parse(window.atob(info)).name; - } -} - -function getUrlParam(name) { - var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); //构造一个含有目标参数的正则表达式对象 - var r = window.location.search.substr(1).match(reg); //匹配目标参数 - if (r != null) return unescape(r[2]); - return null; //返回参数值 -} \ No newline at end of file diff --git a/1.SSO单点登录/sys-a/src/main/resources/static/redirect.html b/1.SSO单点登录/sys-a/src/main/resources/static/redirect.html deleted file mode 100644 index daf0a2c..0000000 --- a/1.SSO单点登录/sys-a/src/main/resources/static/redirect.html +++ /dev/null @@ -1,18 +0,0 @@ - - - - - 登录成功回调地址 - - - - - - - - \ No newline at end of file