Browse Source

添加redis区分

wisewoods 3 years ago
parent
commit
b3263951f7

+ 0 - 24
ruoyi-api/ruoyi-api-ext/src/main/java/com/ruoyi/ext/api/datascope/DataScopeExt.java

@@ -1,24 +0,0 @@
-package com.ruoyi.ext.api.datascope;
-
-import java.lang.annotation.*;
-
-/**
- * 数据权限过滤注解 扩展
- * 
- * @author ruoyi
- */
-@Target(ElementType.METHOD)
-@Retention(RetentionPolicy.RUNTIME)
-@Documented
-public @interface DataScopeExt
-{
-    /**
-     * 部门id字段
-     */
-    public String deptAlias() default "create_unit";
-
-    /**
-     * 用户id字段
-     */
-    public String userAlias() default "create_user_id";
-}

+ 0 - 149
ruoyi-api/ruoyi-api-ext/src/main/java/com/ruoyi/ext/api/datascope/DataScopeExtAspect.java

@@ -1,149 +0,0 @@
-package com.ruoyi.ext.api.datascope;
-
-import com.ruoyi.common.core.utils.StringUtils;
-import com.ruoyi.common.core.web.domain.BaseEntity;
-//import com.ruoyi.common.security.utils.SecurityUtils;
-//import com.ruoyi.system.api.domain.SysRole;
-//import com.ruoyi.system.api.domain.SysUser;
-//import com.ruoyi.system.api.model.LoginUser;
-import org.aspectj.lang.JoinPoint;
-import org.aspectj.lang.annotation.Aspect;
-import org.aspectj.lang.annotation.Before;
-import org.springframework.stereotype.Component;
-
-/**
- * 数据过滤处理
- * 
- * @author ruoyi
- */
-@Aspect
-@Component
-public class DataScopeExtAspect
-{
-    /**
-     * 全部数据权限
-     */
-    public static final String DATA_SCOPE_ALL = "1";
-
-    /**
-     * 自定数据权限
-     */
-    public static final String DATA_SCOPE_CUSTOM = "2";
-
-    /**
-     * 部门数据权限
-     */
-    public static final String DATA_SCOPE_DEPT = "3";
-
-    /**
-     * 部门及以下数据权限
-     */
-    public static final String DATA_SCOPE_DEPT_AND_CHILD = "4";
-
-    /**
-     * 仅本人数据权限
-     */
-    public static final String DATA_SCOPE_SELF = "5";
-
-    /**
-     * 数据权限过滤关键字
-     */
-    public static final String DATA_SCOPE = "dataScope";
-
-    @Before("@annotation(controllerDataScope)")
-    public void doBefore(JoinPoint point, DataScopeExt controllerDataScope) throws Throwable
-    {
-        clearDataScope(point);
-//        handleDataScope(point, controllerDataScope);
-    }
-
-//    protected void handleDataScope(final JoinPoint joinPoint, DataScopeExt controllerDataScope)
-//    {
-//        // 获取当前的用户
-//        LoginUser loginUser = SecurityUtils.getLoginUser();
-//        if (StringUtils.isNotNull(loginUser))
-//        {
-//            SysUser currentUser = loginUser.getSysUser();
-//            // 如果是超级管理员,则不过滤数据
-//            if (StringUtils.isNotNull(currentUser) && !currentUser.isAdmin())
-//            {
-//                dataScopeFilter(joinPoint, currentUser, controllerDataScope.deptAlias(),
-//                        controllerDataScope.userAlias());
-//            }
-//        }
-//    }
-//
-//    /**
-//     * 数据范围过滤
-//     *
-//     * @param joinPoint 切点
-//     * @param user 用户
-//     * @param deptAlias 部门别名
-//     * @param userAlias 用户别名
-//     */
-//    public static void dataScopeFilter(JoinPoint joinPoint, SysUser user, String deptAlias, String userAlias)
-//    {
-//        StringBuilder sqlString = new StringBuilder();
-//
-//        for (SysRole role : user.getRoles())
-//        {
-//            String dataScope = role.getDataScope();
-//            if (DATA_SCOPE_ALL.equals(dataScope))
-//            {
-//                sqlString = new StringBuilder();
-//                break;
-//            }
-//            else if (DATA_SCOPE_CUSTOM.equals(dataScope))
-//            {
-//                sqlString.append(StringUtils.format(
-//                        " OR {} IN ( SELECT dept_id FROM sys_role_dept WHERE role_id = {} ) ", deptAlias,
-//                        role.getRoleId()));
-//            }
-//            else if (DATA_SCOPE_DEPT.equals(dataScope))
-//            {
-//                sqlString.append(StringUtils.format(" OR {} = {} ", deptAlias, user.getDeptId()));
-//            }
-//            else if (DATA_SCOPE_DEPT_AND_CHILD.equals(dataScope))
-//            {
-//                sqlString.append(StringUtils.format(
-//                        " OR {} IN ( SELECT dept_id FROM sys_dept WHERE dept_id = {} or find_in_set( {} , ancestors ) )",
-//                        deptAlias, user.getDeptId(), user.getDeptId()));
-//            }
-//            else if (DATA_SCOPE_SELF.equals(dataScope))
-//            {
-//                if (StringUtils.isNotBlank(userAlias))
-//                {
-//                    sqlString.append(StringUtils.format(" OR {} = {} ", userAlias, user.getUserId()));
-//                }
-//                else
-//                {
-//                    // 数据权限为仅本人且没有userAlias别名不查询任何数据
-//                    sqlString.append(" OR 1=0 ");
-//                }
-//            }
-//        }
-//
-//        if (StringUtils.isNotBlank(sqlString.toString()))
-//        {
-//            Object params = joinPoint.getArgs()[0];
-//            if (StringUtils.isNotNull(params) && params instanceof BaseEntity)
-//            {
-//                BaseEntity baseEntity = (BaseEntity) params;
-//                baseEntity.getParams().put(DATA_SCOPE, " AND (" + sqlString.substring(4) + ")");
-//            }
-//        }
-//    }
-
-    /**
-     * 拼接权限sql前先清空params.dataScope参数防止注入
-     */
-    private void clearDataScope(final JoinPoint joinPoint)
-    {
-        Object params = joinPoint.getArgs()[0];
-        if (StringUtils.isNotNull(params) && params instanceof BaseEntity)
-        {
-            BaseEntity baseEntity = (BaseEntity) params;
-            baseEntity.getParams().put(DATA_SCOPE, "");
-        }
-    }
-}

