Browse Source

修改auth模块bug

dev
管理员 6 years ago
parent
commit
3ecc98582c
  1. 7
      esua-epdc/epdc-auth/pom.xml
  2. 36
      esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/controller/AuthController.java
  3. 8
      esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/service/AuthService.java
  4. 20
      esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/service/impl/AuthServiceImpl.java
  5. 6
      esua-epdc/epdc-commons/epdc-common-clienttoken/pom.xml
  6. 38
      esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/common/token/dto/TokenDto.java
  7. 68
      esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/common/token/util/TokenUtil.java
  8. 2
      esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/annotation/Login.java
  9. 2
      esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/annotation/LoginUser.java
  10. 2
      esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/annotation/NeedClientToken.java
  11. 13
      esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/dto/TokenDto.java
  12. 4
      esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/enums/ErrorCode.java
  13. 2
      esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/error/IErrorCode.java
  14. 28
      esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/interceptor/AuthorizationInterceptor.java
  15. 41
      esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/jwt/JwtTokenProperties.java
  16. 68
      esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/jwt/JwtTokenUtils.java
  17. 2
      esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/property/TokenPropertise.java
  18. 7
      esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/resolver/LoginUserHandlerMethodArgumentResolver.java
  19. 7
      esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/util/CpUserDetailRedis.java
  20. 48
      esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/util/TokenUtil.java
  21. 21
      esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/epdc/common/token/util/UserUtil.java
  22. 62
      esua-epdc/epdc-gateway/pom.xml
  23. 4
      esua-epdc/epdc-gateway/src/main/java/com/elink/esua/epdc/feign/ResourceFeignClient.java
  24. 10
      esua-epdc/epdc-gateway/src/main/java/com/elink/esua/epdc/feign/fallback/ResourceFeignClientFallback.java
  25. 10
      esua-epdc/epdc-gateway/src/main/java/com/elink/esua/epdc/filter/CpAuthGatewayFilterFactory.java
  26. 7
      esua-epdc/epdc-module/epdc-api/epdc-api-server/pom.xml
  27. 6
      esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/config/WebConfig.java
  28. 2
      esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/controller/ApiLoginController.java
  29. 63
      esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/controller/ApiTestController.java

7
esua-epdc/epdc-auth/pom.xml

@ -23,6 +23,13 @@
<artifactId>epdc-admin-client</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>com.esua.epdc</groupId>
<artifactId>epdc-common-clienttoken</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>

36
esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/controller/AuthController.java

@ -1,16 +1,16 @@
/**
* Copyright (c) 2018 人人开源 All rights reserved.
*
* <p>
* https://www.renren.io
*
* <p>
* 版权所有侵权必究
*/
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<AuthorizationDTO> login(@RequestBody LoginDTO login){
public Result<AuthorizationDTO> login(@RequestBody LoginDTO login) {
//效验数据
ValidatorUtils.validateEntity(login);
//验证码是否正确
boolean flag = captchaService.validate(login.getUuid(), login.getCaptcha());
if(!flag){
if (!flag) {
return new Result<AuthorizationDTO>().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<UserDetail> 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<UserDetail>().ok(data);
}
@GetMapping(value = "getLoginUserInfo")
public Result<CpUserDetail> getLoginUserInfo(String token) {
public Result<TokenDto> getLoginUserInfo(String token) {
CpUserDetail cpUserDetail = authService.getLoginUserInfo(token);
TokenDto cpUserDetail = authService.getLoginUserInfo(token);
if (cpUserDetail != null) {
return new Result<CpUserDetail>().ok(cpUserDetail);
return new Result<TokenDto>().ok(cpUserDetail);
}
return new Result<CpUserDetail>().error();
return new Result<TokenDto>().error();
}
}

8
esua-epdc/epdc-auth/src/main/java/com/elink/esua/epdc/service/AuthService.java

@ -1,14 +1,14 @@
/**
* Copyright (c) 2018 人人开源 All rights reserved.
*
* <p>
* https://www.renren.io
*
* <p>
* 版权所有侵权必究
*/
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);
}

20
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.
*
* <p>
* https://www.renren.io
*
* <p>
* 版权所有侵权必究
*/
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;

6
esua-epdc/epdc-commons/epdc-common-clienttoken/pom.xml

@ -65,6 +65,12 @@
<artifactId>spring-boot-starter-log4j2</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.7.0</version>
</dependency>
</dependencies>
<build>

38
esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/common/token/dto/TokenDto.java

@ -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;
}

68
esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/common/token/util/TokenUtil.java

