权限调整

This commit is contained in:
andy 2025-04-17 11:54:07 +08:00
parent 8cf4369a5a
commit a523fd90b7
29 changed files with 258 additions and 843 deletions

View File

@ -172,6 +172,9 @@ public class LoginServiceImpl implements LoginService {
uv.setPermCodeList(permCodeList);
redisUtil.lSet(HDConstant.LOGIN_CACHE_KEY_PREFIX + jti + ":perms", permUriList.toArray(new String[permUriList.size()]), tokenExp);
}
//开始缓存权限信息
redisUtil.set(HDConstant.LOGIN_CACHE_KEY_PREFIX + HDConstant.PermissionConstant.PERMISSION_AUTH_USER_UID+":"+user.getPkId(), user.getUid());
if(rcodeList.contains(HDConstant.OPERATOR_ROLE_CODE)){
BaseResponse<List<BatteryStation>> result = cloudService.loadBatteryStation(user.getBusinessCode());
if(CodeMsg.SUCCESS.getCode().equals(result.getCode())){
@ -182,6 +185,7 @@ public class LoginServiceImpl implements LoginService {
pkIds = list.stream().map(BatteryStation::getPkId).map(String::valueOf).filter(com.alibaba.nacos.common.utils.StringUtils::isNotEmpty).collect(Collectors.joining(","));
codes = list.stream().map(BatteryStation::getCode).filter(com.alibaba.nacos.common.utils.StringUtils::isNotEmpty).collect(Collectors.joining(","));
}
redisUtil.set(HDConstant.LOGIN_CACHE_KEY_PREFIX + HDConstant.PermissionConstant.PERMISSION_PROXY_CODE+":"+user.getPkId(), user.getBusinessCode());
redisUtil.set(HDConstant.LOGIN_CACHE_KEY_PREFIX + HDConstant.PermissionConstant.PERMISSION_STATION_ID+":"+user.getPkId(), pkIds);
redisUtil.set(HDConstant.LOGIN_CACHE_KEY_PREFIX + HDConstant.PermissionConstant.PERMISSION_STATION_CODE+":"+user.getPkId(), codes);
}

View File

@ -3,6 +3,8 @@ package com.evotech.hd.common.core.constant;
public interface HDConstant {
public static final class PermissionConstant{
public static final String PERMISSION_AUTH_USER_UID = "AUTH_USER_UID";
public static final String PERMISSION_PROXY_CODE = "PROXY_CODE";
public static final String PERMISSION_STATION_CODE = "STATION_CODE";
public static final String PERMISSION_STATION_ID = "STATION_ID";
public static final String PERMISSION_COMPANY_CODE = "COMPANY_CODE";

View File

@ -1,12 +1,15 @@
package com.evotech.hd.common.core.dao.resource;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.evotech.hd.common.core.constant.HDConstant;
import com.evotech.hd.common.core.entity.resource.ProxyOperater;
import com.evotech.hd.common.core.permission.DataScope;
/**
* @author zrb
* @since 2024-10-15
*/
@DataScope(permissionObject = HDConstant.OPERATOR_ROLE_CODE, permissionScopeName = "pocode", permissionScopeRedisKey = HDConstant.PermissionConstant.PERMISSION_PROXY_CODE)
public interface ProxyOperaterDao extends BaseMapper<ProxyOperater> {
}

View File

@ -1,12 +1,15 @@
package com.evotech.hd.common.core.dao.resource.auth;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.evotech.hd.common.core.constant.HDConstant;
import com.evotech.hd.common.core.entity.resource.auth.AuthRole;
import com.evotech.hd.common.core.permission.DataScope;
/**
* @author zrb
* @since 2024-09-04
*/
@DataScope(permissionObject = HDConstant.OPERATOR_ROLE_CODE, permissionScopeName = "creater", permissionScopeRedisKey = HDConstant.PermissionConstant.PERMISSION_AUTH_USER_UID)
public interface AuthRoleDao extends BaseMapper<AuthRole> {
}

View File

@ -1,12 +1,15 @@
package com.evotech.hd.common.core.dao.resource.auth;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.evotech.hd.common.core.constant.HDConstant;
import com.evotech.hd.common.core.entity.resource.auth.AuthUser;
import com.evotech.hd.common.core.permission.DataScope;
/**
* @author zrb
* @since 2024-09-04
*/
@DataScope(permissionObject = HDConstant.OPERATOR_ROLE_CODE, permissionScopeName = "creater", permissionScopeRedisKey = HDConstant.PermissionConstant.PERMISSION_AUTH_USER_UID)
public interface AuthUserDao extends BaseMapper<AuthUser> {
}

View File

@ -1,18 +1,14 @@
package com.evotech.hd.common.core.entity.resource.auth;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.io.Serializable;
import java.util.Date;
import org.springframework.format.annotation.DateTimeFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.util.Date;
/**
* @author zrb
@ -49,18 +45,22 @@ public class AuthRole implements Serializable {
private Integer readonly;
@Schema(description = "创建人")
@TableField(fill = FieldFill.INSERT)
private String creater;
@Schema(description = "创建时间", hidden = true)
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
@TableField(fill = FieldFill.INSERT)
private Date ctime;
@Schema(description = "更新人", hidden = true)
@TableField(fill = FieldFill.UPDATE)
private String updater;
@Schema(description = "更新时间")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
@TableField(fill = FieldFill.UPDATE)
private Date uptime;
}

View File

@ -1,9 +1,6 @@
package com.evotech.hd.common.core.entity.resource.auth;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.media.Schema.RequiredMode;
@ -94,19 +91,23 @@ public class AuthUser implements Serializable {
private Date lastLoginTime;
@Schema(description = "创建人", hidden = true)
@TableField(fill = FieldFill.INSERT)
private String creater;
@Schema(description = "创建时间", hidden = true)
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
@TableField(fill = FieldFill.INSERT)
private Date ctime;
@Schema(description = "更新人", hidden = true)
@TableField(fill = FieldFill.UPDATE)
private String updater;
@Schema(description = "更新时间", hidden = true)
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
@TableField(fill = FieldFill.UPDATE)
private Date uptime;
@Schema(description = "角色编码", hidden = true)

View File

@ -0,0 +1,76 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.evotech.hd</groupId>
<artifactId>base-commons</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<artifactId>common-permission</artifactId>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>com.evotech.hd</groupId>
<artifactId>common-redis</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-extension</artifactId>
<version>3.5.7</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<dependency>
<groupId>com.evotech.hd</groupId>
<artifactId>common-core</artifactId>
<version>1.0.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-jwt</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-oauth2-jose</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
</dependency>
</dependencies>
</project>

View File

@ -1,8 +1,8 @@
package com.evotech.hd.cloud.config;
package com.evotech.hd.common.permission.config.permission;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.DataPermissionInterceptor;
import com.evotech.hd.cloud.handler.DataScopeHandler;
import com.evotech.hd.common.permission.handler.DataScopeHandler;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@ -17,9 +17,9 @@ import org.springframework.transaction.annotation.EnableTransactionManagement;
*/
@EnableTransactionManagement(proxyTargetClass = true)
@Configuration
public class PermissionCloudMybatisPlusConfig {
public class PermissionMybatisPlusConfig {
@Bean("permissionCloudMybatisPlusInterceptor")
@Bean("permissionMybatisPlusInterceptor")
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();

View File

@ -1,11 +1,12 @@
package com.evotech.hd.resource.handler;
package com.evotech.hd.common.permission.handler;
import com.alibaba.nacos.common.utils.CollectionUtils;
import com.alibaba.nacos.common.utils.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.plugins.handler.MultiDataPermissionHandler;
import com.evotech.hd.common.core.permission.DataScope;
import com.evotech.hd.common.core.permission.DataScopes;
import com.evotech.hd.resource.utils.RedisResourceUtils;
import com.evotech.hd.common.permission.util.RedisPermissionUtils;
import net.sf.jsqlparser.expression.Expression;
import net.sf.jsqlparser.expression.Parenthesis;
import net.sf.jsqlparser.expression.StringValue;
@ -13,7 +14,6 @@ import net.sf.jsqlparser.expression.operators.relational.ExpressionList;
import net.sf.jsqlparser.expression.operators.relational.InExpression;
import net.sf.jsqlparser.schema.Column;
import net.sf.jsqlparser.schema.Table;
import org.apache.commons.lang3.ObjectUtils;
import java.util.Arrays;
import java.util.stream.Collectors;
@ -43,8 +43,8 @@ public class DataScopeHandler implements MultiDataPermissionHandler {
@Override
public Expression getSqlSegment(Table table, Expression where, String mappedStatementId) {
try {
if(table != null && CollectionUtils.isNotEmpty(table.getNameParts()) && !"1".equals(RedisResourceUtils.getRoleType())){
String roleCode = RedisResourceUtils.getRoleCode();
if(table != null && CollectionUtils.isNotEmpty(table.getNameParts()) && !"1".equals(RedisPermissionUtils.getRoleType())){
String roleCode = RedisPermissionUtils.getRoleCode();
Class<?> mapperClazz = Class.forName(mappedStatementId.substring(0, mappedStatementId.lastIndexOf(".")));
//优先检查是不是单角色权限
DataScope dataScope = mapperClazz.getAnnotation(DataScope.class);
@ -80,7 +80,7 @@ public class DataScopeHandler implements MultiDataPermissionHandler {
* @return
*/
private Expression buildDataScopeByAnnotation(DataScope dataScope) {
Expression expression = buildDataScopeExpression(dataScope, RedisResourceUtils.getPermissionValue(dataScope.permissionScopeRedisKey()));
Expression expression = buildDataScopeExpression(dataScope, RedisPermissionUtils.getPermissionValue(dataScope.permissionScopeRedisKey()));
return expression == null ? null : new Parenthesis(expression);
}

View File

@ -0,0 +1,67 @@
package com.evotech.hd.common.permission.handler;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.evotech.hd.common.core.entity.resource.auth.AuthUser;
import com.evotech.hd.common.permission.util.RedisPermissionUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.util.Date;
/**
* @desc: 修改和新增自定义注解
* @ClassName:InsertAndUpdateMybatisHandler
* @date: 2025年04月17日 9:03
* @author: andy.shi
* @contact: 17330188597
* @remark: 开发人员联系方式 1042025947@qq.com/微信同步
*/
@Component
@Slf4j
public class InsertAndUpdateMybatisHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
try {
AuthUser user = RedisPermissionUtils.getUser();
if(BeanUtil.isEmpty(user)){
log.info("当前操作位登录, 无需执行");
return;
}
if(BeanUtil.isNotEmpty(metaObject)){
mySetFieldValByName("creater",user.getUid(),metaObject);
mySetFieldValByName("ctime",new Date(),metaObject);
}
} catch (Exception e) {
log.error("自动填充拦截器异常=====insert,对象信息:{}, 异常信息:{}", JSONUtil.toJsonStr(metaObject), e.getMessage());
}
}
private void mySetFieldValByName(String filedName, Object fieldVal, MetaObject metaObject) {
Object createType = getFieldValByName(filedName,metaObject);
if(BeanUtil.isEmpty(createType)){
setFieldValByName(filedName,fieldVal,metaObject);
}
}
@Override
public void updateFill(MetaObject metaObject) {
try {
AuthUser user = RedisPermissionUtils.getUser();
if(BeanUtil.isEmpty(user)){
log.info("当前操作未登录, 无需执行");
return;
}
if(BeanUtil.isNotEmpty(metaObject)){
mySetFieldValByName("updater",user.getUid(),metaObject);
mySetFieldValByName("uptime",new Date(),metaObject);
}
} catch (Exception e) {
log.error("自动填充拦截器异常=====update,对象信息:{}, 异常信息:{}", JSONUtil.toJsonStr(metaObject),e.getMessage());
}
}
}

View File

@ -1,10 +1,8 @@
package com.evotech.hd.cloud.utils;
package com.evotech.hd.common.permission.util;
import com.evotech.hd.common.core.constant.HDConstant;
import com.evotech.hd.common.core.entity.resource.auth.AuthUser;
import com.evotech.hd.common.redis.utils.RedisUtil;
import com.evotech.hd.common.web.util.RequestContextUtil;
import com.evotech.hd.common.web.util.SpringUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
@ -19,7 +17,7 @@ import org.springframework.util.StringUtils;
*/
@Slf4j
public class RedisCloudUtils {
public class RedisPermissionUtils {
public static AuthUser getUser(){
AuthUser user = (AuthUser)getRedisObjectValue("user");
@ -58,7 +56,7 @@ public class RedisCloudUtils {
private static Integer getUserPkId(){
AuthUser user = getUser();
if(org.apache.commons.lang3.ObjectUtils.isEmpty(user) || user.getPkId() == null){
if(ObjectUtils.isEmpty(user) || user.getPkId() == null){
return null;
}
return user.getPkId();
@ -105,7 +103,7 @@ public class RedisCloudUtils {
}
private static Boolean isAuthority(String checkParamRoles, String paramRoleCode){
if(org.apache.commons.lang3.StringUtils.isNotEmpty(checkParamRoles)){
if(!StringUtils.isEmpty(checkParamRoles)){
return checkParamRoles.lastIndexOf(paramRoleCode) != -1;
}
return getRoleCode().lastIndexOf(paramRoleCode) != -1;
@ -127,7 +125,7 @@ public class RedisCloudUtils {
* @return
*/
private static Object getRedisObjectValue(String key) {
String token = RequestContextUtil.getToken();
String token = SpringUtil.getToken();
if(StringUtils.isEmpty(token)){
log.error("SpringUtil.getRedisValue========== token is null");
return null;

View File

@ -1,5 +1,6 @@
package com.evotech.hd.common.web.util;
package com.evotech.hd.common.permission.util;
import com.evotech.hd.common.core.constant.HDConstant;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
@ -7,6 +8,7 @@ import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
@ -39,6 +41,14 @@ public class SpringUtil implements ApplicationContextAware {
return applicationContext;
}
public static String getToken() {
String authorization = getRequest().getHeader(HDConstant.AUTHORIZATION_KEY);
if (StringUtils.hasLength(authorization) && authorization.contains(HDConstant.JWT_PREFIX)) {
return authorization.substring(HDConstant.JWT_PREFIX.length());
}
return null;
}
public static Object getBean(String name) {
return getApplicationContext().getBean(name);
}

View File

@ -1,4 +1,4 @@
package com.evotech.hd.resource.utils;
package com.evotech.hd.common.permission.util;
import cn.hutool.core.date.DateUtil;
import cn.hutool.jwt.JWT;

View File

@ -14,5 +14,6 @@
<module>common-web</module>
<module>common-mybatis</module>
<module>common-redis</module>
<module>common-permission</module>
</modules>
</project>

View File

@ -26,13 +26,11 @@
<artifactId>common-mybatis</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.evotech.hd</groupId>
<artifactId>common-redis</artifactId>
<version>1.0.0-SNAPSHOT</version>
<groupId>com.evotech.hd</groupId>
<artifactId>common-permission</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
<!-- openfein -->
<dependency>
<groupId>org.springframework.cloud</groupId>
@ -82,15 +80,6 @@
<groupId>cn.hutool</groupId>
<artifactId>hutool-crypto</artifactId>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-jwt</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-oauth2-jose</artifactId>
</dependency>
</dependencies>
<build>

View File

@ -1,115 +0,0 @@
package com.evotech.hd.cloud.handler;
import com.alibaba.nacos.common.utils.CollectionUtils;
import com.alibaba.nacos.common.utils.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.handler.MultiDataPermissionHandler;
import com.evotech.hd.cloud.utils.RedisCloudUtils;
import com.evotech.hd.common.core.permission.DataScope;
import com.evotech.hd.common.core.permission.DataScopes;
import net.sf.jsqlparser.expression.Expression;
import net.sf.jsqlparser.expression.Parenthesis;
import net.sf.jsqlparser.expression.StringValue;
import net.sf.jsqlparser.expression.operators.relational.ExpressionList;
import net.sf.jsqlparser.expression.operators.relational.InExpression;
import net.sf.jsqlparser.schema.Column;
import net.sf.jsqlparser.schema.Table;
import org.apache.commons.lang3.ObjectUtils;
import java.util.Arrays;
import java.util.stream.Collectors;
/**
* @desc:
* @ClassName:DataScopeHandler
* @date: 2025年04月14日 14:54
* @author: andy.shi
* @contact: 17330188597
* @remark: 开发人员联系方式 1042025947@qq.com/微信同步
*/
public class DataScopeHandler implements MultiDataPermissionHandler {
/**
* 获取数据权限 SQL 片段
* <p>旧的 {@link MultiDataPermissionHandler#getSqlSegment(Expression, String)} 方法第一个参数包含所有的 where 条件信息如果 return null 会覆盖原有的 where 数据</p>
* <p>新版的 {@link MultiDataPermissionHandler#getSqlSegment(Table, Expression, String)} 方法不能覆盖原有的 where 数据如果 return null 则表示不追加任何 where 条件</p>
*
* @param table 所执行的数据库表信息可以通过此参数获取表名和表别名
* @param where 原有的 where 条件信息
* @param mappedStatementId Mybatis MappedStatement Id 根据该参数可以判断具体执行方法
* @return JSqlParser 条件表达式返回的条件表达式会拼接在原有的表达式后面不会覆盖原有的表达式
*/
@Override
public Expression getSqlSegment(Table table, Expression where, String mappedStatementId) {
try {
if(table != null && CollectionUtils.isNotEmpty(table.getNameParts()) && !"1".equals(RedisCloudUtils.getRoleType())){
String roleCode = RedisCloudUtils.getRoleCode();
Class<?> mapperClazz = Class.forName(mappedStatementId.substring(0, mappedStatementId.lastIndexOf(".")));
//优先检查是不是单角色权限
DataScope dataScope = mapperClazz.getAnnotation(DataScope.class);
if (ObjectUtils.isNotEmpty(dataScope) && dataScope.enabled()) {
if(dataScope.permissionObject().equals(roleCode)){
return buildDataScopeByAnnotation(dataScope);
}
}
//如果不是, 检查多角色权限
DataScopes dataScopesList = mapperClazz.getAnnotation(DataScopes.class);
if (ObjectUtils.isNotEmpty(dataScopesList)) {
for (DataScope dataScopes :dataScopesList.value()){
if(dataScopes.enabled()){
if(dataScopes.permissionObject().equals(roleCode)){
return buildDataScopeByAnnotation(dataScopes);
}
}
}
}
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return null;
}
/**
* DataScope注解方式拼装数据权限
*
* @param dataScope
* @return
*/
private Expression buildDataScopeByAnnotation(DataScope dataScope) {
Expression expression = buildDataScopeExpression(dataScope, RedisCloudUtils.getPermissionValue(dataScope.permissionScopeRedisKey()));
return expression == null ? null : new Parenthesis(expression);
}
private Expression buildDataScopeExpression(DataScope dataScope, String value) {
if(!"null".equals(value)){
ExpressionList expressionList = new ExpressionList(Arrays.asList(value.split(",")).stream().map(StringValue::new).collect(Collectors.toList()));
// 设置左边的字段表达式右边设置值
InExpression operatorInExpression = new InExpression();
operatorInExpression.setLeftExpression(buildColumn(dataScope.tableAlias(), dataScope.permissionScopeName()));
operatorInExpression.setRightExpression(new Parenthesis(expressionList));
return operatorInExpression;
}
return null;
}
/**
* 构建Column
*
* @param tableAlias 表别名
* @param columnName 字段名称
* @return 带表别名字段
*/
private static Column buildColumn(String tableAlias, String columnName) {
if (StringUtils.isNotEmpty(tableAlias)) {
columnName = tableAlias + "." + columnName;
}
return new Column(columnName);
}
}

View File

@ -11,7 +11,7 @@ import com.evotech.hd.cloud.mqtt.message.MessageTopic;
import com.evotech.hd.cloud.mqtt.message.MqttMessageHeader;
import com.evotech.hd.cloud.mqtt.message.dto.newer.req.MqttResponse;
import com.evotech.hd.cloud.mqtt.message.handle.MessageUtilService;
import com.evotech.hd.common.web.util.SpringUtil;
import com.evotech.hd.common.permission.util.SpringUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

View File

@ -1,56 +0,0 @@
package com.evotech.hd.cloud.utils;
import cn.hutool.core.date.DateUtil;
import cn.hutool.jwt.JWT;
import cn.hutool.jwt.JWTUtil;
import org.springframework.security.oauth2.jwt.JwtClaimNames;
import java.util.Date;
/**
* token解析工具类
*/
public class TokenUtil {
public static JWT parseToJwt(String token) {
JWT parseToken = JWTUtil.parseToken(token);
return parseToken;
}
/**
* 从token中获取userId
*/
public static String getUserId(String token) {
String uid = parseToJwt(token).getPayloads().getStr("uid");
return uid;
}
/**
* 从token中获取rcodes
*/
public static String getRcodes(String token) {
String uid = parseToJwt(token).getPayloads().getStr("rcodes");
return uid;
}
/**
* 从token中获取jti
*/
public static String getJti(String token) {
String jti = parseToJwt(token).getPayloads().getStr(JwtClaimNames.JTI).replaceAll("-", "");
return jti;
}
/**
* 从token中获取过期时间
*/
public static Date getExp(String token) {
String exp = parseToJwt(token).getPayloads().getStr(JwtClaimNames.EXP).toString();
return DateUtil.date(Long.valueOf(exp) * 1000);
}
}

View File

@ -22,7 +22,11 @@
<artifactId>common-web</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.evotech.hd</groupId>
<artifactId>common-permission</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.evotech.hd</groupId>
<artifactId>common-mybatis</artifactId>
@ -66,20 +70,6 @@
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
</dependency>
<dependency>
<groupId>com.evotech.hd</groupId>
<artifactId>common-redis</artifactId>
<version>1.0.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-jwt</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-oauth2-jose</artifactId>
</dependency>
</dependencies>
<build>

View File

@ -1,31 +0,0 @@
package com.evotech.hd.resource.config.permission;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.DataPermissionInterceptor;
import com.evotech.hd.resource.handler.DataScopeHandler;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;
/**
* @desc:
* @ClassName:MybatisPlusConfig
* @date: 2025年04月14日 16:14
* @author: andy.shi
* @contact: 17330188597
* @remark: 开发人员联系方式 1042025947@qq.com/微信同步
*/
@EnableTransactionManagement(proxyTargetClass = true)
@Configuration
public class PermissionResourceMybatisPlusConfig {
@Bean("permissionResourceMybatisPlusInterceptor")
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
// 数据权限插件
interceptor.addInnerInterceptor(new DataPermissionInterceptor(new DataScopeHandler()));
return interceptor;
}
}

View File

@ -1,12 +1,6 @@
package com.evotech.hd.resource.service.impl;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import com.alibaba.nacos.common.utils.CollectionUtils;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.evotech.hd.common.core.constant.HDConstant;
import com.evotech.hd.common.core.dao.resource.auth.AuthMenuDao;
@ -18,11 +12,20 @@ import com.evotech.hd.common.core.entity.resource.auth.AuthRoleResource;
import com.evotech.hd.common.core.enums.CodeMsg;
import com.evotech.hd.resource.service.MenuService;
import com.evotech.hd.resource.utils.MenuUtil;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletRequest;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
@Service
@Slf4j
public class MenuServiceImpl implements MenuService {
@Resource
@ -89,9 +92,35 @@ public class MenuServiceImpl implements MenuService {
if (menuList.isEmpty()) {
return new Result<List<AuthMenu>>().error(CodeMsg.DATABASE_RESULT_NULL);
}
buildParentAuthMenu(menuList);
menuList = MenuUtil.treeMenuList(menuList, 0);
return new Result<List<AuthMenu>>().success(menuList);
}
public List<AuthMenu> buildParentAuthMenu(List<AuthMenu> menuList){
//初始化加载父级
try {
List<Integer> pkIds = menuList.stream().map(AuthMenu::getPkId).collect(Collectors.toList());
List<Integer> lodParentIds = new ArrayList<>();
menuList.stream().map(AuthMenu::getParentId).forEach(parentId -> {
if(!pkIds.contains(parentId) && !lodParentIds.contains(parentId)) {
lodParentIds.add(parentId);
}
});
if(CollectionUtils.isNotEmpty(lodParentIds)) {
List<AuthMenu> parentList = authMenuDao.selectList(new QueryWrapper<AuthMenu>().in("pk_id", lodParentIds));
if(CollectionUtils.isNotEmpty(parentList)) {
menuList.addAll(parentList);
}
}
} catch (Exception e) {
log.error("加载父级菜单出现异常: {}", e.getMessage());
}
return menuList;
}
}

View File

@ -205,8 +205,18 @@ public class RoleServiceImpl implements RoleService {
oldResourceIds.add(arr.getResourceId());
}
}
List<Dict> dictList = dictService.listDictByType(HDConstant.DEFAULT_MENU_TYPE);
List<String> defaultIds = new ArrayList<>();
if(CollectionUtils.isNotEmpty(dictList)) {
dictList.stream().forEach(dict -> {
defaultIds.add(dict.getDictValue());
});
}
// 2. 删除原来的
authRoleResourceDao.delete(new LambdaQueryWrapper<AuthRoleResource>().eq(AuthRoleResource::getRcode, rcode).in(AuthRoleResource::getResourceType, typeArr).in(CollectionUtils.isNotEmpty(oldResourceIds),AuthRoleResource::getResourceId, oldResourceIds));
authRoleResourceDao.delete(new LambdaQueryWrapper<AuthRoleResource>().eq(AuthRoleResource::getRcode, rcode)
.notIn(CollectionUtils.isNotEmpty(defaultIds), AuthRoleResource::getResourceId, defaultIds)
.in(AuthRoleResource::getResourceType, typeArr).in(CollectionUtils.isNotEmpty(oldResourceIds) && darsr.getTypes().indexOf("MENU")< 0,AuthRoleResource::getResourceId, oldResourceIds)
);
return addRoleSource(list);
}

View File

@ -1,179 +0,0 @@
package com.evotech.hd.resource.utils;
import com.evotech.hd.common.core.constant.HDConstant;
import com.evotech.hd.common.core.entity.resource.auth.AuthUser;
import com.evotech.hd.common.redis.utils.RedisUtil;
import com.evotech.hd.common.web.util.RequestContextUtil;
import com.evotech.hd.common.web.util.SpringUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
/**
* @desc:
* @ClassName:RedisCloudUtils
* @date: 2025年04月14日 15:24
* @author: andy.shi
* @contact: 17330188597
* @remark: 开发人员联系方式 1042025947@qq.com/微信同步
*/
@Slf4j
public class RedisResourceUtils {
public static AuthUser getUser(){
AuthUser user = (AuthUser)getRedisObjectValue("user");
return (ObjectUtils.isEmpty(user) ? null : user);
}
public static String getRoleCode(){
String roles = getRedisStringValue("rcodes");
return StringUtils.isEmpty(roles) ? "" : roles;
}
public static String getPermissionValue(String key){
return getStringValue(HDConstant.LOGIN_CACHE_KEY_PREFIX + key+":"+getUserPkId());
}
public static String getStationCode(){
return getStringValue(HDConstant.LOGIN_CACHE_KEY_PREFIX + HDConstant.PermissionConstant.PERMISSION_STATION_CODE+":"+getUserPkId());
}
public static String getStationId(){
return getStringValue(HDConstant.LOGIN_CACHE_KEY_PREFIX + HDConstant.PermissionConstant.PERMISSION_STATION_ID+":"+getUserPkId());
}
public static String getCompanyCode(){
return getStringValue(HDConstant.LOGIN_CACHE_KEY_PREFIX + HDConstant.PermissionConstant.PERMISSION_COMPANY_CODE+":"+getUserPkId());
}
public static String getCompanyId(){
return getStringValue(HDConstant.LOGIN_CACHE_KEY_PREFIX + HDConstant.PermissionConstant.PERMISSION_COMPANY_ID+":"+getUserPkId());
}
public static String getCarCode(){
return getStringValue(HDConstant.LOGIN_CACHE_KEY_PREFIX + HDConstant.PermissionConstant.PERMISSION_CAR_CODE+":"+getUserPkId());
}
public static String getCarId(){
return getStringValue(HDConstant.LOGIN_CACHE_KEY_PREFIX + HDConstant.PermissionConstant.PERMISSION_CAR_ID+":"+getUserPkId());
}
private static Integer getUserPkId(){
AuthUser user = getUser();
if(org.apache.commons.lang3.ObjectUtils.isEmpty(user) || user.getPkId() == null){
return null;
}
return user.getPkId();
}
// public static Integer getCompanyScopeId(){
// return getUser().getPkId();
// }
/**
* 获取当前登录的角色信息, 0 站端, 1 管理员, 2 运营商, 3 公司,
* @author: andy.shi
* @contact: 17330188597
* @date: 2025/4/14/周一 14:21
* @return: * @return: java.lang.String
*/
public static String getRoleType(){
String roles = getRoleCode();
if(isAdmin(roles)){
return "1";
}
if(isOperator(roles)){
return "2";
}
if(isCompany(roles)){
return "3";
}
return "0";
}
//如果不等于-1 则证明为管理员
public static Boolean isAdmin(String roles){
return isAuthority(roles, HDConstant.SYSTEM_MANAGER_ROLE_CODE);
}
public static Boolean isOperator(String roles){
return isAuthority(roles,HDConstant.OPERATOR_ROLE_CODE);
}
public static Boolean isCompany(String roles){
return isAuthority(roles,HDConstant.COMPANY_ROLE_CODE);
}
private static Boolean isAuthority(String checkParamRoles, String paramRoleCode){
if(org.apache.commons.lang3.StringUtils.isNotEmpty(checkParamRoles)){
return checkParamRoles.lastIndexOf(paramRoleCode) != -1;
}
return getRoleCode().lastIndexOf(paramRoleCode) != -1;
}
/***
* 根据token拼接key, 获取String结果
* @param key
* @return
*/
private static String getRedisStringValue(String key) {
return String.valueOf(getRedisObjectValue(key));
}
/***
* 根据token拼接key, 获取Object结果
* @param key
* @return
*/
private static Object getRedisObjectValue(String key) {
String token = RequestContextUtil.getToken();
if(StringUtils.isEmpty(token)){
log.error("SpringUtil.getRedisValue========== token is null");
return null;
}
String jti = null;
try {
jti = TokenUtil.getJti(token);
if(StringUtils.isEmpty(jti)){
log.error("SpringUtil.getRedisValue========== jtj is null");
return null;
}
} catch (Exception e) {
log.error("SpringUtil.gegetRedisValuetUser========== jtj is null");
return null;
}
return getValue(HDConstant.LOGIN_CACHE_KEY_PREFIX + jti + ":"+key);
}
/***
* 根据key获取redis缓存
* @param key
* @return
*/
private static String getStringValue(String key){
Object obj = getValue(key);
return ObjectUtils.isEmpty(obj) ? null : String.valueOf(obj);
}
/***
* 根据key获取redis缓存
* @param key
* @return
*/
private static Object getValue(String key){
RedisUtil redisUtil = SpringUtil.getBean(RedisUtil.class);
if(ObjectUtils.isEmpty(redisUtil)){
log.error("SpringUtil.getRedisValue========== redisUtil is null");
}
Object obj = redisUtil.get(key);
if(ObjectUtils.isEmpty(obj)){
log.error("SpringUtil.getRedisValue=={}========== obj is null",key);
return null;
}
log.info("SpringUtil.getRedisValue=={}===={}",key,String.valueOf(obj));
return obj;
}
}

View File

@ -23,7 +23,7 @@
</dependency>
<dependency>
<groupId>com.evotech.hd</groupId>
<artifactId>common-redis</artifactId>
<artifactId>common-permission</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
@ -80,16 +80,6 @@
<artifactId>core</artifactId>
<version>3.5.3</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-oauth2-jose</artifactId>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-jwt</artifactId>
</dependency>
</dependencies>
<build>

View File

@ -1,30 +0,0 @@
package com.evotech.hd.wechat.config;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.DataPermissionInterceptor;
import com.evotech.hd.wechat.handler.DataScopeHandler;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;
/**
* @desc:
* @ClassName:MybatisPlusConfig
* @date: 2025年04月14日 16:14
* @author: andy.shi
* @contact: 17330188597
* @remark: 开发人员联系方式 1042025947@qq.com/微信同步
*/
@EnableTransactionManagement(proxyTargetClass = true)
@Configuration
public class PermissionWechatMybatisPlusConfig {
@Bean("permissionWechatMybatisPlusInterceptor")
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
// 数据权限插件
interceptor.addInnerInterceptor(new DataPermissionInterceptor(new DataScopeHandler()));
return interceptor;
}
}

View File

@ -1,115 +0,0 @@
package com.evotech.hd.wechat.handler;
import com.alibaba.nacos.common.utils.CollectionUtils;
import com.alibaba.nacos.common.utils.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.handler.MultiDataPermissionHandler;
import com.evotech.hd.common.core.permission.DataScope;
import com.evotech.hd.common.core.permission.DataScopes;
import com.evotech.hd.wechat.utils.permission.RedisWechatUtils;
import net.sf.jsqlparser.expression.Expression;
import net.sf.jsqlparser.expression.Parenthesis;
import net.sf.jsqlparser.expression.StringValue;
import net.sf.jsqlparser.expression.operators.relational.ExpressionList;
import net.sf.jsqlparser.expression.operators.relational.InExpression;
import net.sf.jsqlparser.schema.Column;
import net.sf.jsqlparser.schema.Table;
import org.apache.commons.lang3.ObjectUtils;
import java.util.Arrays;
import java.util.stream.Collectors;
/**
* @desc:
* @ClassName:DataScopeHandler
* @date: 2025年04月14日 14:54
* @author: andy.shi
* @contact: 17330188597
* @remark: 开发人员联系方式 1042025947@qq.com/微信同步
*/
public class DataScopeHandler implements MultiDataPermissionHandler {
/**
* 获取数据权限 SQL 片段
* <p>旧的 {@link MultiDataPermissionHandler#getSqlSegment(Expression, String)} 方法第一个参数包含所有的 where 条件信息如果 return null 会覆盖原有的 where 数据</p>
* <p>新版的 {@link MultiDataPermissionHandler#getSqlSegment(Table, Expression, String)} 方法不能覆盖原有的 where 数据如果 return null 则表示不追加任何 where 条件</p>
*
* @param table 所执行的数据库表信息可以通过此参数获取表名和表别名
* @param where 原有的 where 条件信息
* @param mappedStatementId Mybatis MappedStatement Id 根据该参数可以判断具体执行方法
* @return JSqlParser 条件表达式返回的条件表达式会拼接在原有的表达式后面不会覆盖原有的表达式
*/
@Override
public Expression getSqlSegment(Table table, Expression where, String mappedStatementId) {
try {
if(table != null && CollectionUtils.isNotEmpty(table.getNameParts()) && !"1".equals(RedisWechatUtils.getRoleType())){
String roleCode = RedisWechatUtils.getRoleCode();
Class<?> mapperClazz = Class.forName(mappedStatementId.substring(0, mappedStatementId.lastIndexOf(".")));
//优先检查是不是单角色权限
DataScope dataScope = mapperClazz.getAnnotation(DataScope.class);
if (ObjectUtils.isNotEmpty(dataScope) && dataScope.enabled()) {
if(dataScope.permissionObject().equals(roleCode)){
return buildDataScopeByAnnotation(dataScope);
}
}
//如果不是, 检查多角色权限
DataScopes dataScopesList = mapperClazz.getAnnotation(DataScopes.class);
if (ObjectUtils.isNotEmpty(dataScopesList)) {
for (DataScope dataScopes :dataScopesList.value()){
if(dataScopes.enabled()){
if(dataScopes.permissionObject().equals(roleCode)){
return buildDataScopeByAnnotation(dataScopes);
}
}
}
}
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return null;
}
/**
* DataScope注解方式拼装数据权限
*
* @param dataScope
* @return
*/
private Expression buildDataScopeByAnnotation(DataScope dataScope) {
Expression expression = buildDataScopeExpression(dataScope, RedisWechatUtils.getPermissionValue(dataScope.permissionScopeRedisKey()));
return expression == null ? null : new Parenthesis(expression);
}
private Expression buildDataScopeExpression(DataScope dataScope, String value) {
if(!"null".equals(value)){
ExpressionList expressionList = new ExpressionList(Arrays.asList(value.split(",")).stream().map(StringValue::new).collect(Collectors.toList()));
// 设置左边的字段表达式右边设置值
InExpression operatorInExpression = new InExpression();
operatorInExpression.setLeftExpression(buildColumn(dataScope.tableAlias(), dataScope.permissionScopeName()));
operatorInExpression.setRightExpression(new Parenthesis(expressionList));
return operatorInExpression;
}
return null;
}
/**
* 构建Column
*
* @param tableAlias 表别名
* @param columnName 字段名称
* @return 带表别名字段
*/
private static Column buildColumn(String tableAlias, String columnName) {
if (StringUtils.isNotEmpty(tableAlias)) {
columnName = tableAlias + "." + columnName;
}
return new Column(columnName);
}
}

View File

@ -1,179 +0,0 @@
package com.evotech.hd.wechat.utils.permission;
import com.evotech.hd.common.core.constant.HDConstant;
import com.evotech.hd.common.core.entity.resource.auth.AuthUser;
import com.evotech.hd.common.redis.utils.RedisUtil;
import com.evotech.hd.common.web.util.RequestContextUtil;
import com.evotech.hd.common.web.util.SpringUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
/**
* @desc:
* @ClassName:RedisCloudUtils
* @date: 2025年04月14日 15:24
* @author: andy.shi
* @contact: 17330188597
* @remark: 开发人员联系方式 1042025947@qq.com/微信同步
*/
@Slf4j
public class RedisWechatUtils {
public static AuthUser getUser(){
AuthUser user = (AuthUser)getRedisObjectValue("user");
return (ObjectUtils.isEmpty(user) ? null : user);
}
public static String getRoleCode(){
String roles = getRedisStringValue("rcodes");
return StringUtils.isEmpty(roles) ? "" : roles;
}
public static String getPermissionValue(String key){
return getStringValue(HDConstant.LOGIN_CACHE_KEY_PREFIX + key+":"+getUserPkId());
}
public static String getStationCode(){
return getStringValue(HDConstant.LOGIN_CACHE_KEY_PREFIX + HDConstant.PermissionConstant.PERMISSION_STATION_CODE+":"+getUserPkId());
}
public static String getStationId(){
return getStringValue(HDConstant.LOGIN_CACHE_KEY_PREFIX + HDConstant.PermissionConstant.PERMISSION_STATION_ID+":"+getUserPkId());
}
public static String getCompanyCode(){
return getStringValue(HDConstant.LOGIN_CACHE_KEY_PREFIX + HDConstant.PermissionConstant.PERMISSION_COMPANY_CODE+":"+getUserPkId());
}
public static String getCompanyId(){
return getStringValue(HDConstant.LOGIN_CACHE_KEY_PREFIX + HDConstant.PermissionConstant.PERMISSION_COMPANY_ID+":"+getUserPkId());
}
public static String getCarCode(){
return getStringValue(HDConstant.LOGIN_CACHE_KEY_PREFIX + HDConstant.PermissionConstant.PERMISSION_CAR_CODE+":"+getUserPkId());
}
public static String getCarId(){
return getStringValue(HDConstant.LOGIN_CACHE_KEY_PREFIX + HDConstant.PermissionConstant.PERMISSION_CAR_ID+":"+getUserPkId());
}
private static Integer getUserPkId(){
AuthUser user = getUser();
if(org.apache.commons.lang3.ObjectUtils.isEmpty(user) || user.getPkId() == null){
return null;
}
return user.getPkId();
}
// public static Integer getCompanyScopeId(){
// return getUser().getPkId();
// }
/**
* 获取当前登录的角色信息, 0 站端, 1 管理员, 2 运营商, 3 公司,
* @author: andy.shi
* @contact: 17330188597
* @date: 2025/4/14/周一 14:21
* @return: * @return: java.lang.String
*/
public static String getRoleType(){
String roles = getRoleCode();
if(isAdmin(roles)){
return "1";
}
if(isOperator(roles)){
return "2";
}
if(isCompany(roles)){
return "3";
}
return "0";
}
//如果不等于-1 则证明为管理员
public static Boolean isAdmin(String roles){
return isAuthority(roles, HDConstant.SYSTEM_MANAGER_ROLE_CODE);
}
public static Boolean isOperator(String roles){
return isAuthority(roles,HDConstant.OPERATOR_ROLE_CODE);
}
public static Boolean isCompany(String roles){
return isAuthority(roles,HDConstant.COMPANY_ROLE_CODE);
}
private static Boolean isAuthority(String checkParamRoles, String paramRoleCode){
if(org.apache.commons.lang3.StringUtils.isNotEmpty(checkParamRoles)){
return checkParamRoles.lastIndexOf(paramRoleCode) != -1;
}
return getRoleCode().lastIndexOf(paramRoleCode) != -1;
}
/***
* 根据token拼接key, 获取String结果
* @param key
* @return
*/
private static String getRedisStringValue(String key) {
return String.valueOf(getRedisObjectValue(key));
}
/***
* 根据token拼接key, 获取Object结果
* @param key
* @return
*/
private static Object getRedisObjectValue(String key) {
String token = RequestContextUtil.getToken();
if(StringUtils.isEmpty(token)){
log.error("SpringUtil.getRedisValue========== token is null");
return null;
}
String jti = null;
try {
jti = TokenUtil.getJti(token);
if(StringUtils.isEmpty(jti)){
log.error("SpringUtil.getRedisValue========== jtj is null");
return null;
}
} catch (Exception e) {
log.error("SpringUtil.gegetRedisValuetUser========== jtj is null");
return null;
}
return getValue(HDConstant.LOGIN_CACHE_KEY_PREFIX + jti + ":"+key);
}
/***
* 根据key获取redis缓存
* @param key
* @return
*/
private static String getStringValue(String key){
Object obj = getValue(key);
return ObjectUtils.isEmpty(obj) ? null : String.valueOf(obj);
}
/***
* 根据key获取redis缓存
* @param key
* @return
*/
private static Object getValue(String key){
RedisUtil redisUtil = SpringUtil.getBean(RedisUtil.class);
if(ObjectUtils.isEmpty(redisUtil)){
log.error("SpringUtil.getRedisValue========== redisUtil is null");
}
Object obj = redisUtil.get(key);
if(ObjectUtils.isEmpty(obj)){
log.error("SpringUtil.getRedisValue=={}========== obj is null",key);
return null;
}
log.info("SpringUtil.getRedisValue=={}===={}",key,String.valueOf(obj));
return obj;
}
}

View File

@ -1,56 +0,0 @@
package com.evotech.hd.wechat.utils.permission;
import cn.hutool.core.date.DateUtil;
import cn.hutool.jwt.JWT;
import cn.hutool.jwt.JWTUtil;
import org.springframework.security.oauth2.jwt.JwtClaimNames;
import java.util.Date;
/**
* token解析工具类
*/
public class TokenUtil {
public static JWT parseToJwt(String token) {
JWT parseToken = JWTUtil.parseToken(token);
return parseToken;
}
/**
* 从token中获取userId
*/
public static String getUserId(String token) {
String uid = parseToJwt(token).getPayloads().getStr("uid");
return uid;
}
/**
* 从token中获取rcodes
*/
public static String getRcodes(String token) {
String uid = parseToJwt(token).getPayloads().getStr("rcodes");
return uid;
}
/**
* 从token中获取jti
*/
public static String getJti(String token) {
String jti = parseToJwt(token).getPayloads().getStr(JwtClaimNames.JTI).replaceAll("-", "");
return jti;
}
/**
* 从token中获取过期时间
*/
public static Date getExp(String token) {
String exp = parseToJwt(token).getPayloads().getStr(JwtClaimNames.EXP).toString();
return DateUtil.date(Long.valueOf(exp) * 1000);
}
}