+ 1 - 2
ruoyi-api/ruoyi-api-ext/src/main/resources/META-INF/spring.factories

@@ -1,4 +1,3 @@
 org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
   com.ruoyi.ext.api.factory.RemoteDictDataFallbackFactory, \
-  com.ruoyi.ext.api.factory.RemoteDictTypeFallbackFactory, \
-  com.ruoyi.ext.api.datascope.DataScopeExtAspect
+  com.ruoyi.ext.api.factory.RemoteDictTypeFallbackFactory

+ 8 - 9
ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/configure/RedisConfig.java

@@ -1,17 +1,16 @@
 package com.ruoyi.common.redis.configure;
 
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import com.fasterxml.jackson.annotation.PropertyAccessor;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator;
 import org.springframework.cache.annotation.CachingConfigurerSupport;
 import org.springframework.cache.annotation.EnableCaching;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.data.redis.connection.RedisConnectionFactory;
 import org.springframework.data.redis.core.RedisTemplate;
-import org.springframework.data.redis.serializer.StringRedisSerializer;
-import com.fasterxml.jackson.annotation.JsonAutoDetect;
-import com.fasterxml.jackson.annotation.JsonTypeInfo;
-import com.fasterxml.jackson.annotation.PropertyAccessor;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator;
 
 /**
  * redis配置
@@ -24,7 +23,7 @@ public class RedisConfig extends CachingConfigurerSupport
 {
     @Bean
     @SuppressWarnings(value = { "unchecked", "rawtypes" })
-    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory)
+    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory,RedisKeySerializer redisKeySerializer)
     {
         RedisTemplate<Object, Object> template = new RedisTemplate<>();
         template.setConnectionFactory(connectionFactory);
@@ -37,11 +36,11 @@ public class RedisConfig extends CachingConfigurerSupport
         serializer.setObjectMapper(mapper);
 
         // 使用StringRedisSerializer来序列化和反序列化redis的key值
-        template.setKeySerializer(new StringRedisSerializer());
+        template.setKeySerializer(redisKeySerializer);//template.setKeySerializer(new StringRedisSerializer());
         template.setValueSerializer(serializer);
 
         // Hash的key也采用StringRedisSerializer的序列化方式
-        template.setHashKeySerializer(new StringRedisSerializer());
+        template.setHashKeySerializer(redisKeySerializer);//template.setHashKeySerializer(new StringRedisSerializer());
         template.setHashValueSerializer(serializer);
 
         template.afterPropertiesSet();

+ 39 - 0
ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/configure/RedisKeySerializer.java

@@ -0,0 +1,39 @@
+package com.ruoyi.common.redis.configure;
+
+import org.springframework.data.redis.serializer.RedisSerializer;
+import org.springframework.data.redis.serializer.SerializationException;
+import org.springframework.stereotype.Component;
+import org.springframework.util.Assert;
+
+import java.nio.charset.Charset;
+
+@Component
+public class RedisKeySerializer implements RedisSerializer<String>
+{
+    private final Charset charset;
+    private final String key = "mz";
+
+    public RedisKeySerializer()
+    {
+        this(Charset.forName("UTF8"));
+    }
+
+    public RedisKeySerializer(Charset charset)
+    {
+        Assert.notNull(charset, "字符集不允许为NULL");
+        this.charset = charset;
+    }
+
+    @Override
+    public byte[] serialize(String string) throws SerializationException
+    {
+        // 通过项目名称ruoyi.name来定义Redis前缀,用于区分项目缓存
+        return new StringBuilder(key).append(":").append(string).toString().getBytes(charset);
+    }
+
+    @Override
+    public String deserialize(byte[] bytes) throws SerializationException
+    {
+        return (bytes == null ? null : new String(bytes, charset));
+    }
+}

+ 1 - 0
ruoyi-common/ruoyi-common-redis/src/main/resources/META-INF/spring.factories

@@ -1,5 +1,6 @@
 org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
   com.ruoyi.common.redis.configure.RedisConfig,\
+  com.ruoyi.common.redis.configure.RedisKeySerializer,\
   com.ruoyi.common.redis.service.RedisService