Parcourir la source

更新portal相关功能

master
梁超 il y a 3 mois
Parent
révision
7121752d93
23 fichiers modifiés avec 561 ajouts et 83 suppressions
  1. 1
    0
      gly-base-core/build.gradle
  2. 14
    0
      gly-base-core/src/main/java/cn/com/taiji/core/manager/cache/LoginCacheFinals.java
  3. 72
    0
      gly-base-core/src/main/java/cn/com/taiji/core/manager/cache/RedisCacheManager.java
  4. 46
    0
      gly-base-core/src/main/java/cn/com/taiji/core/manager/cache/RedisKeyGenerator.java
  5. 13
    0
      gly-base-core/src/main/java/cn/com/taiji/core/manager/cache/RedisManager.java
  6. 0
    5
      gly-base-core/src/main/java/cn/com/taiji/core/model/comm/protocol/ias/portal/AccessTokenCheckRequest.java
  7. 0
    2
      gly-base-core/src/main/java/cn/com/taiji/core/model/comm/protocol/ias/portal/LogoutRequest.java
  8. 8
    0
      gly-base-core/src/main/java/cn/com/taiji/core/repo/jpa/user/AccountUserRoleRepo.java
  9. 2
    0
      zhywpt-app-userw/build.gradle
  10. 10
    8
      zhywpt-app-userw/src/main/java/cn/com/taiji/userw/api/rbac/RabcSystemTypeController.java
  11. 7
    2
      zhywpt-app-userw/src/main/java/cn/com/taiji/userw/dto/AbstractBizRequestDTO.java
  12. 14
    0
      zhywpt-app-userw/src/main/java/cn/com/taiji/userw/dto/rbac/RbacSystemTypeByOpenIdRequestDTO.java
  13. 15
    0
      zhywpt-app-userw/src/main/java/cn/com/taiji/userw/dto/rbac/RbacSystemTypeByOpenIdResponseDTO.java
  14. 16
    0
      zhywpt-app-userw/src/main/java/cn/com/taiji/userw/dto/rbac/RbacSystemTypeByOpenIdVO.java
  15. 212
    0
      zhywpt-app-userw/src/main/java/cn/com/taiji/userw/manager/RedisWrapManager.java
  16. 9
    0
      zhywpt-app-userw/src/main/java/cn/com/taiji/userw/manager/rbac/RbacSystemTypeManager.java
  17. 57
    0
      zhywpt-app-userw/src/main/java/cn/com/taiji/userw/manager/rbac/RbacSystemTypeManagerImpl.java
  18. 2
    0
      zhywpt-app-userw/src/main/resources/bootstrap.yml
  19. 2
    1
      zhywpt-service-ias/src/main/java/cn/com/taiji/ias/manager/RedisWrapManager.java
  20. 47
    57
      zhywpt-service-ias/src/main/java/cn/com/taiji/ias/manager/portal/AbstractLoginManager.java
  21. 3
    2
      zhywpt-service-ias/src/main/java/cn/com/taiji/ias/manager/portal/AccessTokenCheckManager.java
  22. 7
    5
      zhywpt-service-ias/src/main/java/cn/com/taiji/ias/manager/portal/LogoutManager.java
  23. 4
    1
      zhywpt-service-ias/src/main/java/cn/com/taiji/ias/manager/request/EmailRequest.java

+ 1
- 0
gly-base-core/build.gradle Voir le fichier

