diff --git a/esua-epdc/epdc-auth/pom.xml b/esua-epdc/epdc-auth/pom.xml index fbff0aacd..053491122 100644 --- a/esua-epdc/epdc-auth/pom.xml +++ b/esua-epdc/epdc-auth/pom.xml @@ -23,6 +23,13 @@ epdc-admin-client 1.0.0 + + + com.esua.epdc + epdc-common-clienttoken + 1.0.0 + + org.springframework.boot spring-boot-starter-web diff --git a/esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/controller/AuthController.java b/esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/controller/AuthController.java index 806c6d7cd..a2bebca12 100644 --- a/esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/controller/AuthController.java +++ b/esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/controller/AuthController.java @@ -1,16 +1,16 @@ /** * Copyright (c) 2018 人人开源 All rights reserved. - * + *

* https://www.renren.io - * + *

* 版权所有,侵权必究! */ package com.elink.esua.epdc.controller; +import com.elink.esua.epdc.common.token.dto.TokenDto; import com.elink.esua.epdc.commons.tools.constant.Constant; import com.elink.esua.epdc.commons.tools.exception.ErrorCode; -import com.elink.esua.epdc.commons.tools.security.user.CpUserDetail; import com.elink.esua.epdc.commons.tools.security.user.UserDetail; import com.elink.esua.epdc.commons.tools.utils.Result; import com.elink.esua.epdc.commons.tools.validator.AssertUtils; @@ -40,7 +40,7 @@ import java.io.IOException; * @since 1.0.0 */ @RestController -@Api(tags="授权管理") +@Api(tags = "授权管理") public class AuthController { @Autowired private AuthService authService; @@ -50,9 +50,9 @@ public class AuthController { private CaptchaService captchaService; @GetMapping("captcha") - @ApiOperation(value = "验证码", produces="application/octet-stream") - @ApiImplicitParam(paramType = "query", dataType="string", name = "uuid", required = true) - public void captcha(HttpServletResponse response, String uuid)throws IOException { + @ApiOperation(value = "验证码", produces = "application/octet-stream") + @ApiImplicitParam(paramType = "query", dataType = "string", name = "uuid", required = true) + public void captcha(HttpServletResponse response, String uuid) throws IOException { //uuid不能为空 AssertUtils.isBlank(uuid, ErrorCode.IDENTIFIER_NOT_NULL); @@ -68,13 +68,13 @@ public class AuthController { @PostMapping(value = "login") @ApiOperation(value = "登录") - public Result login(@RequestBody LoginDTO login){ + public Result login(@RequestBody LoginDTO login) { //效验数据 ValidatorUtils.validateEntity(login); //验证码是否正确 boolean flag = captchaService.validate(login.getUuid(), login.getCaptcha()); - if(!flag){ + if (!flag) { return new Result().error(ErrorCode.CAPTCHA_ERROR); } @@ -86,7 +86,7 @@ public class AuthController { @PostMapping(value = "logout") @ApiOperation(value = "退出") - public Result logout(HttpServletRequest request){ + public Result logout(HttpServletRequest request) { String userId = request.getHeader(Constant.USER_KEY); authService.logout(Long.parseLong(userId)); @@ -96,27 +96,27 @@ public class AuthController { /** * 是否有资源访问权限 - * @param token token - * @param url 资源URL - * @param method 请求方式 * + * @param token token + * @param url 资源URL + * @param method 请求方式 * @return 有访问权限,则返回用户信息 */ @PostMapping("resource") public Result resource(@RequestParam(value = "token", required = false) String token, - @RequestParam("url") String url, @RequestParam("method") String method){ + @RequestParam("url") String url, @RequestParam("method") String method) { UserDetail data = resourceService.resource(token, url, method); return new Result().ok(data); } @GetMapping(value = "getLoginUserInfo") - public Result getLoginUserInfo(String token) { + public Result getLoginUserInfo(String token) { - CpUserDetail cpUserDetail = authService.getLoginUserInfo(token); + TokenDto cpUserDetail = authService.getLoginUserInfo(token); if (cpUserDetail != null) { - return new Result().ok(cpUserDetail); + return new Result().ok(cpUserDetail); } - return new Result().error(); + return new Result().error(); } } diff --git a/esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/service/AuthService.java b/esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/service/AuthService.java index 1f500829c..48c57434c 100644 --- a/esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/service/AuthService.java +++ b/esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/service/AuthService.java @@ -1,14 +1,14 @@ /** * Copyright (c) 2018 人人开源 All rights reserved. - * + *

* https://www.renren.io - * + *

* 版权所有,侵权必究! */ package com.elink.esua.epdc.service; -import com.elink.esua.epdc.commons.tools.security.user.CpUserDetail; +import com.elink.esua.epdc.common.token.dto.TokenDto; import com.elink.esua.epdc.dto.AuthorizationDTO; import com.elink.esua.epdc.dto.LoginDTO; @@ -30,5 +30,5 @@ public interface AuthService { */ void logout(Long userId); - CpUserDetail getLoginUserInfo(String token); + TokenDto getLoginUserInfo(String token); } diff --git a/esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/service/impl/AuthServiceImpl.java b/esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/service/impl/AuthServiceImpl.java index cd792001d..fa2f63e88 100644 --- a/esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/service/impl/AuthServiceImpl.java +++ b/esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/service/impl/AuthServiceImpl.java @@ -1,16 +1,15 @@ /** * Copyright (c) 2018 人人开源 All rights reserved. - * + *

* https://www.renren.io - * + *

* 版权所有,侵权必究! */ package com.elink.esua.epdc.service.impl; -import com.elink.esua.epdc.commons.tools.redis.CpUserDetailRedis; -import com.elink.esua.epdc.commons.tools.security.user.CpUserDetail; -import com.elink.esua.epdc.enums.UserStatusEnum; +import com.elink.esua.epdc.common.token.dto.TokenDto; +import com.elink.esua.epdc.common.token.util.CpUserDetailRedis; import com.elink.esua.epdc.commons.tools.exception.ErrorCode; import com.elink.esua.epdc.commons.tools.exception.RenException; import com.elink.esua.epdc.commons.tools.log.SysLogLogin; @@ -27,6 +26,7 @@ import com.elink.esua.epdc.commons.tools.utils.IpUtils; import com.elink.esua.epdc.commons.tools.utils.Result; import com.elink.esua.epdc.dto.AuthorizationDTO; import com.elink.esua.epdc.dto.LoginDTO; +import com.elink.esua.epdc.enums.UserStatusEnum; import com.elink.esua.epdc.feign.UserFeignClient; import com.elink.esua.epdc.jwt.JwtProperties; import com.elink.esua.epdc.jwt.JwtUtils; @@ -78,7 +78,7 @@ public class AuthServiceImpl implements AuthService { log.setIp(IpUtils.getIpAddr(request)); //账号不存在 - if(user == null){ + if (user == null) { log.setStatus(LoginStatusEnum.FAIL.value()); log.setCreatorName(login.getUsername()); logProducer.saveLog(log); @@ -87,7 +87,7 @@ public class AuthServiceImpl implements AuthService { } //密码错误 - if(!PasswordUtils.matches(login.getPassword(), user.getPassword())){ + if (!PasswordUtils.matches(login.getPassword(), user.getPassword())) { log.setStatus(LoginStatusEnum.FAIL.value()); log.setCreator(user.getId()); log.setCreatorName(user.getUsername()); @@ -97,7 +97,7 @@ public class AuthServiceImpl implements AuthService { } //账号停用 - if(user.getStatus() == UserStatusEnum.DISABLE.value()){ + if (user.getStatus() == UserStatusEnum.DISABLE.value()) { log.setStatus(LoginStatusEnum.LOCK.value()); log.setCreator(user.getId()); log.setCreatorName(user.getUsername()); @@ -149,7 +149,7 @@ public class AuthServiceImpl implements AuthService { } @Override - public CpUserDetail getLoginUserInfo(String token) { + public TokenDto getLoginUserInfo(String token) { //是否过期 Claims claims = jwtUtils.getClaimByToken(token); if (claims == null || jwtUtils.isTokenExpired(claims.getExpiration())) { @@ -160,7 +160,7 @@ public class AuthServiceImpl implements AuthService { String userId = claims.getSubject(); //查询Redis,如果没数据,则保持用户信息到Redis - CpUserDetail cpUserDetail = cpUserDetailRedis.get(userId); + TokenDto cpUserDetail = cpUserDetailRedis.get(userId); if (cpUserDetail != null) { //过期时间 long expire = (claims.getExpiration().getTime() - System.currentTimeMillis()) / 1000; diff --git a/esua-epdc/epdc-commons/epdc-common-clienttoken/pom.xml b/esua-epdc/epdc-commons/epdc-common-clienttoken/pom.xml index e6c04ec31..dd4f4e01c 100644 --- a/esua-epdc/epdc-commons/epdc-common-clienttoken/pom.xml +++ b/esua-epdc/epdc-commons/epdc-common-clienttoken/pom.xml @@ -65,6 +65,12 @@ spring-boot-starter-log4j2 provided + + + io.jsonwebtoken + jjwt + 0.7.0 + diff --git a/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/common/token/dto/TokenDto.java b/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/common/token/dto/TokenDto.java deleted file mode 100644 index 90fe6269a..000000000 --- a/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/common/token/dto/TokenDto.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.elink.esua.common.token.dto; - -import lombok.Data; - -import java.io.Serializable; -import java.util.Date; - -/** - * 用户token - * - * @author rongchao - * @Date 18-10-31 - */ -@Data -public class TokenDto implements Serializable { - - private static final long serialVersionUID = 1L; - - /** - * 用户信息 - */ - private UserTokenDto userInfoDto; - - /** - * 令牌 - */ - private String token; - - /** - * 过期时间 - */ - private Date expireTime; - - /** - * 更新时间 - */ - private Date updateTime; -} diff --git a/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/common/token/util/TokenUtil.java b/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/common/token/util/TokenUtil.java deleted file mode 100644 index 96aedcaba..000000000 --- a/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/common/token/util/TokenUtil.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.elink.esua.common.token.util; - -import com.elink.esua.common.token.dto.TokenDto; -import com.elink.esua.common.token.dto.UserTokenDto; -import com.elink.esua.common.token.property.TokenPropertise; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import java.util.Date; -import java.util.UUID; - -/** - * token服务类 - * - * @author rongchao - * @Date 18-10-31 - */ -@Component -public class TokenUtil { - - private Logger logger = LoggerFactory.getLogger(getClass()); - - @Autowired - private TokenPropertise tokenPropertise; - - @Autowired - private CpUserDetailRedis redisUtils; - - public TokenDto getTokenInfo(String userId) { - TokenDto tokenDto = redisUtils.get(userId); - return tokenDto; - } - - public TokenDto createToken(UserTokenDto user) { - // 当前时间 - Date now = new Date(); - // 过期时间 - Date expireTime = new Date(now.getTime() + tokenPropertise.getExpire() * 1000); - - // 生成token - String token = this.generateToken(); - - // 保存或更新用户token - TokenDto tokenDto = new TokenDto(); - tokenDto.setUserInfoDto(user); - tokenDto.setToken(token); - tokenDto.setUpdateTime(now); - tokenDto.setExpireTime(expireTime); - redisUtils.set(tokenDto, tokenPropertise.getExpire()); - return tokenDto; - } - - public void expireToken(String userId) { - redisUtils.logout(userId); - } - - public boolean delayToken(String token) { - return redisUtils.expire(token, tokenPropertise.getExpire()); - } - - private String generateToken() { - return UUID.randomUUID().toString().replace("-", ""); - } - - -} diff --git a/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/common/token/annotation/Login.java b/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/annotation/Login.java similarity index 94% rename from esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/common/token/annotation/Login.java rename to esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/annotation/Login.java index 3eead233b..9b622b179 100644 --- a/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/common/token/annotation/Login.java +++ b/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/annotation/Login.java @@ -14,7 +14,7 @@ * the License. */ -package com.elink.esua.common.token.annotation; +package com.elink.esua.epdc.common.token.annotation; import java.lang.annotation.*; diff --git a/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/common/token/annotation/LoginUser.java b/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/annotation/LoginUser.java similarity index 94% rename from esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/common/token/annotation/LoginUser.java rename to esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/annotation/LoginUser.java index 9fdaae4c9..e19370c0e 100644 --- a/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/common/token/annotation/LoginUser.java +++ b/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/annotation/LoginUser.java @@ -14,7 +14,7 @@ * the License. */ -package com.elink.esua.common.token.annotation; +package com.elink.esua.epdc.common.token.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/common/token/annotation/NeedClientToken.java b/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/annotation/NeedClientToken.java similarity index 89% rename from esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/common/token/annotation/NeedClientToken.java rename to esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/annotation/NeedClientToken.java index ff6e5fbe5..897a0048e 100644 --- a/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/common/token/annotation/NeedClientToken.java +++ b/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/annotation/NeedClientToken.java @@ -1,4 +1,4 @@ -package com.elink.esua.common.token.annotation; +package com.elink.esua.epdc.common.token.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/common/token/dto/UserTokenDto.java b/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/dto/TokenDto.java similarity index 64% rename from esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/common/token/dto/UserTokenDto.java rename to esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/dto/TokenDto.java index 0e2478ef1..fc5b1b155 100644 --- a/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/common/token/dto/UserTokenDto.java +++ b/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/dto/TokenDto.java @@ -1,15 +1,20 @@ -package com.elink.esua.common.token.dto; +package com.elink.esua.epdc.common.token.dto; import lombok.Data; +import java.io.Serializable; +import java.util.Date; + /** - * 用户信息DTO + * 用户token * * @author rongchao - * @Date 18-12-1 + * @Date 18-10-31 */ @Data -public class UserTokenDto { +public class TokenDto implements Serializable { + + private static final long serialVersionUID = 1L; /** * 用户ID diff --git a/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/common/token/enums/ErrorCode.java b/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/enums/ErrorCode.java similarity index 90% rename from esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/common/token/enums/ErrorCode.java rename to esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/enums/ErrorCode.java index 0f8a8bc3a..711187292 100644 --- a/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/common/token/enums/ErrorCode.java +++ b/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/enums/ErrorCode.java @@ -1,6 +1,6 @@ -package com.elink.esua.common.token.enums; +package com.elink.esua.epdc.common.token.enums; -import com.elink.esua.common.token.error.IErrorCode; +import com.elink.esua.epdc.common.token.error.IErrorCode; /** * client token错误码 diff --git a/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/common/token/error/IErrorCode.java b/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/error/IErrorCode.java similarity index 71% rename from esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/common/token/error/IErrorCode.java rename to esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/error/IErrorCode.java index f6a4a8033..3d83f9fd2 100644 --- a/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/common/token/error/IErrorCode.java +++ b/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/error/IErrorCode.java @@ -1,4 +1,4 @@ -package com.elink.esua.common.token.error; +package com.elink.esua.epdc.common.token.error; /** * @author rongchao diff --git a/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/common/token/interceptor/AuthorizationInterceptor.java b/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/interceptor/AuthorizationInterceptor.java similarity index 75% rename from esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/common/token/interceptor/AuthorizationInterceptor.java rename to esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/interceptor/AuthorizationInterceptor.java index 4143cb9ea..3877934e7 100644 --- a/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/common/token/interceptor/AuthorizationInterceptor.java +++ b/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/interceptor/AuthorizationInterceptor.java @@ -14,15 +14,17 @@ * the License. */ -package com.elink.esua.common.token.interceptor; +package com.elink.esua.epdc.common.token.interceptor; -import com.elink.esua.common.token.annotation.Login; -import com.elink.esua.common.token.dto.TokenDto; -import com.elink.esua.common.token.enums.ErrorCode; -import com.elink.esua.common.token.util.TokenUtil; +import com.elink.esua.epdc.common.token.annotation.Login; +import com.elink.esua.epdc.common.token.dto.TokenDto; +import com.elink.esua.epdc.common.token.enums.ErrorCode; +import com.elink.esua.epdc.common.token.jwt.JwtTokenUtils; +import com.elink.esua.epdc.common.token.util.TokenUtil; import com.elink.esua.epdc.commons.tools.constant.Constant; import com.elink.esua.epdc.commons.tools.exception.RenException; +import io.jsonwebtoken.Claims; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; @@ -42,6 +44,9 @@ public class AuthorizationInterceptor extends HandlerInterceptorAdapter { @Autowired private TokenUtil tokenUtil; + @Autowired + private JwtTokenUtils jwtUtils; + @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { Login annotation; @@ -68,10 +73,17 @@ public class AuthorizationInterceptor extends HandlerInterceptorAdapter { throw new RenException(ErrorCode.ERR10005.getCode(), ErrorCode.ERR10005.getMsg()); } + Claims claims = jwtUtils.getClaimByToken(token); + + if (claims == null || jwtUtils.isTokenExpired(claims.getExpiration())) { + throw new RenException(ErrorCode.ERR10001.getCode(), ErrorCode.ERR10001.getMsg()); + } + + //获取用户ID + String userId = claims.getSubject(); //查询token信息 - TokenDto tokenDto = tokenUtil.getTokenInfo("123"); - if (tokenDto == null || tokenDto.getExpireTime().getTime() < System.currentTimeMillis()) { - // token失效或已被清除,前端需要重新请求获取token的接口,并上送 + TokenDto tokenDto = tokenUtil.getTokenInfo(userId); + if (tokenDto == null) { throw new RenException(ErrorCode.ERR10001.getCode(), ErrorCode.ERR10001.getMsg()); } diff --git a/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/jwt/JwtTokenProperties.java b/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/jwt/JwtTokenProperties.java new file mode 100644 index 000000000..ad484aa5a --- /dev/null +++ b/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/jwt/JwtTokenProperties.java @@ -0,0 +1,41 @@ +/** + * Copyright (c) 2018 人人开源 All rights reserved. + * + * https://www.renren.io + * + * 版权所有,侵权必究! + */ + +package com.elink.esua.epdc.common.token.jwt; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +/** + * Jwt + * + * @author Mark sunlightcs@gmail.com + * @since 1.0.0 + */ +@Configuration +@ConfigurationProperties(prefix = "jwt.token") +public class JwtTokenProperties { + private String secret; + private int expire; + + public String getSecret() { + return secret; + } + + public void setSecret(String secret) { + this.secret = secret; + } + + public int getExpire() { + return expire; + } + + public void setExpire(int expire) { + this.expire = expire; + } +} diff --git a/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/jwt/JwtTokenUtils.java b/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/jwt/JwtTokenUtils.java new file mode 100644 index 000000000..2dd2ba97f --- /dev/null +++ b/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/jwt/JwtTokenUtils.java @@ -0,0 +1,68 @@ +/** + * Copyright (c) 2018 人人开源 All rights reserved. + *

+ * https://www.renren.io + *

+ * 版权所有,侵权必究! + */ + +package com.elink.esua.epdc.common.token.jwt; + +import io.jsonwebtoken.Claims; +import io.jsonwebtoken.Jwts; +import io.jsonwebtoken.SignatureAlgorithm; +import org.joda.time.DateTime; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.Date; + +/** + * Jwt工具类 + * + * @author Mark sunlightcs@gmail.com + * @since 1.0.0 + */ +@Component +public class JwtTokenUtils { + private static final Logger logger = LoggerFactory.getLogger(JwtTokenUtils.class); + + @Autowired + private JwtTokenProperties jwtProperties; + + /** + * 生成jwt token + */ + public String generateToken(String userId) { + return Jwts.builder() + .setHeaderParam("typ", "JWT") + .setSubject(userId) + .setIssuedAt(new Date()) + .setExpiration(DateTime.now().plusSeconds(jwtProperties.getExpire()).toDate()) + .signWith(SignatureAlgorithm.HS512, jwtProperties.getSecret()) + .compact(); + } + + public Claims getClaimByToken(String token) { + try { + return Jwts.parser() + .setSigningKey(jwtProperties.getSecret()) + .parseClaimsJws(token) + .getBody(); + } catch (Exception e) { + logger.debug("validate is token error, token = " + token, e); + return null; + } + } + + /** + * token是否过期 + * + * @return true:过期 + */ + public boolean isTokenExpired(Date expiration) { + return expiration.before(new Date()); + } +} diff --git a/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/common/token/property/TokenPropertise.java b/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/property/TokenPropertise.java similarity index 89% rename from esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/common/token/property/TokenPropertise.java rename to esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/property/TokenPropertise.java index 06fa24477..352c03eb4 100644 --- a/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/common/token/property/TokenPropertise.java +++ b/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/property/TokenPropertise.java @@ -1,4 +1,4 @@ -package com.elink.esua.common.token.property; +package com.elink.esua.epdc.common.token.property; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; diff --git a/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/common/token/resolver/LoginUserHandlerMethodArgumentResolver.java b/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/resolver/LoginUserHandlerMethodArgumentResolver.java similarity index 88% rename from esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/common/token/resolver/LoginUserHandlerMethodArgumentResolver.java rename to esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/resolver/LoginUserHandlerMethodArgumentResolver.java index ec638592a..0a6dc910e 100644 --- a/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/common/token/resolver/LoginUserHandlerMethodArgumentResolver.java +++ b/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/resolver/LoginUserHandlerMethodArgumentResolver.java @@ -6,11 +6,12 @@ * 版权所有,侵权必究! */ -package com.elink.esua.common.token.resolver; +package com.elink.esua.epdc.common.token.resolver; +import com.elink.esua.epdc.common.token.dto.TokenDto; +import com.elink.esua.epdc.common.token.util.CpUserDetailRedis; import com.elink.esua.epdc.commons.tools.annotation.LoginUser; import com.elink.esua.epdc.commons.tools.constant.Constant; -import com.elink.esua.epdc.commons.tools.redis.CpUserDetailRedis; import com.elink.esua.epdc.commons.tools.security.user.CpUserDetail; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -46,7 +47,7 @@ public class LoginUserHandlerMethodArgumentResolver implements HandlerMethodArgu if (StringUtils.isEmpty(userId)) { return null; } - CpUserDetail user = cpUserDetailRedis.get(userId); + TokenDto user = cpUserDetailRedis.get(userId); return user; } } diff --git a/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/common/token/util/CpUserDetailRedis.java b/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/util/CpUserDetailRedis.java similarity index 87% rename from esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/common/token/util/CpUserDetailRedis.java rename to esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/util/CpUserDetailRedis.java index ce7aa3e21..6101c8f1f 100644 --- a/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/common/token/util/CpUserDetailRedis.java +++ b/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/util/CpUserDetailRedis.java @@ -6,14 +6,13 @@ * 版权所有,侵权必究! */ -package com.elink.esua.common.token.util; +package com.elink.esua.epdc.common.token.util; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.map.MapUtil; -import com.elink.esua.common.token.dto.TokenDto; +import com.elink.esua.epdc.common.token.dto.TokenDto; import com.elink.esua.epdc.commons.tools.redis.RedisKeys; import com.elink.esua.epdc.commons.tools.redis.RedisUtils; -import com.elink.esua.epdc.commons.tools.security.user.CpUserDetail; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -35,7 +34,7 @@ public class CpUserDetailRedis { if (user == null) { return; } - String key = RedisKeys.getCpUserKey(user.getUserInfoDto().getUserId()); + String key = RedisKeys.getCpUserKey(user.getUserId()); //bean to map Map map = BeanUtil.beanToMap(user, false, true); redisUtils.hMSet(key, map, expire); diff --git a/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/util/TokenUtil.java b/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/util/TokenUtil.java new file mode 100644 index 000000000..530069e8a --- /dev/null +++ b/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/util/TokenUtil.java @@ -0,0 +1,48 @@ +package com.elink.esua.epdc.common.token.util; + +import com.elink.esua.epdc.common.token.dto.TokenDto; +import com.elink.esua.epdc.common.token.jwt.JwtTokenUtils; +import com.elink.esua.epdc.common.token.property.TokenPropertise; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +/** + * token服务类 + * + * @author rongchao + * @Date 18-10-31 + */ +@Component +public class TokenUtil { + + private Logger logger = LoggerFactory.getLogger(getClass()); + + @Autowired + private TokenPropertise tokenPropertise; + + @Autowired + private CpUserDetailRedis redisUtils; + + @Autowired + private JwtTokenUtils jwtUtils; + + public TokenDto getTokenInfo(String userId) { + TokenDto tokenDto = redisUtils.get(userId); + return tokenDto; + } + + public String createToken(TokenDto tokenDto) { + redisUtils.set(tokenDto, tokenPropertise.getExpire()); + return jwtUtils.generateToken(tokenDto.getUserId()); + } + + public void expireToken(String userId) { + redisUtils.logout(userId); + } + + public boolean delayToken(String token) { + return redisUtils.expire(token, tokenPropertise.getExpire()); + } +} diff --git a/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/common/token/util/UserUtil.java b/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/util/UserUtil.java similarity index 53% rename from esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/common/token/util/UserUtil.java rename to esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/util/UserUtil.java index c69067be1..2e09b381f 100644 --- a/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/common/token/util/UserUtil.java +++ b/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/util/UserUtil.java @@ -1,8 +1,7 @@ -package com.elink.esua.common.token.util; +package com.elink.esua.epdc.common.token.util; -import com.elink.esua.common.token.dto.TokenDto; -import com.elink.esua.common.token.dto.UserTokenDto; -import com.elink.esua.common.token.interceptor.AuthorizationInterceptor; +import com.elink.esua.epdc.common.token.dto.TokenDto; +import com.elink.esua.epdc.commons.tools.constant.Constant; import com.elink.esua.epdc.commons.tools.utils.WebUtil; /** @@ -19,7 +18,7 @@ public class UserUtil { * @return */ public static TokenDto getCurrentUser() { - return (TokenDto) WebUtil.getAttributesFromRequest(AuthorizationInterceptor.USER_KEY); + return (TokenDto) WebUtil.getAttributesFromRequest(Constant.APP_USER_KEY); } /** @@ -29,12 +28,12 @@ public class UserUtil { * @author yujintao * @date 2018/12/5 9:24 */ - public static UserTokenDto getCurrentUserInfo() { + public static TokenDto getCurrentUserInfo() { TokenDto tokenDto = getCurrentUser(); - if (tokenDto == null || tokenDto.getUserInfoDto() == null) { + if (tokenDto == null) { return null; } - return tokenDto.getUserInfoDto(); + return tokenDto; } /** @@ -44,13 +43,13 @@ public class UserUtil { */ public static String getCurrentUserId() { TokenDto tokenDto = getCurrentUser(); - if (tokenDto == null || tokenDto.getUserInfoDto() == null) { + if (tokenDto == null) { return null; } - return tokenDto.getUserInfoDto().getUserId(); + return tokenDto.getUserId(); } public static void setCurrentUser(TokenDto user) { - WebUtil.setAttributesFromRequest(AuthorizationInterceptor.USER_KEY, user); + WebUtil.setAttributesFromRequest(Constant.APP_USER_KEY, user); } } diff --git a/esua-epdc/epdc-gateway/pom.xml b/esua-epdc/epdc-gateway/pom.xml index b75f10e3b..b1f5a18f7 100644 --- a/esua-epdc/epdc-gateway/pom.xml +++ b/esua-epdc/epdc-gateway/pom.xml @@ -40,6 +40,18 @@ org.springframework.cloud spring-cloud-starter-zipkin + + com.esua.epdc + epdc-common-clienttoken + 1.0.0 + compile + + + + com.esua.epdc + epdc-common-clienttoken + 1.0.0 + @@ -81,25 +93,29 @@ lb://epdc-auth-server lb://epdc-admin-server - - lb://epdc-activiti-server + + lb://epdc-activiti-server + lb://epdc-api-server lb://epdc-app-server - + lb://epdc-heart-server - + lb://epdc-job-server - - lb://epdc-message-server - lb://epdc-neighbor-server - + + lb://epdc-message-server + + lb://epdc-neighbor-server + + http://127.0.0.1:9064 lb://epdc-oss-server lb://epdc-events-server - - lb://epdc-services-server - + + lb://epdc-services-server + + http://127.0.0.1:9068 lb://epdc-demo-server @@ -124,17 +140,21 @@ lb://epdc-auth-server lb://epdc-admin-server - lb://epdc-activiti-server + lb://epdc-activiti-server + lb://epdc-api-server lb://epdc-app-server lb://epdc-heart-server lb://epdc-job-server - lb://epdc-message-server - lb://epdc-neighbor-server + lb://epdc-message-server + + lb://epdc-neighbor-server + lb://epdc-news-server lb://epdc-oss-server lb://epdc-events-server - lb://epdc-services-server + lb://epdc-services-server + lb://epdc-user-server lb://epdc-demo-server @@ -159,17 +179,21 @@ lb://epdc-auth-server lb://epdc-admin-server - lb://epdc-activiti-server + lb://epdc-activiti-server + lb://epdc-api-server lb://epdc-app-server lb://epdc-heart-server lb://epdc-job-server - lb://epdc-message-server - lb://epdc-neighbor-server + lb://epdc-message-server + + lb://epdc-neighbor-server + lb://epdc-news-server lb://epdc-oss-server lb://epdc-events-server - lb://epdc-services-server + lb://epdc-services-server + lb://epdc-user-server lb://epdc-demo-server diff --git a/esua-epdc/epdc-gateway/src/main/java/com/elink/esua/epdc/feign/ResourceFeignClient.java b/esua-epdc/epdc-gateway/src/main/java/com/elink/esua/epdc/feign/ResourceFeignClient.java index 68f229806..b52b556f8 100644 --- a/esua-epdc/epdc-gateway/src/main/java/com/elink/esua/epdc/feign/ResourceFeignClient.java +++ b/esua-epdc/epdc-gateway/src/main/java/com/elink/esua/epdc/feign/ResourceFeignClient.java @@ -8,7 +8,7 @@ package com.elink.esua.epdc.feign; -import com.elink.esua.epdc.commons.tools.security.user.CpUserDetail; +import com.elink.esua.epdc.common.token.dto.TokenDto; import com.elink.esua.epdc.feign.fallback.ResourceFeignClientFallback; import com.elink.esua.epdc.commons.tools.constant.ServiceConstant; import com.elink.esua.epdc.commons.tools.security.user.UserDetail; @@ -50,5 +50,5 @@ public interface ResourceFeignClient { * @date 2019/8/19 17:19 */ @GetMapping("auth/getLoginUserInfo") - Result getLoginUserInfo(@RequestParam("token") String token); + Result getLoginUserInfo(@RequestParam("token") String token); } diff --git a/esua-epdc/epdc-gateway/src/main/java/com/elink/esua/epdc/feign/fallback/ResourceFeignClientFallback.java b/esua-epdc/epdc-gateway/src/main/java/com/elink/esua/epdc/feign/fallback/ResourceFeignClientFallback.java index da14350a3..987d2ff79 100644 --- a/esua-epdc/epdc-gateway/src/main/java/com/elink/esua/epdc/feign/fallback/ResourceFeignClientFallback.java +++ b/esua-epdc/epdc-gateway/src/main/java/com/elink/esua/epdc/feign/fallback/ResourceFeignClientFallback.java @@ -1,14 +1,14 @@ /** * Copyright (c) 2018 人人开源 All rights reserved. - * + *

* https://www.renren.io - * + *

* 版权所有,侵权必究! */ package com.elink.esua.epdc.feign.fallback; -import com.elink.esua.epdc.commons.tools.security.user.CpUserDetail; +import com.elink.esua.epdc.common.token.dto.TokenDto; import com.elink.esua.epdc.commons.tools.security.user.UserDetail; import com.elink.esua.epdc.commons.tools.utils.Result; import com.elink.esua.epdc.feign.ResourceFeignClient; @@ -29,7 +29,7 @@ public class ResourceFeignClientFallback implements ResourceFeignClient { } @Override - public Result getLoginUserInfo(String token) { - return new Result().error(); + public Result getLoginUserInfo(String token) { + return new Result().error(); } } diff --git a/esua-epdc/epdc-gateway/src/main/java/com/elink/esua/epdc/filter/CpAuthGatewayFilterFactory.java b/esua-epdc/epdc-gateway/src/main/java/com/elink/esua/epdc/filter/CpAuthGatewayFilterFactory.java index babf5a4ce..b264baa24 100644 --- a/esua-epdc/epdc-gateway/src/main/java/com/elink/esua/epdc/filter/CpAuthGatewayFilterFactory.java +++ b/esua-epdc/epdc-gateway/src/main/java/com/elink/esua/epdc/filter/CpAuthGatewayFilterFactory.java @@ -2,8 +2,8 @@ package com.elink.esua.epdc.filter; import com.alibaba.fastjson.JSON; +import com.elink.esua.epdc.common.token.dto.TokenDto; import com.elink.esua.epdc.commons.tools.constant.Constant; -import com.elink.esua.epdc.commons.tools.security.user.CpUserDetail; import com.elink.esua.epdc.commons.tools.utils.Result; import com.elink.esua.epdc.feign.ResourceFeignClient; import org.springframework.beans.factory.annotation.Autowired; @@ -70,14 +70,14 @@ public class CpAuthGatewayFilterFactory extends AbstractGatewayFilterFactory result = resourceFeignClient.getLoginUserInfo(token); + Result result = resourceFeignClient.getLoginUserInfo(token); if (!result.success()) { return response(exchange, result); } - CpUserDetail user = result.getData(); + TokenDto user = result.getData(); //当前登录用户userId,添加到header中 if (user != null) { - ServerHttpRequest build = exchange.getRequest().mutate().header(Constant.APP_USER_KEY, user.getId()).build(); + ServerHttpRequest build = exchange.getRequest().mutate().header(Constant.APP_USER_KEY, user.getUserId()).build(); return chain.filter(exchange.mutate().request(build).build()); } return chain.filter(exchange); @@ -119,4 +119,4 @@ public class CpAuthGatewayFilterFactory extends AbstractGatewayFilterFactoryepdc-wx ${project.version} + + + + com.esua.epdc + epdc-common-clienttoken + ${project.version} + diff --git a/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/common/token/config/WebConfig.java b/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/config/WebConfig.java similarity index 85% rename from esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/common/token/config/WebConfig.java rename to esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/config/WebConfig.java index 254b499fd..e7e5c8015 100644 --- a/esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/common/token/config/WebConfig.java +++ b/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/config/WebConfig.java @@ -6,10 +6,10 @@ * 版权所有,侵权必究! */ -package com.elink.esua.common.token.config; +package com.elink.esua.epdc.config; -import com.elink.esua.common.token.interceptor.AuthorizationInterceptor; -import com.elink.esua.common.token.resolver.LoginUserHandlerMethodArgumentResolver; +import com.elink.esua.epdc.common.token.interceptor.AuthorizationInterceptor; +import com.elink.esua.epdc.common.token.resolver.LoginUserHandlerMethodArgumentResolver; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.web.method.support.HandlerMethodArgumentResolver; diff --git a/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/controller/ApiLoginController.java b/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/controller/ApiLoginController.java index 8f4033c4f..26cce4c81 100644 --- a/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/controller/ApiLoginController.java +++ b/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/controller/ApiLoginController.java @@ -9,7 +9,7 @@ package com.elink.esua.epdc.controller; -import com.elink.esua.epdc.annotation.Login; +import com.elink.esua.epdc.common.token.annotation.Login; import com.elink.esua.epdc.commons.tools.utils.Result; import com.elink.esua.epdc.commons.tools.validator.ValidatorUtils; import com.elink.esua.epdc.dto.LoginDTO; diff --git a/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/controller/ApiTestController.java b/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/controller/ApiTestController.java deleted file mode 100644 index 85a08fc37..000000000 --- a/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/controller/ApiTestController.java +++ /dev/null @@ -1,63 +0,0 @@ -/** - * Copyright (c) 2018 人人开源 All rights reserved. - *

- * https://www.renren.io - *

- * 版权所有,侵权必究! - */ - -package com.elink.esua.epdc.controller; - -import com.elink.esua.epdc.annotation.Login; -import com.elink.esua.epdc.annotation.LoginUser; -import com.elink.esua.epdc.commons.tools.utils.Result; -import com.elink.esua.epdc.entity.UserEntity; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestAttribute; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -/** - * 测试接口 - * - * @author Mark sunlightcs@gmail.com - */ -@RestController -@RequestMapping("test") -public class ApiTestController { - - /** - * 获取用户信息 - * - * @param user - * @return - */ - @Login - @GetMapping("userInfo") - public Result userInfo(@LoginUser UserEntity user) { - return new Result().ok(user); - } - - /** - * 获取用户ID - * - * @param userId - * @return - */ - @Login - @GetMapping("userId") - public Result userInfo(@RequestAttribute("userId") Long userId) { - return new Result().ok(userId); - } - - /** - * 忽略Token验证测试 - * - * @return - */ - @GetMapping("notToken") - public Result notToken() { - return new Result().ok("无需token也能访问。。。"); - } - -}