@ -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("-", "");
}
}

2
esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/common/token/annotation/Login.java → 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.*;

2
esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/common/token/annotation/LoginUser.java → 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;

2
esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/common/token/annotation/NeedClientToken.java → 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;

13
esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/common/token/dto/UserTokenDto.java → 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

4
esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/common/token/enums/ErrorCode.java → 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错误码

2
esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/common/token/error/IErrorCode.java → 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

28
esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/common/token/interceptor/AuthorizationInterceptor.java → 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());
}

41
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;
}
}

68
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.
* <p>
* https://www.renren.io
* <p>
* 版权所有侵权必究
*/
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());
}
}

2
esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/common/token/property/TokenPropertise.java → 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;

7
esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/common/token/resolver/LoginUserHandlerMethodArgumentResolver.java → 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;
}
}

7
esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/common/token/util/CpUserDetailRedis.java → 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<String, Object> map = BeanUtil.beanToMap(user, false, true);
redisUtils.hMSet(key, map, expire);

48
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());
}
}

21
esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/common/token/util/UserUtil.java → 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);
}
}

62
esua-epdc/epdc-gateway/pom.xml

@ -40,6 +40,18 @@
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
<dependency>
<groupId>com.esua.epdc</groupId>
<artifactId>epdc-common-clienttoken</artifactId>
<version>1.0.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.esua.epdc</groupId>
<artifactId>epdc-common-clienttoken</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
<build>
@ -81,25 +93,29 @@
<!-- gateway routes -->
<gateway.routes.epdc-auth-server.uri>lb://epdc-auth-server</gateway.routes.epdc-auth-server.uri>
<gateway.routes.epdc-admin-server.uri>lb://epdc-admin-server</gateway.routes.epdc-admin-server.uri>
<!-- <gateway.routes.epdc-admin-server.uri>http://127.0.0.1:9092</gateway.routes.epdc-admin-server.uri>-->
<gateway.routes.epdc-activiti-server.uri>lb://epdc-activiti-server</gateway.routes.epdc-activiti-server.uri>
<!-- <gateway.routes.epdc-admin-server.uri>http://127.0.0.1:9092</gateway.routes.epdc-admin-server.uri>-->
<gateway.routes.epdc-activiti-server.uri>lb://epdc-activiti-server
</gateway.routes.epdc-activiti-server.uri>
<gateway.routes.epdc-api-server.uri>lb://epdc-api-server</gateway.routes.epdc-api-server.uri>
<gateway.routes.epdc-app-server.uri>lb://epdc-app-server</gateway.routes.epdc-app-server.uri>
<!-- <gateway.routes.epdc-app-server.uri>http://127.0.0.1:9058</gateway.routes.epdc-app-server.uri>-->
<!-- <gateway.routes.epdc-app-server.uri>http://127.0.0.1:9058</gateway.routes.epdc-app-server.uri>-->
<gateway.routes.epdc-heart-server.uri>lb://epdc-heart-server</gateway.routes.epdc-heart-server.uri>
<!-- <gateway.routes.epdc-heart-server.uri>http://127.0.0.1:9060</gateway.routes.epdc-heart-server.uri>-->
<!-- <gateway.routes.epdc-heart-server.uri>http://127.0.0.1:9060</gateway.routes.epdc-heart-server.uri>-->
<gateway.routes.epdc-job-server.uri>lb://epdc-job-server</gateway.routes.epdc-job-server.uri>
<!-- <gateway.routes.epdc-job-server.uri>http://127.0.0.1:9061</gateway.routes.epdc-job-server.uri>-->
<gateway.routes.epdc-message-server.uri>lb://epdc-message-server</gateway.routes.epdc-message-server.uri>
<gateway.routes.epdc-neighbor-server.uri>lb://epdc-neighbor-server</gateway.routes.epdc-neighbor-server.uri>
<!-- <gateway.routes.epdc-neighbor-server.uri>http://127.0.0.1:9063</gateway.routes.epdc-neighbor-server.uri>-->
<!-- <gateway.routes.epdc-job-server.uri>http://127.0.0.1:9061</gateway.routes.epdc-job-server.uri>-->
<gateway.routes.epdc-message-server.uri>lb://epdc-message-server
</gateway.routes.epdc-message-server.uri>
<gateway.routes.epdc-neighbor-server.uri>lb://epdc-neighbor-server
</gateway.routes.epdc-neighbor-server.uri>
<!-- <gateway.routes.epdc-neighbor-server.uri>http://127.0.0.1:9063</gateway.routes.epdc-neighbor-server.uri>-->
<!--<gateway.routes.epdc-news-server.uri>lb://epdc-news-server</gateway.routes.epdc-news-server.uri>-->
<gateway.routes.epdc-news-server.uri>http://127.0.0.1:9064</gateway.routes.epdc-news-server.uri>
<gateway.routes.epdc-oss-server.uri>lb://epdc-oss-server</gateway.routes.epdc-oss-server.uri>
<gateway.routes.epdc-events-server.uri>lb://epdc-events-server</gateway.routes.epdc-events-server.uri>
<!-- <gateway.routes.epdc-events-server.uri>http://127.0.0.1:9066</gateway.routes.epdc-events-server.uri>-->
<gateway.routes.epdc-services-server.uri>lb://epdc-services-server</gateway.routes.epdc-services-server.uri>
<!-- <gateway.routes.epdc-services-server.uri>http://127.0.0.1:9067</gateway.routes.epdc-services-server.uri>-->
<!-- <gateway.routes.epdc-events-server.uri>http://127.0.0.1:9066</gateway.routes.epdc-events-server.uri>-->
<gateway.routes.epdc-services-server.uri>lb://epdc-services-server
</gateway.routes.epdc-services-server.uri>
<!-- <gateway.routes.epdc-services-server.uri>http://127.0.0.1:9067</gateway.routes.epdc-services-server.uri>-->
<!--<gateway.routes.epdc-user-server.uri>lb://epdc-user-server</gateway.routes.epdc-user-server.uri>-->
<gateway.routes.epdc-user-server.uri>http://127.0.0.1:9068</gateway.routes.epdc-user-server.uri>
<gateway.routes.epdc-demo-server.uri>lb://epdc-demo-server</gateway.routes.epdc-demo-server.uri>
@ -124,17 +140,21 @@
<!-- gateway routes -->
<gateway.routes.epdc-auth-server.uri>lb://epdc-auth-server</gateway.routes.epdc-auth-server.uri>
<gateway.routes.epdc-admin-server.uri>lb://epdc-admin-server</gateway.routes.epdc-admin-server.uri>
<gateway.routes.epdc-activiti-server.uri>lb://epdc-activiti-server</gateway.routes.epdc-activiti-server.uri>
<gateway.routes.epdc-activiti-server.uri>lb://epdc-activiti-server
</gateway.routes.epdc-activiti-server.uri>
<gateway.routes.epdc-api-server.uri>lb://epdc-api-server</gateway.routes.epdc-api-server.uri>
<gateway.routes.epdc-app-server.uri>lb://epdc-app-server</gateway.routes.epdc-app-server.uri>
<gateway.routes.epdc-heart-server.uri>lb://epdc-heart-server</gateway.routes.epdc-heart-server.uri>
<gateway.routes.epdc-job-server.uri>lb://epdc-job-server</gateway.routes.epdc-job-server.uri>
<gateway.routes.epdc-message-server.uri>lb://epdc-message-server</gateway.routes.epdc-message-server.uri>
<gateway.routes.epdc-neighbor-server.uri>lb://epdc-neighbor-server</gateway.routes.epdc-neighbor-server.uri>
<gateway.routes.epdc-message-server.uri>lb://epdc-message-server
</gateway.routes.epdc-message-server.uri>
<gateway.routes.epdc-neighbor-server.uri>lb://epdc-neighbor-server
</gateway.routes.epdc-neighbor-server.uri>
<gateway.routes.epdc-news-server.uri>lb://epdc-news-server</gateway.routes.epdc-news-server.uri>
<gateway.routes.epdc-oss-server.uri>lb://epdc-oss-server</gateway.routes.epdc-oss-server.uri>
<gateway.routes.epdc-events-server.uri>lb://epdc-events-server</gateway.routes.epdc-events-server.uri>
<gateway.routes.epdc-services-server.uri>lb://epdc-services-server</gateway.routes.epdc-services-server.uri>
<gateway.routes.epdc-services-server.uri>lb://epdc-services-server
</gateway.routes.epdc-services-server.uri>
<gateway.routes.epdc-user-server.uri>lb://epdc-user-server</gateway.routes.epdc-user-server.uri>
<gateway.routes.epdc-demo-server.uri>lb://epdc-demo-server</gateway.routes.epdc-demo-server.uri>
@ -159,17 +179,21 @@
<!-- gateway routes -->
<gateway.routes.epdc-auth-server.uri>lb://epdc-auth-server</gateway.routes.epdc-auth-server.uri>
<gateway.routes.epdc-admin-server.uri>lb://epdc-admin-server</gateway.routes.epdc-admin-server.uri>
<gateway.routes.epdc-activiti-server.uri>lb://epdc-activiti-server</gateway.routes.epdc-activiti-server.uri>
<gateway.routes.epdc-activiti-server.uri>lb://epdc-activiti-server
</gateway.routes.epdc-activiti-server.uri>
<gateway.routes.epdc-api-server.uri>lb://epdc-api-server</gateway.routes.epdc-api-server.uri>
<gateway.routes.epdc-app-server.uri>lb://epdc-app-server</gateway.routes.epdc-app-server.uri>
<gateway.routes.epdc-heart-server.uri>lb://epdc-heart-server</gateway.routes.epdc-heart-server.uri>
<gateway.routes.epdc-job-server.uri>lb://epdc-job-server</gateway.routes.epdc-job-server.uri>
<gateway.routes.epdc-message-server.uri>lb://epdc-message-server</gateway.routes.epdc-message-server.uri>
<gateway.routes.epdc-neighbor-server.uri>lb://epdc-neighbor-server</gateway.routes.epdc-neighbor-server.uri>
<gateway.routes.epdc-message-server.uri>lb://epdc-message-server
</gateway.routes.epdc-message-server.uri>
<gateway.routes.epdc-neighbor-server.uri>lb://epdc-neighbor-server
</gateway.routes.epdc-neighbor-server.uri>
<gateway.routes.epdc-news-server.uri>lb://epdc-news-server</gateway.routes.epdc-news-server.uri>
<gateway.routes.epdc-oss-server.uri>lb://epdc-oss-server</gateway.routes.epdc-oss-server.uri>
<gateway.routes.epdc-events-server.uri>lb://epdc-events-server</gateway.routes.epdc-events-server.uri>
<gateway.routes.epdc-services-server.uri>lb://epdc-services-server</gateway.routes.epdc-services-server.uri>
<gateway.routes.epdc-services-server.uri>lb://epdc-services-server
</gateway.routes.epdc-services-server.uri>
<gateway.routes.epdc-user-server.uri>lb://epdc-user-server</gateway.routes.epdc-user-server.uri>
<gateway.routes.epdc-demo-server.uri>lb://epdc-demo-server</gateway.routes.epdc-demo-server.uri>