@@ -46,6 +46,7 @@ task commCore(type:Jar){
archiveExtension='jar'
from("build/classes/java/main/cn/com/taiji/core"){
include "**/manager/comm/**"
include "**/manager/cache/**"
include "**/manager/tools/**"
include "**/model/comm/*"
include "**/model/comm/protocol/*"

+ 14
- 0
gly-base-core/src/main/java/cn/com/taiji/core/manager/cache/LoginCacheFinals.java Voir le fichier

@@ -0,0 +1,14 @@
package cn.com.taiji.core.manager.cache;

import cn.com.taiji.common.model.finals.SysFinals;

public class LoginCacheFinals extends SysFinals {

public final static int LOGIN_TRY_COUNT = 5;// 次
public final static int LOGIN_FAILED_EXPIRE = 5;// 分钟
public final static int LOGIN_CODE_EXPIRED = 5 * 60;// 分钟
public final static int LOGIN_TOKEN_EXPIRED = 24 * 60;// 分钟
public final static int LOGIN_SMS_CODE_EXPIRED = 1;// 分钟


}

+ 72
- 0
gly-base-core/src/main/java/cn/com/taiji/core/manager/cache/RedisCacheManager.java Voir le fichier

@@ -0,0 +1,72 @@
package cn.com.taiji.core.manager.cache;

import cn.com.taiji.common.manager.AbstractManager;
import cn.com.taiji.common.manager.net.http.ServiceHandleException;
import cn.com.taiji.common.pub.json.JsonTools;
import cn.com.taiji.core.entity.dict.basic.SourceType;
import cn.com.taiji.core.entity.user.AccountInfo;
import cn.com.taiji.core.model.comm.protocol.valid.GlyServiceError;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.io.IOException;
import java.util.concurrent.TimeUnit;

@Component
public class RedisCacheManager extends AbstractManager {

@Autowired(required = false)
protected RedisManager redisManager;

protected void setTokenCache(AccountInfo accountInfo, String accessToken, String agencyId) {
redisManager.set(RedisKeyGenerator.getLoginOpenIdKey(accessToken), accountInfo.getOpenId(), LoginCacheFinals.LOGIN_TOKEN_EXPIRED, TimeUnit.MINUTES);
redisManager.set(RedisKeyGenerator.getLoginSourceTypeKey(accessToken), accountInfo.getLoginSource().name(), LoginCacheFinals.LOGIN_TOKEN_EXPIRED, TimeUnit.MINUTES);
redisManager.set(RedisKeyGenerator.getLoginAccountInfoKey(accessToken), accountInfo.toJson(), LoginCacheFinals.LOGIN_TOKEN_EXPIRED, TimeUnit.MINUTES);
redisManager.set(RedisKeyGenerator.getLoginAgencyIdKey(accessToken), agencyId, LoginCacheFinals.LOGIN_TOKEN_EXPIRED, TimeUnit.MINUTES);
redisManager.set(RedisKeyGenerator.getLoginTokenKey(accountInfo.getOpenId()), accessToken, LoginCacheFinals.LOGIN_TOKEN_EXPIRED, TimeUnit.MINUTES);
}

protected void checkTokenCache(String accessToken, String openId, SourceType loginSource) throws ServiceHandleException {
String openIdCache = redisManager.get(RedisKeyGenerator.getLoginOpenIdKey(accessToken));
if (!hasText(openIdCache)) throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("Token已失效");
if (!openId.equals(openIdCache)) throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("Token已失效");
String loginSourceStr = redisManager.get(RedisKeyGenerator.getLoginSourceTypeKey(accessToken));
if (!hasText(loginSourceStr)) throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("Token已失效");
if (!loginSourceStr.equals(loginSource.name()))
throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("Token已失效");
String accountInfoStr = redisManager.get(RedisKeyGenerator.getLoginAccountInfoKey(accessToken));
if (!hasText(accountInfoStr)) throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("Token已失效");
AccountInfo accountInfo = null;
try {
accountInfo = JsonTools.json2Object(accountInfoStr, AccountInfo.class);
} catch (IOException e) {
throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("Token已失效,信息解析失败");
}
String accessTokenCache = redisManager.get(RedisKeyGenerator.getLoginTokenKey(openId));
if (!hasText(accessTokenCache)) throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("Token已失效");
if (!accessToken.equals(accessTokenCache))
throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("Token已失效");
}

protected void expireTokenCache(String accessToken, String openId) {
redisManager.expire(RedisKeyGenerator.getLoginOpenIdKey(accessToken), LoginCacheFinals.LOGIN_TOKEN_EXPIRED, TimeUnit.MINUTES);
redisManager.expire(RedisKeyGenerator.getLoginSourceTypeKey(accessToken), LoginCacheFinals.LOGIN_TOKEN_EXPIRED, TimeUnit.MINUTES);
redisManager.expire(RedisKeyGenerator.getLoginAccountInfoKey(accessToken), LoginCacheFinals.LOGIN_TOKEN_EXPIRED, TimeUnit.MINUTES);
redisManager.expire(RedisKeyGenerator.getLoginAgencyIdKey(accessToken), LoginCacheFinals.LOGIN_TOKEN_EXPIRED, TimeUnit.MINUTES);
redisManager.expire(RedisKeyGenerator.getLoginTokenKey(openId), LoginCacheFinals.LOGIN_TOKEN_EXPIRED, TimeUnit.MINUTES);
}

protected void deleteTokenCache(String accessToken, String openId) {
redisManager.delete(RedisKeyGenerator.getLoginOpenIdKey(accessToken));
redisManager.delete(RedisKeyGenerator.getLoginSourceTypeKey(accessToken));
redisManager.delete(RedisKeyGenerator.getLoginAccountInfoKey(accessToken));
redisManager.delete(RedisKeyGenerator.getLoginAgencyIdKey(accessToken));
redisManager.delete(RedisKeyGenerator.getLoginTokenKey(openId));
}

protected String findOpenIdByToken(String accessToken) throws ServiceHandleException {
String openId = redisManager.get(RedisKeyGenerator.getLoginOpenIdKey(accessToken));
if (!hasText(openId)) throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("Token已失效");
return openId;
}
}

+ 46
- 0
gly-base-core/src/main/java/cn/com/taiji/core/manager/cache/RedisKeyGenerator.java Voir le fichier

@@ -0,0 +1,46 @@
package cn.com.taiji.core.manager.cache;

import cn.com.taiji.common.manager.AbstractManager;
import cn.com.taiji.core.entity.dict.basic.SourceType;


public class RedisKeyGenerator extends AbstractManager {

private final static String COLON = ":";
private final static String FAIL_COUNT_KEY_PREFIX = "issues:failedcount:";
private final static String LOGIN_KEY_PREFIX = "issues:login:";


public static String getFailCountKey(String accountName, SourceType sourceType) {
return FAIL_COUNT_KEY_PREFIX + accountName + COLON + sourceType;
}

public static String getLoginOpenIdByCodeKey(String code, String loginSource) {
return LOGIN_KEY_PREFIX + COLON + "getopenIdByCode" + COLON + code + COLON + loginSource;
}

public static String getLoginOpenIdKey(String accessToken) {
return LOGIN_KEY_PREFIX + COLON + "getopenId" + COLON + accessToken;
}

public static String getLoginSourceTypeKey(String accessToken) {
return LOGIN_KEY_PREFIX + COLON + "getsourcetype" + COLON + accessToken;
}

public static String getLoginAccountInfoKey(String accessToken) {
return LOGIN_KEY_PREFIX + COLON + "getaccountinfo" + COLON + accessToken;
}

public static String getLoginAgencyIdKey(String accessToken) {
return LOGIN_KEY_PREFIX + COLON + "getagencyid" + COLON + accessToken;
}

public static String getLoginTokenKey(String openId) {
return LOGIN_KEY_PREFIX + COLON + "gettoken" + COLON + openId;
}

public static String getSmsCodeKey(String mobile, String loginSource, Integer businessType) {
return LOGIN_KEY_PREFIX + COLON + "getsmscode" + COLON + mobile + COLON + loginSource + COLON + businessType;
}

}

+ 13
- 0
gly-base-core/src/main/java/cn/com/taiji/core/manager/cache/RedisManager.java Voir le fichier

@@ -0,0 +1,13 @@
package cn.com.taiji.core.manager.cache;

import java.util.concurrent.TimeUnit;

public interface RedisManager {
void set(String key, String value, long timeout, TimeUnit timeUnit);

String get(String key);

Boolean expire(String key, long timeout, TimeUnit timeUnit);

Boolean delete(String key);
}

+ 0
- 5
gly-base-core/src/main/java/cn/com/taiji/core/model/comm/protocol/ias/portal/AccessTokenCheckRequest.java Voir le fichier

@@ -16,15 +16,10 @@ public class AccessTokenCheckRequest extends AbstractPortalRequest<AccessTokenCh
public AccessTokenCheckRequest() {
super(PortalServiceCmd.ACCESSTOKENCHECK);
}

@NotBlank(message = "openId不能为空")
private String openId;
@NotNull(message = "来源不能为空")
private SourceType loginSource;
@NotBlank(message = "Token不能为空")
private String accessToken;
// private AccessTokenType tokenType; //token类型


@Override
protected void validate(ErrorMsgBuilder builder) {

+ 0
- 2
gly-base-core/src/main/java/cn/com/taiji/core/model/comm/protocol/ias/portal/LogoutRequest.java Voir le fichier

@@ -18,8 +18,6 @@ public class LogoutRequest extends AbstractPortalRequest<LogoutResponse> {
super(PortalServiceCmd.LOGOUT);
}

@NotBlank(message = "openId不能为空")
private String openId;
@NotNull(message = "来源不能为空")
private SourceType loginSource;
@NotBlank(message = "Token不能为空")

+ 8
- 0
gly-base-core/src/main/java/cn/com/taiji/core/repo/jpa/user/AccountUserRoleRepo.java Voir le fichier

@@ -50,4 +50,12 @@ public interface AccountUserRoleRepo extends AbstractJpaRepo<AccountUserRole, St

@Query(" from AccountUserRole where roleId in ?1")
List<AccountUserRole> findByRoleIdList(List<String> roleIdList);

/**
* 根据用户openId查找该用户的系统访问权限
* @param openId
* @return
*/
@Query(nativeQuery = true, value = " select b.system_type from user_account_role a, user_role b where a.role_id = b.id and b.status = 'ENABLE' and a.open_id = ?1")
List<SystemType> findSystemTypeByOpenId(String openId);
}

+ 2
- 0
zhywpt-app-userw/build.gradle Voir le fichier

@@ -15,6 +15,8 @@ dependencies {
implementation "com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-config"
implementation "org.springframework.cloud:spring-cloud-starter-openfeign"
implementation 'com.alibaba:easyexcel:3.2.1'
implementation group: 'org.springframework.boot', name: 'spring-boot-starter-data-redis'

implementation(group: 'io.springfox', name: 'springfox-boot-starter', version: '3.0.0') {
// exclude group: 'net.bytebuddy',module: 'byte-buddy'
}

+ 10
- 8
zhywpt-app-userw/src/main/java/cn/com/taiji/userw/api/rbac/RabcSystemTypeController.java Voir le fichier

@@ -1,15 +1,12 @@
package cn.com.taiji.userw.api.rbac;

import cn.com.taiji.common.manager.ManagerException;
import cn.com.taiji.common.manager.net.http.ServiceHandleException;
import cn.com.taiji.common.web.ApiResponse;
import cn.com.taiji.userw.api.MyValidController;
import cn.com.taiji.userw.dto.rbac.RbacMenuListBySystemTypeRequestDTO;
import cn.com.taiji.userw.dto.rbac.RbacMenuListBySystemTypeResponseDTO;
import cn.com.taiji.userw.dto.rbac.SystemTypeListByRbacSourceRequestDTO;
import cn.com.taiji.userw.dto.rbac.SystemTypeListByRbacSourceResponseDTO;
import cn.com.taiji.userw.dto.rbac.*;
import cn.com.taiji.userw.manager.rbac.RbacMenuManger;
import cn.com.taiji.userw.manager.rbac.RbacRoleManger;
import cn.com.taiji.userw.model.rbac.SystemTypeMode;
import cn.com.taiji.userw.manager.rbac.RbacSystemTypeManager;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.PostMapping;
@@ -18,7 +15,6 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.List;

/**
* @Author ChenChao
@@ -32,6 +28,8 @@ public class RabcSystemTypeController extends MyValidController {

@Resource
private RbacMenuManger rbacMenuManger;
@Resource
private RbacSystemTypeManager rbacSystemTypeManager;

@ApiOperation(value = "根据系统类型获取菜单列表")
@PostMapping(value = "/menulistbysystemtype")
@@ -46,6 +44,10 @@ public class RabcSystemTypeController extends MyValidController {
}



@ApiOperation(value = "根据系统类别获取所属系统列表")
@PostMapping(value = "/systemTypeByAccountRole")
public ApiResponse<RbacSystemTypeByOpenIdResponseDTO> systemTypeByAccountRole(@RequestBody RbacSystemTypeByOpenIdRequestDTO dto) throws ServiceHandleException {
return ApiResponse.of(rbacSystemTypeManager.systemTypeByOpneId(dto)).setMessage("获取小程序系统下的所有角色成功");
}

}

+ 7
- 2
zhywpt-app-userw/src/main/java/cn/com/taiji/userw/dto/AbstractBizRequestDTO.java Voir le fichier

@@ -18,11 +18,16 @@ import lombok.experimental.Accessors;
@Accessors(chain = true)
@Validated
public abstract class AbstractBizRequestDTO extends BaseValidDTO {
@NotBlank(message = "accessToken不能为空")
private String accessToken;
@NotBlank(message = "loginSource不能为空")
private String loginSource;


// 前端公参
@NotBlank(message = "openId不能为空")
private String openId;
@NotBlank(message = "loginSource不能为空")
private String loginSource;

@NotBlank(message = "agentId不能为空")
@FixedLength(length = 11)
private String agentId;

+ 14
- 0
zhywpt-app-userw/src/main/java/cn/com/taiji/userw/dto/rbac/RbacSystemTypeByOpenIdRequestDTO.java Voir le fichier

@@ -0,0 +1,14 @@
package cn.com.taiji.userw.dto.rbac;

import cn.com.taiji.userw.dto.AbstractBizRequestDTO;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;

@Getter
@Setter
@Accessors(chain = true)
public class RbacSystemTypeByOpenIdRequestDTO extends AbstractBizRequestDTO {


}

+ 15
- 0
zhywpt-app-userw/src/main/java/cn/com/taiji/userw/dto/rbac/RbacSystemTypeByOpenIdResponseDTO.java Voir le fichier

@@ -0,0 +1,15 @@
package cn.com.taiji.userw.dto.rbac;

import cn.com.taiji.common.model.BaseModel;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;

import java.util.List;

@Getter
@Setter
@Accessors(chain = true)
public class RbacSystemTypeByOpenIdResponseDTO extends BaseModel {
private List<RbacSystemTypeByOpenIdVO> list;
}

+ 16
- 0
zhywpt-app-userw/src/main/java/cn/com/taiji/userw/dto/rbac/RbacSystemTypeByOpenIdVO.java Voir le fichier

@@ -0,0 +1,16 @@
package cn.com.taiji.userw.dto.rbac;


import cn.com.taiji.common.model.BaseModel;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;

@Getter
@Setter
@Accessors(chain = true)
public class RbacSystemTypeByOpenIdVO extends BaseModel {

private String name;
private Integer code;
}

+ 212
- 0
zhywpt-app-userw/src/main/java/cn/com/taiji/userw/manager/RedisWrapManager.java Voir le fichier

@@ -0,0 +1,212 @@
package cn.com.taiji.userw.manager;

import cn.com.taiji.common.entity.BaseEntity;
import cn.com.taiji.common.manager.AbstractManager;
import cn.com.taiji.common.model.dao.Pagination;
import cn.com.taiji.common.pub.StringTools;
import cn.com.taiji.common.pub.json.JsonTools;
import cn.com.taiji.core.manager.cache.RedisManager;
import org.apache.commons.collections4.map.HashedMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.Cursor;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ScanOptions.ScanOptionsBuilder;
import org.springframework.stereotype.Service;

import java.io.IOException;
import java.util.*;
import java.util.Map.Entry;
import java.util.concurrent.TimeUnit;
import java.util.function.Supplier;

/**
* hash操作的方法以hash开头,如:hashGet<br>
*
* @author lijun <br>
* Create Time:2018年12月9日 下午1:43:54<br>
* mail:756915505@qq.com
* @since 1.0
* @version 1.0
*/
@Service
public class RedisWrapManager extends AbstractManager implements RedisManager {

@Autowired(required = false)
private RedisTemplate<String, String> redisTemplate;

public Set<String> key(String pattern) {
if ("*".equals(pattern)) {
throw new RuntimeException("禁止全扫描key");
}
return redisTemplate.keys(pattern);
}

public Boolean expire(String key, final long timeout, final TimeUnit unit) {
return redisTemplate.expire(key, timeout, unit);
}

public String get(String key) {
return redisTemplate.opsForValue().get(key);
}

public String getAndSet(String key, String value) {
return redisTemplate.opsForValue().getAndSet(key, value);
}

public void set(String key, String value, long timeout, TimeUnit unit) {
redisTemplate.opsForValue().set(key, value, timeout, unit);
}

public boolean setIfAbsent(String key, String value, long timeout, TimeUnit unit) {
return redisTemplate.opsForValue().setIfAbsent(key, value, timeout, unit);
}

public long increment(String key, long delta) {
return redisTemplate.opsForValue().increment(key, delta);
}

public Boolean delete(String key) {
return redisTemplate.delete(key);
}

public long listRightPush(String key, String value) {
return redisTemplate.opsForList().rightPush(key, value);
}

/**
* 返回存储在 key 的列表里指定范围内的元素。 start 和 end 偏移量都是基于0的下标,即list的第一个元素下标是0(list的表头),第二个元素下标是1,以此类推。
* 偏移量也可以是负数,表示偏移量是从list尾部开始计数。 例如, -1 表示列表的最后一个元素,-2 是倒数第二个,以此类推
*/
public List<String> listRange(String key, long start, long end) {
return redisTemplate.opsForList().range(key, start, end);
}

public Long listSize(String key) {
return redisTemplate.opsForList().size(key);
}

public Boolean hashHasKey(String key, Object hashKey) {
return opsForHash().hasKey(key, hashKey);
}

public Object hashGet(String key, Object hashKey) {
return opsForHash().get(key, hashKey);
}

public void hashPut(String key, Object hashKey, Object value) {
opsForHash().put(key, hashKey, value);
}

public Boolean hashPutIfAbsent(String key, Object hashKey, Object value) {
return opsForHash().putIfAbsent(key, hashKey, value);
}

public void hashPutAll(String key, Map<? extends Object, ? extends Object> m) {
opsForHash().putAll(key, m);
}

public Long hashIncrement(String key, Object hashKey, long delta) {
return opsForHash().increment(key, hashKey, delta);
}

public Long hashDelete(String key, Object... hashKeys) {
return opsForHash().delete(key, hashKeys);
}

public Map<Object, Object> hashScan(String key, String pattern) {
ScanOptionsBuilder b = new ScanOptionsBuilder();
Cursor<Entry<Object, Object>> s = opsForHash().scan(key, b.match(pattern).build());
Map<Object, Object> map = new HashMap<>();
s.forEachRemaining(e -> map.put(e.getKey(), e.getValue()));
return map;
}

public String findStr(String key, int timeout, Supplier<String> valueSupplier) {
String str = get(key);
if (!StringTools.hasText(str)) {
str = valueSupplier.get();
set(key, str, timeout);
}
return str;
}

public <T extends BaseEntity> T findObj(Class<T> clazz, String key, int timeout, Supplier<T> valueSupplier) {
String jsonStr = (String)get(key);
try {
if (!StringTools.hasText(jsonStr)) {
T obj = valueSupplier.get();
jsonStr = JsonTools.toJsonStr(obj);
set(key, jsonStr, timeout);
}
return JsonTools.json2Object(jsonStr, clazz);
} catch (IOException e) {
e.printStackTrace();
return null;
}
}

public <T extends BaseEntity> T findObj(Class<T> clazz, String key) {
String jsonStr = redisTemplate.opsForValue().get(key);
try {
return JsonTools.json2Object(jsonStr, clazz);
} catch (IOException e) {
e.printStackTrace();
return null;
}
}

public <T> Map<String, T> findMap(Class<T> clazz, String key, int timeout, Supplier<Map<String, T>> valueSupplier) {
String jsonStr = get(key);
try {
if (!StringTools.hasText(jsonStr)) {
Map<String, T> map = valueSupplier.get();
jsonStr = JsonTools.toJsonStr(map);
set(key, jsonStr, timeout);
}
return JsonTools.json2Map(jsonStr, String.class, clazz);
} catch (IOException e) {
e.printStackTrace();
return new HashedMap<>();
}
}

public <T> List<T> findList(Class<T> clazz, String key, int timeout, Supplier<Collection<T>> valueSupplier) {
String jsonStr = get(key);
try {
if (!StringTools.hasText(jsonStr)) {
Collection<T> c = valueSupplier.get();
jsonStr = JsonTools.toJsonStr(c);
set(key, jsonStr, timeout);
}
return JsonTools.json2List(jsonStr, clazz);
} catch (IOException e) {
e.printStackTrace();
return new ArrayList<>();
}
}

public <T extends BaseEntity> Pagination findPagn(Class<T> clazz, String key, int timeout,
Supplier<Pagination> valueSupplier) {
String jsonStr = get(key);
try {
if (!StringTools.hasText(jsonStr)) {
Pagination c = valueSupplier.get();
jsonStr = JsonTools.toJsonStr(c);
set(key, jsonStr, timeout);
}
return JsonTools.json2Pagn(jsonStr, clazz);
} catch (IOException e) {
e.printStackTrace();
return new Pagination().setResult(new ArrayList<>());
}
}

private <HK, HV> HashOperations<String, HK, HV> opsForHash() {
return redisTemplate.opsForHash();
}

private void set(String key, String value, int timeout) {
redisTemplate.opsForValue().set(key, value, timeout, TimeUnit.SECONDS);
}
}

+ 9
- 0
zhywpt-app-userw/src/main/java/cn/com/taiji/userw/manager/rbac/RbacSystemTypeManager.java Voir le fichier

@@ -0,0 +1,9 @@
package cn.com.taiji.userw.manager.rbac;

import cn.com.taiji.common.manager.net.http.ServiceHandleException;
import cn.com.taiji.userw.dto.rbac.RbacSystemTypeByOpenIdRequestDTO;
import cn.com.taiji.userw.dto.rbac.RbacSystemTypeByOpenIdResponseDTO;

public interface RbacSystemTypeManager {
RbacSystemTypeByOpenIdResponseDTO systemTypeByOpneId(RbacSystemTypeByOpenIdRequestDTO dto) throws ServiceHandleException;
}

+ 57
- 0
zhywpt-app-userw/src/main/java/cn/com/taiji/userw/manager/rbac/RbacSystemTypeManagerImpl.java Voir le fichier

@@ -0,0 +1,57 @@
package cn.com.taiji.userw.manager.rbac;

import cn.com.taiji.common.manager.net.http.ServiceHandleException;
import cn.com.taiji.core.entity.dict.basic.SourceType;
import cn.com.taiji.core.entity.dict.user.SystemType;
import cn.com.taiji.core.manager.cache.RedisCacheManager;
import cn.com.taiji.core.model.comm.protocol.valid.GlyServiceError;
import cn.com.taiji.core.repo.jpa.user.AccountUserRoleRepo;
import cn.com.taiji.userw.dto.rbac.RbacSystemTypeByOpenIdRequestDTO;
import cn.com.taiji.userw.dto.rbac.RbacSystemTypeByOpenIdResponseDTO;
import cn.com.taiji.userw.dto.rbac.RbacSystemTypeByOpenIdVO;
import org.apache.commons.compress.utils.Lists;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.stream.Collectors;

@Service
public class RbacSystemTypeManagerImpl extends RedisCacheManager implements RbacSystemTypeManager {

@Autowired
private AccountUserRoleRepo accountUserRoleRepo;


@Override
public RbacSystemTypeByOpenIdResponseDTO systemTypeByOpneId(RbacSystemTypeByOpenIdRequestDTO dto) throws ServiceHandleException {
String openId = findOpenIdByToken(dto.getAccessToken());
List<RbacSystemTypeByOpenIdVO> list = Lists.newArrayList();
switch (SourceType.findByCode(dto.getLoginSource())) {
case SERVICE_HALL:
list.add(from(SystemType.APP));
return new RbacSystemTypeByOpenIdResponseDTO().setList(list);
case ALI:
list.add(from(SystemType.MINI_PROGRAM));
return new RbacSystemTypeByOpenIdResponseDTO().setList(list);
case WECHAT:
list.add(from(SystemType.ZFB_MINI_PROGRAM));
return new RbacSystemTypeByOpenIdResponseDTO().setList(list);
case WEB:
List<SystemType> systemTypeList = accountUserRoleRepo.findSystemTypeByOpenId(openId);
if (isEmpty(systemTypeList))
throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("无访问系统权限");
list = systemTypeList.stream().filter(e -> e != SystemType.APP && e != SystemType.MINI_PROGRAM && e != SystemType.ZFB_MINI_PROGRAM).map(this::from).collect(Collectors.toList());
return new RbacSystemTypeByOpenIdResponseDTO().setList(list);
default:
throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("无访问系统权限");
}
}

private RbacSystemTypeByOpenIdVO from(SystemType type) {
RbacSystemTypeByOpenIdVO vo = new RbacSystemTypeByOpenIdVO();
vo.setName(type.getName());
vo.setCode(type.getCode());
return vo;
}
}

+ 2
- 0
zhywpt-app-userw/src/main/resources/bootstrap.yml Voir le fichier

@@ -31,6 +31,8 @@ spring:
refresh: true
- data-id: comm-client.yaml
refresh: true
- data-id: redis.yaml
refresh: true
- data-id: minio-client.yaml
refresh: true
- data-id: userw-config.yaml

+ 2
- 1
zhywpt-service-ias/src/main/java/cn/com/taiji/ias/manager/RedisWrapManager.java Voir le fichier

@@ -5,6 +5,7 @@ import cn.com.taiji.common.manager.AbstractManager;
import cn.com.taiji.common.model.dao.Pagination;
import cn.com.taiji.common.pub.StringTools;
import cn.com.taiji.common.pub.json.JsonTools;
import cn.com.taiji.core.manager.cache.RedisManager;
import org.apache.commons.collections4.map.HashedMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.Cursor;
@@ -29,7 +30,7 @@ import java.util.function.Supplier;
* @version 1.0
*/
@Service
public class RedisWrapManager extends AbstractManager {
public class RedisWrapManager extends AbstractManager implements RedisManager {

@Autowired(required = false)
private RedisTemplate<String, String> redisTemplate;

+ 47
- 57
zhywpt-service-ias/src/main/java/cn/com/taiji/ias/manager/portal/AbstractLoginManager.java Voir le fichier

@@ -1,30 +1,20 @@
package cn.com.taiji.ias.manager.portal;

import cn.com.taiji.common.manager.AbstractManager;
import cn.com.taiji.common.manager.net.http.ServiceHandleException;
import cn.com.taiji.common.pub.json.JsonTools;
import cn.com.taiji.core.entity.dict.basic.SourceType;
import cn.com.taiji.core.entity.user.AccountInfo;
import cn.com.taiji.core.entity.user.Staff;
import cn.com.taiji.core.manager.cache.RedisCacheManager;
import cn.com.taiji.core.model.comm.protocol.valid.GlyServiceError;
import cn.com.taiji.core.repo.jpa.user.StaffRepo;
import cn.com.taiji.ias.manager.RedisWrapManager;
import cn.com.taiji.ias.model.LoginFinals;
import cn.com.taiji.ias.model.RedisKeyGenerator;
import org.springframework.beans.factory.annotation.Autowired;

import java.io.IOException;
import java.util.concurrent.TimeUnit;

public abstract class AbstractLoginManager extends AbstractManager {
public abstract class AbstractLoginManager extends RedisCacheManager {

protected final static String commonServiceHallId = "5201010600400000000";// 普通用户的专属网点编号
protected final static String commonStaffId = "003d875dabaa4390b22739f6897cf570";

@Autowired
private StaffRepo staffRepo;
@Autowired
protected RedisWrapManager redisManager;

protected Staff findAndValidStaff(String openId, SourceType loginSource) throws ServiceHandleException {
if (loginSource != SourceType.SERVICE_HALL && loginSource != SourceType.WEB) return null;
@@ -39,49 +29,49 @@ public abstract class AbstractLoginManager extends AbstractManager {
return staff;
}

protected void setTokenCache(AccountInfo accountInfo, String accessToken, String agencyId) {
redisManager.set(RedisKeyGenerator.getLoginOpenIdKey(accessToken), accountInfo.getOpenId(), LoginFinals.LOGIN_TOKEN_EXPIRED, TimeUnit.MINUTES);
redisManager.set(RedisKeyGenerator.getLoginSourceTypeKey(accessToken), accountInfo.getLoginSource().name(), LoginFinals.LOGIN_TOKEN_EXPIRED, TimeUnit.MINUTES);
redisManager.set(RedisKeyGenerator.getLoginAccountInfoKey(accessToken), accountInfo.toJson(), LoginFinals.LOGIN_TOKEN_EXPIRED, TimeUnit.MINUTES);
redisManager.set(RedisKeyGenerator.getLoginAgencyIdKey(accessToken), agencyId, LoginFinals.LOGIN_TOKEN_EXPIRED, TimeUnit.MINUTES);
redisManager.set(RedisKeyGenerator.getLoginTokenKey(accountInfo.getOpenId()), accessToken, LoginFinals.LOGIN_TOKEN_EXPIRED, TimeUnit.MINUTES);
}
protected void checkTokenCache(String accessToken, String openId, SourceType loginSource) throws ServiceHandleException {
String openIdCache = redisManager.get(RedisKeyGenerator.getLoginOpenIdKey(accessToken));
if (!hasText(openIdCache)) throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("Token已失效");
if (!openId.equals(openIdCache)) throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("Token已失效");
String loginSourceType = redisManager.get(RedisKeyGenerator.getLoginSourceTypeKey(accessToken));
if (!hasText(loginSourceType)) throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("Token已失效");
if (!loginSourceType.equals(loginSource.name()))
throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("Token已失效");
String accountInfoStr = redisManager.get(RedisKeyGenerator.getLoginAccountInfoKey(accessToken));
if (!hasText(accountInfoStr)) throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("Token已失效");
AccountInfo accountInfo = null;
try {
accountInfo = JsonTools.json2Object(accountInfoStr, AccountInfo.class);
} catch (IOException e) {
throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("Token已失效,信息解析失败");
}
String accessTokenCache = redisManager.get(RedisKeyGenerator.getLoginTokenKey(openId));
if (!hasText(accessTokenCache)) throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("Token已失效");
if (!accessToken.equals(accessTokenCache))
throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("Token已失效");
}
protected void expireTokenCache(String accessToken, String openId) {
redisManager.expire(RedisKeyGenerator.getLoginOpenIdKey(accessToken), LoginFinals.LOGIN_TOKEN_EXPIRED, TimeUnit.MINUTES);
redisManager.expire(RedisKeyGenerator.getLoginSourceTypeKey(accessToken), LoginFinals.LOGIN_TOKEN_EXPIRED, TimeUnit.MINUTES);
redisManager.expire(RedisKeyGenerator.getLoginAccountInfoKey(accessToken), LoginFinals.LOGIN_TOKEN_EXPIRED, TimeUnit.MINUTES);
redisManager.expire(RedisKeyGenerator.getLoginAgencyIdKey(accessToken), LoginFinals.LOGIN_TOKEN_EXPIRED, TimeUnit.MINUTES);
redisManager.expire(RedisKeyGenerator.getLoginTokenKey(openId), LoginFinals.LOGIN_TOKEN_EXPIRED, TimeUnit.MINUTES);
}
protected void deleteTokenCache(String accessToken, String openId) {
redisManager.delete(RedisKeyGenerator.getLoginOpenIdKey(accessToken));
redisManager.delete(RedisKeyGenerator.getLoginSourceTypeKey(accessToken));
redisManager.delete(RedisKeyGenerator.getLoginAccountInfoKey(accessToken));
redisManager.delete(RedisKeyGenerator.getLoginAgencyIdKey(accessToken));
redisManager.delete(RedisKeyGenerator.getLoginTokenKey(openId));
}
// protected void setTokenCache(AccountInfo accountInfo, String accessToken, String agencyId) {
// redisManager.set(RedisKeyGenerator.getLoginOpenIdKey(accessToken), accountInfo.getOpenId(), LoginFinals.LOGIN_TOKEN_EXPIRED, TimeUnit.MINUTES);
// redisManager.set(RedisKeyGenerator.getLoginSourceTypeKey(accessToken), accountInfo.getLoginSource().name(), LoginFinals.LOGIN_TOKEN_EXPIRED, TimeUnit.MINUTES);
// redisManager.set(RedisKeyGenerator.getLoginAccountInfoKey(accessToken), accountInfo.toJson(), LoginFinals.LOGIN_TOKEN_EXPIRED, TimeUnit.MINUTES);
// redisManager.set(RedisKeyGenerator.getLoginAgencyIdKey(accessToken), agencyId, LoginFinals.LOGIN_TOKEN_EXPIRED, TimeUnit.MINUTES);
// redisManager.set(RedisKeyGenerator.getLoginTokenKey(accountInfo.getOpenId()), accessToken, LoginFinals.LOGIN_TOKEN_EXPIRED, TimeUnit.MINUTES);
// }
//
// protected void checkTokenCache(String accessToken, String openId, SourceType loginSource) throws ServiceHandleException {
// String openIdCache = redisManager.get(RedisKeyGenerator.getLoginOpenIdKey(accessToken));
// if (!hasText(openIdCache)) throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("Token已失效");
// if (!openId.equals(openIdCache)) throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("Token已失效");
// String loginSourceType = redisManager.get(RedisKeyGenerator.getLoginSourceTypeKey(accessToken));
// if (!hasText(loginSourceType)) throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("Token已失效");
// if (!loginSourceType.equals(loginSource.name()))
// throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("Token已失效");
// String accountInfoStr = redisManager.get(RedisKeyGenerator.getLoginAccountInfoKey(accessToken));
// if (!hasText(accountInfoStr)) throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("Token已失效");
// AccountInfo accountInfo = null;
// try {
// accountInfo = JsonTools.json2Object(accountInfoStr, AccountInfo.class);
// } catch (IOException e) {
// throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("Token已失效,信息解析失败");
// }
// String accessTokenCache = redisManager.get(RedisKeyGenerator.getLoginTokenKey(openId));
// if (!hasText(accessTokenCache)) throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("Token已失效");
// if (!accessToken.equals(accessTokenCache))
// throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("Token已失效");
// }
//
// protected void expireTokenCache(String accessToken, String openId) {
// redisManager.expire(RedisKeyGenerator.getLoginOpenIdKey(accessToken), LoginFinals.LOGIN_TOKEN_EXPIRED, TimeUnit.MINUTES);
// redisManager.expire(RedisKeyGenerator.getLoginSourceTypeKey(accessToken), LoginFinals.LOGIN_TOKEN_EXPIRED, TimeUnit.MINUTES);
// redisManager.expire(RedisKeyGenerator.getLoginAccountInfoKey(accessToken), LoginFinals.LOGIN_TOKEN_EXPIRED, TimeUnit.MINUTES);
// redisManager.expire(RedisKeyGenerator.getLoginAgencyIdKey(accessToken), LoginFinals.LOGIN_TOKEN_EXPIRED, TimeUnit.MINUTES);
// redisManager.expire(RedisKeyGenerator.getLoginTokenKey(openId), LoginFinals.LOGIN_TOKEN_EXPIRED, TimeUnit.MINUTES);
// }
//
// protected void deleteTokenCache(String accessToken, String openId) {
// redisManager.delete(RedisKeyGenerator.getLoginOpenIdKey(accessToken));
// redisManager.delete(RedisKeyGenerator.getLoginSourceTypeKey(accessToken));
// redisManager.delete(RedisKeyGenerator.getLoginAccountInfoKey(accessToken));
// redisManager.delete(RedisKeyGenerator.getLoginAgencyIdKey(accessToken));
// redisManager.delete(RedisKeyGenerator.getLoginTokenKey(openId));
// }
}

+ 3
- 2
zhywpt-service-ias/src/main/java/cn/com/taiji/ias/manager/portal/AccessTokenCheckManager.java Voir le fichier

@@ -10,8 +10,9 @@ import org.springframework.stereotype.Service;
public class AccessTokenCheckManager extends AbstractLoginManager {

public AccessTokenCheckResponse serviceHandle(AccessTokenCheckRequest request) throws ServiceHandleException {
checkTokenCache(request.getAccessToken(), request.getOpenId(), request.getLoginSource());
expireTokenCache(request.getAccessToken(), request.getOpenId());
String openId = findOpenIdByToken(request.getAccessToken());
checkTokenCache(request.getAccessToken(), openId, request.getLoginSource());
expireTokenCache(request.getAccessToken(), openId);
AccessTokenCheckResponse response = new AccessTokenCheckResponse();
response.setInfo("验证成功,Token尚且有效");
return response;

+ 7
- 5
zhywpt-service-ias/src/main/java/cn/com/taiji/ias/manager/portal/LogoutManager.java Voir le fichier

@@ -11,15 +11,17 @@ public class LogoutManager extends AbstractLoginManager {

public LogoutResponse serviceHandle(LogoutRequest request) {
try {
checkTokenCache(request.getAccessToken(), request.getOpenId(), request.getLoginSource());
String openId = findOpenIdByToken(request.getAccessToken());
checkTokenCache(request.getAccessToken(), openId, request.getLoginSource());
deleteTokenCache(request.getAccessToken(), openId);
LogoutResponse response = new LogoutResponse();
response.setInfo("退出成功");
return response;
} catch (ServiceHandleException e) {
logger.info("Token失效退出");
LogoutResponse response = new LogoutResponse();
response.setInfo("退出成功");
return response;
}
deleteTokenCache(request.getAccessToken(), request.getOpenId());
LogoutResponse response = new LogoutResponse();
response.setInfo("退出成功");
return response;
}
}

+ 4
- 1
zhywpt-service-ias/src/main/java/cn/com/taiji/ias/manager/request/EmailRequest.java Voir le fichier

@@ -4,6 +4,8 @@ import cn.com.taiji.core.model.comm.protocol.AbstractReqIdTypeRequest;
import cn.com.taiji.core.model.comm.protocol.ias.message.dto.FileVo;
import cn.com.taiji.core.model.comm.protocol.ias.message.dto.MIMEMultipartTypeEnum;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;

import java.util.List;

@@ -13,7 +15,8 @@ import java.util.List;
* @Description 邮件接口参数
*/

@Data
@Getter
@Setter
public class EmailRequest extends AbstractReqIdTypeRequest {
private String email;
private String subject;

Chargement…
Annuler
Enregistrer