4
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<CpUserDetail> getLoginUserInfo(@RequestParam("token") String token);
Result<TokenDto> getLoginUserInfo(@RequestParam("token") String token);
}

10
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.
*
* <p>
* https://www.renren.io
*
* <p>
* 版权所有侵权必究
*/
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<CpUserDetail> getLoginUserInfo(String token) {
return new Result<CpUserDetail>().error();
public Result<TokenDto> getLoginUserInfo(String token) {
return new Result<TokenDto>().error();
}
}

10
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<CpA
if (token == null) {
token = request.getQueryParams().getFirst(Constant.AUTHORIZATION_HEADER);
}
Result<CpUserDetail> result = resourceFeignClient.getLoginUserInfo(token);
Result<TokenDto> 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 AbstractGatewayFilterFactory<CpA
this.enabled = enabled;
}
}
}
}

7
esua-epdc/epdc-module/epdc-api/epdc-api-server/pom.xml

@ -64,6 +64,13 @@
<artifactId>epdc-wx</artifactId>
<version>${project.version}</version>
</dependency>
<!--微信公众号-->
<dependency>
<groupId>com.esua.epdc</groupId>
<artifactId>epdc-common-clienttoken</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
<build>

6
esua-epdc/epdc-commons/epdc-common-clienttoken/src/main/java/com/elink/esua/common/token/config/WebConfig.java → 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;

2
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;

63
esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/controller/ApiTestController.java

@ -1,63 +0,0 @@
/**
* Copyright (c) 2018 人人开源 All rights reserved.
* <p>
* https://www.renren.io
* <p>
* 版权所有侵权必究
*/
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<UserEntity> userInfo(@LoginUser UserEntity user) {
return new Result<UserEntity>().ok(user);
}
/**
* 获取用户ID
*
* @param userId
* @return
*/
@Login
@GetMapping("userId")
public Result<Long> userInfo(@RequestAttribute("userId") Long userId) {
return new Result<Long>().ok(userId);
}
/**
* 忽略Token验证测试
*
* @return
*/
@GetMapping("notToken")
public Result<String> notToken() {
return new Result<String>().ok("无需token也能访问。。。");
}
}
Loading…
Cancel
Save