新增缓存列表菜单功能
This commit is contained in:
		@@ -6,12 +6,13 @@ import java.util.concurrent.TimeUnit;
 | 
				
			|||||||
import javax.annotation.Resource;
 | 
					import javax.annotation.Resource;
 | 
				
			||||||
import javax.imageio.ImageIO;
 | 
					import javax.imageio.ImageIO;
 | 
				
			||||||
import javax.servlet.http.HttpServletResponse;
 | 
					import javax.servlet.http.HttpServletResponse;
 | 
				
			||||||
import com.ruoyi.common.config.RuoYiConfig;
 | 
					 | 
				
			||||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
					import org.springframework.beans.factory.annotation.Autowired;
 | 
				
			||||||
import org.springframework.util.FastByteArrayOutputStream;
 | 
					import org.springframework.util.FastByteArrayOutputStream;
 | 
				
			||||||
import org.springframework.web.bind.annotation.GetMapping;
 | 
					import org.springframework.web.bind.annotation.GetMapping;
 | 
				
			||||||
import org.springframework.web.bind.annotation.RestController;
 | 
					import org.springframework.web.bind.annotation.RestController;
 | 
				
			||||||
import com.google.code.kaptcha.Producer;
 | 
					import com.google.code.kaptcha.Producer;
 | 
				
			||||||
 | 
					import com.ruoyi.common.config.RuoYiConfig;
 | 
				
			||||||
 | 
					import com.ruoyi.common.constant.CacheConstants;
 | 
				
			||||||
import com.ruoyi.common.constant.Constants;
 | 
					import com.ruoyi.common.constant.Constants;
 | 
				
			||||||
import com.ruoyi.common.core.domain.AjaxResult;
 | 
					import com.ruoyi.common.core.domain.AjaxResult;
 | 
				
			||||||
import com.ruoyi.common.core.redis.RedisCache;
 | 
					import com.ruoyi.common.core.redis.RedisCache;
 | 
				
			||||||
@@ -54,7 +55,7 @@ public class CaptchaController
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        // 保存验证码信息
 | 
					        // 保存验证码信息
 | 
				
			||||||
        String uuid = IdUtils.simpleUUID();
 | 
					        String uuid = IdUtils.simpleUUID();
 | 
				
			||||||
        String verifyKey = Constants.CAPTCHA_CODE_KEY + uuid;
 | 
					        String verifyKey = CacheConstants.CAPTCHA_CODE_KEY + uuid;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        String capStr = null, code = null;
 | 
					        String capStr = null, code = null;
 | 
				
			||||||
        BufferedImage image = null;
 | 
					        BufferedImage image = null;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,19 +1,25 @@
 | 
				
			|||||||
package com.ruoyi.web.controller.monitor;
 | 
					package com.ruoyi.web.controller.monitor;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.util.ArrayList;
 | 
					import java.util.ArrayList;
 | 
				
			||||||
 | 
					import java.util.Collection;
 | 
				
			||||||
import java.util.HashMap;
 | 
					import java.util.HashMap;
 | 
				
			||||||
import java.util.List;
 | 
					import java.util.List;
 | 
				
			||||||
import java.util.Map;
 | 
					import java.util.Map;
 | 
				
			||||||
import java.util.Properties;
 | 
					import java.util.Properties;
 | 
				
			||||||
 | 
					import java.util.Set;
 | 
				
			||||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
					import org.springframework.beans.factory.annotation.Autowired;
 | 
				
			||||||
import org.springframework.data.redis.core.RedisCallback;
 | 
					import org.springframework.data.redis.core.RedisCallback;
 | 
				
			||||||
import org.springframework.data.redis.core.RedisTemplate;
 | 
					import org.springframework.data.redis.core.RedisTemplate;
 | 
				
			||||||
import org.springframework.security.access.prepost.PreAuthorize;
 | 
					import org.springframework.security.access.prepost.PreAuthorize;
 | 
				
			||||||
 | 
					import org.springframework.web.bind.annotation.DeleteMapping;
 | 
				
			||||||
import org.springframework.web.bind.annotation.GetMapping;
 | 
					import org.springframework.web.bind.annotation.GetMapping;
 | 
				
			||||||
 | 
					import org.springframework.web.bind.annotation.PathVariable;
 | 
				
			||||||
import org.springframework.web.bind.annotation.RequestMapping;
 | 
					import org.springframework.web.bind.annotation.RequestMapping;
 | 
				
			||||||
import org.springframework.web.bind.annotation.RestController;
 | 
					import org.springframework.web.bind.annotation.RestController;
 | 
				
			||||||
 | 
					import com.ruoyi.common.constant.CacheConstants;
 | 
				
			||||||
import com.ruoyi.common.core.domain.AjaxResult;
 | 
					import com.ruoyi.common.core.domain.AjaxResult;
 | 
				
			||||||
import com.ruoyi.common.utils.StringUtils;
 | 
					import com.ruoyi.common.utils.StringUtils;
 | 
				
			||||||
 | 
					import com.ruoyi.system.domain.SysCache;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * 缓存监控
 | 
					 * 缓存监控
 | 
				
			||||||
@@ -27,6 +33,16 @@ public class CacheController
 | 
				
			|||||||
    @Autowired
 | 
					    @Autowired
 | 
				
			||||||
    private RedisTemplate<String, String> redisTemplate;
 | 
					    private RedisTemplate<String, String> redisTemplate;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private final static List<SysCache> caches = new ArrayList<SysCache>();
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        caches.add(new SysCache(CacheConstants.LOGIN_TOKEN_KEY, "用户信息"));
 | 
				
			||||||
 | 
					        caches.add(new SysCache(CacheConstants.SYS_CONFIG_KEY, "配置信息"));
 | 
				
			||||||
 | 
					        caches.add(new SysCache(CacheConstants.SYS_DICT_KEY, "数据字典"));
 | 
				
			||||||
 | 
					        caches.add(new SysCache(CacheConstants.CAPTCHA_CODE_KEY, "验证码"));
 | 
				
			||||||
 | 
					        caches.add(new SysCache(CacheConstants.REPEAT_SUBMIT_KEY, "防重提交"));
 | 
				
			||||||
 | 
					        caches.add(new SysCache(CacheConstants.RATE_LIMIT_KEY, "限流处理"));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @PreAuthorize("@ss.hasPermi('monitor:cache:list')")
 | 
					    @PreAuthorize("@ss.hasPermi('monitor:cache:list')")
 | 
				
			||||||
    @GetMapping()
 | 
					    @GetMapping()
 | 
				
			||||||
    public AjaxResult getInfo() throws Exception
 | 
					    public AjaxResult getInfo() throws Exception
 | 
				
			||||||
@@ -50,4 +66,54 @@ public class CacheController
 | 
				
			|||||||
        result.put("commandStats", pieList);
 | 
					        result.put("commandStats", pieList);
 | 
				
			||||||
        return AjaxResult.success(result);
 | 
					        return AjaxResult.success(result);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @PreAuthorize("@ss.hasPermi('monitor:cache:list')")
 | 
				
			||||||
 | 
					    @GetMapping("/getNames")
 | 
				
			||||||
 | 
					    public AjaxResult cache()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        return AjaxResult.success(caches);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @PreAuthorize("@ss.hasPermi('monitor:cache:list')")
 | 
				
			||||||
 | 
					    @GetMapping("/getKeys/{cacheName}")
 | 
				
			||||||
 | 
					    public AjaxResult getCacheKeys(@PathVariable String cacheName)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        Set<String> cacheKyes = redisTemplate.keys(cacheName + "*");
 | 
				
			||||||
 | 
					        return AjaxResult.success(cacheKyes);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @PreAuthorize("@ss.hasPermi('monitor:cache:list')")
 | 
				
			||||||
 | 
					    @GetMapping("/getValue/{cacheName}/{cacheKey}")
 | 
				
			||||||
 | 
					    public AjaxResult getCacheValue(@PathVariable String cacheName, @PathVariable String cacheKey)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        String cacheValue = redisTemplate.opsForValue().get(cacheKey);
 | 
				
			||||||
 | 
					        SysCache sysCache = new SysCache(cacheName, cacheKey, cacheValue);
 | 
				
			||||||
 | 
					        return AjaxResult.success(sysCache);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @PreAuthorize("@ss.hasPermi('monitor:cache:list')")
 | 
				
			||||||
 | 
					    @DeleteMapping("/clearCacheName/{cacheName}")
 | 
				
			||||||
 | 
					    public AjaxResult clearCacheName(@PathVariable String cacheName)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        Collection<String> cacheKeys = redisTemplate.keys(cacheName + "*");
 | 
				
			||||||
 | 
					        redisTemplate.delete(cacheKeys);
 | 
				
			||||||
 | 
					        return AjaxResult.success();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @PreAuthorize("@ss.hasPermi('monitor:cache:list')")
 | 
				
			||||||
 | 
					    @DeleteMapping("/clearCacheKey/{cacheKey}")
 | 
				
			||||||
 | 
					    public AjaxResult clearCacheKey(@PathVariable String cacheKey)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        redisTemplate.delete(cacheKey);
 | 
				
			||||||
 | 
					        return AjaxResult.success();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @PreAuthorize("@ss.hasPermi('monitor:cache:list')")
 | 
				
			||||||
 | 
					    @DeleteMapping("/clearCacheAll")
 | 
				
			||||||
 | 
					    public AjaxResult clearCacheAll()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        Collection<String> cacheKeys = redisTemplate.keys("*");
 | 
				
			||||||
 | 
					        redisTemplate.delete(cacheKeys);
 | 
				
			||||||
 | 
					        return AjaxResult.success();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,7 +12,7 @@ import org.springframework.web.bind.annotation.PathVariable;
 | 
				
			|||||||
import org.springframework.web.bind.annotation.RequestMapping;
 | 
					import org.springframework.web.bind.annotation.RequestMapping;
 | 
				
			||||||
import org.springframework.web.bind.annotation.RestController;
 | 
					import org.springframework.web.bind.annotation.RestController;
 | 
				
			||||||
import com.ruoyi.common.annotation.Log;
 | 
					import com.ruoyi.common.annotation.Log;
 | 
				
			||||||
import com.ruoyi.common.constant.Constants;
 | 
					import com.ruoyi.common.constant.CacheConstants;
 | 
				
			||||||
import com.ruoyi.common.core.controller.BaseController;
 | 
					import com.ruoyi.common.core.controller.BaseController;
 | 
				
			||||||
import com.ruoyi.common.core.domain.AjaxResult;
 | 
					import com.ruoyi.common.core.domain.AjaxResult;
 | 
				
			||||||
import com.ruoyi.common.core.domain.model.LoginUser;
 | 
					import com.ruoyi.common.core.domain.model.LoginUser;
 | 
				
			||||||
@@ -42,7 +42,7 @@ public class SysUserOnlineController extends BaseController
 | 
				
			|||||||
    @GetMapping("/list")
 | 
					    @GetMapping("/list")
 | 
				
			||||||
    public TableDataInfo list(String ipaddr, String userName)
 | 
					    public TableDataInfo list(String ipaddr, String userName)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        Collection<String> keys = redisCache.keys(Constants.LOGIN_TOKEN_KEY + "*");
 | 
					        Collection<String> keys = redisCache.keys(CacheConstants.LOGIN_TOKEN_KEY + "*");
 | 
				
			||||||
        List<SysUserOnline> userOnlineList = new ArrayList<SysUserOnline>();
 | 
					        List<SysUserOnline> userOnlineList = new ArrayList<SysUserOnline>();
 | 
				
			||||||
        for (String key : keys)
 | 
					        for (String key : keys)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
@@ -86,7 +86,7 @@ public class SysUserOnlineController extends BaseController
 | 
				
			|||||||
    @DeleteMapping("/{tokenId}")
 | 
					    @DeleteMapping("/{tokenId}")
 | 
				
			||||||
    public AjaxResult forceLogout(@PathVariable String tokenId)
 | 
					    public AjaxResult forceLogout(@PathVariable String tokenId)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        redisCache.deleteObject(Constants.LOGIN_TOKEN_KEY + tokenId);
 | 
					        redisCache.deleteObject(CacheConstants.LOGIN_TOKEN_KEY + tokenId);
 | 
				
			||||||
        return AjaxResult.success();
 | 
					        return AjaxResult.success();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,7 +5,7 @@ import java.lang.annotation.ElementType;
 | 
				
			|||||||
import java.lang.annotation.Retention;
 | 
					import java.lang.annotation.Retention;
 | 
				
			||||||
import java.lang.annotation.RetentionPolicy;
 | 
					import java.lang.annotation.RetentionPolicy;
 | 
				
			||||||
import java.lang.annotation.Target;
 | 
					import java.lang.annotation.Target;
 | 
				
			||||||
import com.ruoyi.common.constant.Constants;
 | 
					import com.ruoyi.common.constant.CacheConstants;
 | 
				
			||||||
import com.ruoyi.common.enums.LimitType;
 | 
					import com.ruoyi.common.enums.LimitType;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
@@ -21,7 +21,7 @@ public @interface RateLimiter
 | 
				
			|||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * 限流key
 | 
					     * 限流key
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public String key() default Constants.RATE_LIMIT_KEY;
 | 
					    public String key() default CacheConstants.RATE_LIMIT_KEY;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * 限流时间,单位秒
 | 
					     * 限流时间,单位秒
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -0,0 +1,39 @@
 | 
				
			|||||||
 | 
					package com.ruoyi.common.constant;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * 缓存的key 常量
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 * @author ruoyi
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					public class CacheConstants
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 登录用户 redis key
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public static final String LOGIN_TOKEN_KEY = "login_tokens:";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 验证码 redis key
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public static final String CAPTCHA_CODE_KEY = "captcha_codes:";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 参数管理 cache key
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public static final String SYS_CONFIG_KEY = "sys_config:";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 字典管理 cache key
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public static final String SYS_DICT_KEY = "sys_dict:";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 防重提交 redis key
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public static final String REPEAT_SUBMIT_KEY = "repeat_submit:";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 限流 redis key
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public static final String RATE_LIMIT_KEY = "rate_limit:";
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -58,27 +58,7 @@ public class Constants
 | 
				
			|||||||
     * 登录失败
 | 
					     * 登录失败
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public static final String LOGIN_FAIL = "Error";
 | 
					    public static final String LOGIN_FAIL = "Error";
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * 验证码 redis key
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    public static final String CAPTCHA_CODE_KEY = "captcha_codes:";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * 登录用户 redis key
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    public static final String LOGIN_TOKEN_KEY = "login_tokens:";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * 防重提交 redis key
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    public static final String REPEAT_SUBMIT_KEY = "repeat_submit:";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * 限流 redis key
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    public static final String RATE_LIMIT_KEY = "rate_limit:";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * 验证码有效期(分钟)
 | 
					     * 验证码有效期(分钟)
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
@@ -124,16 +104,6 @@ public class Constants
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    public static final String JWT_AUTHORITIES = "authorities";
 | 
					    public static final String JWT_AUTHORITIES = "authorities";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * 参数管理 cache key
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    public static final String SYS_CONFIG_KEY = "sys_config:";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * 字典管理 cache key
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    public static final String SYS_DICT_KEY = "sys_dict:";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * 资源映射路径 前缀
 | 
					     * 资源映射路径 前缀
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,7 +3,7 @@ package com.ruoyi.common.utils;
 | 
				
			|||||||
import java.util.Collection;
 | 
					import java.util.Collection;
 | 
				
			||||||
import java.util.List;
 | 
					import java.util.List;
 | 
				
			||||||
import com.alibaba.fastjson2.JSONArray;
 | 
					import com.alibaba.fastjson2.JSONArray;
 | 
				
			||||||
import com.ruoyi.common.constant.Constants;
 | 
					import com.ruoyi.common.constant.CacheConstants;
 | 
				
			||||||
import com.ruoyi.common.core.domain.entity.SysDictData;
 | 
					import com.ruoyi.common.core.domain.entity.SysDictData;
 | 
				
			||||||
import com.ruoyi.common.core.redis.RedisCache;
 | 
					import com.ruoyi.common.core.redis.RedisCache;
 | 
				
			||||||
import com.ruoyi.common.utils.spring.SpringUtils;
 | 
					import com.ruoyi.common.utils.spring.SpringUtils;
 | 
				
			||||||
@@ -169,7 +169,7 @@ public class DictUtils
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    public static void clearDictCache()
 | 
					    public static void clearDictCache()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        Collection<String> keys = SpringUtils.getBean(RedisCache.class).keys(Constants.SYS_DICT_KEY + "*");
 | 
					        Collection<String> keys = SpringUtils.getBean(RedisCache.class).keys(CacheConstants.SYS_DICT_KEY + "*");
 | 
				
			||||||
        SpringUtils.getBean(RedisCache.class).deleteObject(keys);
 | 
					        SpringUtils.getBean(RedisCache.class).deleteObject(keys);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -181,6 +181,6 @@ public class DictUtils
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    public static String getCacheKey(String configKey)
 | 
					    public static String getCacheKey(String configKey)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        return Constants.SYS_DICT_KEY + configKey;
 | 
					        return CacheConstants.SYS_DICT_KEY + configKey;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,7 +9,7 @@ import org.springframework.beans.factory.annotation.Value;
 | 
				
			|||||||
import org.springframework.stereotype.Component;
 | 
					import org.springframework.stereotype.Component;
 | 
				
			||||||
import com.alibaba.fastjson2.JSON;
 | 
					import com.alibaba.fastjson2.JSON;
 | 
				
			||||||
import com.ruoyi.common.annotation.RepeatSubmit;
 | 
					import com.ruoyi.common.annotation.RepeatSubmit;
 | 
				
			||||||
import com.ruoyi.common.constant.Constants;
 | 
					import com.ruoyi.common.constant.CacheConstants;
 | 
				
			||||||
import com.ruoyi.common.core.redis.RedisCache;
 | 
					import com.ruoyi.common.core.redis.RedisCache;
 | 
				
			||||||
import com.ruoyi.common.filter.RepeatedlyRequestWrapper;
 | 
					import com.ruoyi.common.filter.RepeatedlyRequestWrapper;
 | 
				
			||||||
import com.ruoyi.common.utils.StringUtils;
 | 
					import com.ruoyi.common.utils.StringUtils;
 | 
				
			||||||
@@ -63,7 +63,7 @@ public class SameUrlDataInterceptor extends RepeatSubmitInterceptor
 | 
				
			|||||||
        String submitKey = StringUtils.trimToEmpty(request.getHeader(header));
 | 
					        String submitKey = StringUtils.trimToEmpty(request.getHeader(header));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // 唯一标识(指定key + url + 消息头)
 | 
					        // 唯一标识(指定key + url + 消息头)
 | 
				
			||||||
        String cacheRepeatKey = Constants.REPEAT_SUBMIT_KEY + url + submitKey;
 | 
					        String cacheRepeatKey = CacheConstants.REPEAT_SUBMIT_KEY + url + submitKey;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Object sessionObj = redisCache.getCacheObject(cacheRepeatKey);
 | 
					        Object sessionObj = redisCache.getCacheObject(cacheRepeatKey);
 | 
				
			||||||
        if (sessionObj != null)
 | 
					        if (sessionObj != null)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,6 +7,7 @@ import org.springframework.security.authentication.BadCredentialsException;
 | 
				
			|||||||
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
 | 
					import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
 | 
				
			||||||
import org.springframework.security.core.Authentication;
 | 
					import org.springframework.security.core.Authentication;
 | 
				
			||||||
import org.springframework.stereotype.Component;
 | 
					import org.springframework.stereotype.Component;
 | 
				
			||||||
 | 
					import com.ruoyi.common.constant.CacheConstants;
 | 
				
			||||||
import com.ruoyi.common.constant.Constants;
 | 
					import com.ruoyi.common.constant.Constants;
 | 
				
			||||||
import com.ruoyi.common.core.domain.entity.SysUser;
 | 
					import com.ruoyi.common.core.domain.entity.SysUser;
 | 
				
			||||||
import com.ruoyi.common.core.domain.model.LoginUser;
 | 
					import com.ruoyi.common.core.domain.model.LoginUser;
 | 
				
			||||||
@@ -17,8 +18,8 @@ import com.ruoyi.common.exception.user.CaptchaExpireException;
 | 
				
			|||||||
import com.ruoyi.common.exception.user.UserPasswordNotMatchException;
 | 
					import com.ruoyi.common.exception.user.UserPasswordNotMatchException;
 | 
				
			||||||
import com.ruoyi.common.utils.DateUtils;
 | 
					import com.ruoyi.common.utils.DateUtils;
 | 
				
			||||||
import com.ruoyi.common.utils.MessageUtils;
 | 
					import com.ruoyi.common.utils.MessageUtils;
 | 
				
			||||||
import com.ruoyi.common.utils.StringUtils;
 | 
					 | 
				
			||||||
import com.ruoyi.common.utils.ServletUtils;
 | 
					import com.ruoyi.common.utils.ServletUtils;
 | 
				
			||||||
 | 
					import com.ruoyi.common.utils.StringUtils;
 | 
				
			||||||
import com.ruoyi.common.utils.ip.IpUtils;
 | 
					import com.ruoyi.common.utils.ip.IpUtils;
 | 
				
			||||||
import com.ruoyi.framework.manager.AsyncManager;
 | 
					import com.ruoyi.framework.manager.AsyncManager;
 | 
				
			||||||
import com.ruoyi.framework.manager.factory.AsyncFactory;
 | 
					import com.ruoyi.framework.manager.factory.AsyncFactory;
 | 
				
			||||||
@@ -103,7 +104,7 @@ public class SysLoginService
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    public void validateCaptcha(String username, String code, String uuid)
 | 
					    public void validateCaptcha(String username, String code, String uuid)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        String verifyKey = Constants.CAPTCHA_CODE_KEY + StringUtils.nvl(uuid, "");
 | 
					        String verifyKey = CacheConstants.CAPTCHA_CODE_KEY + StringUtils.nvl(uuid, "");
 | 
				
			||||||
        String captcha = redisCache.getCacheObject(verifyKey);
 | 
					        String captcha = redisCache.getCacheObject(verifyKey);
 | 
				
			||||||
        redisCache.deleteObject(verifyKey);
 | 
					        redisCache.deleteObject(verifyKey);
 | 
				
			||||||
        if (captcha == null)
 | 
					        if (captcha == null)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,6 +2,7 @@ package com.ruoyi.framework.web.service;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
					import org.springframework.beans.factory.annotation.Autowired;
 | 
				
			||||||
import org.springframework.stereotype.Component;
 | 
					import org.springframework.stereotype.Component;
 | 
				
			||||||
 | 
					import com.ruoyi.common.constant.CacheConstants;
 | 
				
			||||||
import com.ruoyi.common.constant.Constants;
 | 
					import com.ruoyi.common.constant.Constants;
 | 
				
			||||||
import com.ruoyi.common.constant.UserConstants;
 | 
					import com.ruoyi.common.constant.UserConstants;
 | 
				
			||||||
import com.ruoyi.common.core.domain.entity.SysUser;
 | 
					import com.ruoyi.common.core.domain.entity.SysUser;
 | 
				
			||||||
@@ -100,7 +101,7 @@ public class SysRegisterService
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    public void validateCaptcha(String username, String code, String uuid)
 | 
					    public void validateCaptcha(String username, String code, String uuid)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        String verifyKey = Constants.CAPTCHA_CODE_KEY + StringUtils.nvl(uuid, "");
 | 
					        String verifyKey = CacheConstants.CAPTCHA_CODE_KEY + StringUtils.nvl(uuid, "");
 | 
				
			||||||
        String captcha = redisCache.getCacheObject(verifyKey);
 | 
					        String captcha = redisCache.getCacheObject(verifyKey);
 | 
				
			||||||
        redisCache.deleteObject(verifyKey);
 | 
					        redisCache.deleteObject(verifyKey);
 | 
				
			||||||
        if (captcha == null)
 | 
					        if (captcha == null)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,6 +7,7 @@ import javax.servlet.http.HttpServletRequest;
 | 
				
			|||||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
					import org.springframework.beans.factory.annotation.Autowired;
 | 
				
			||||||
import org.springframework.beans.factory.annotation.Value;
 | 
					import org.springframework.beans.factory.annotation.Value;
 | 
				
			||||||
import org.springframework.stereotype.Component;
 | 
					import org.springframework.stereotype.Component;
 | 
				
			||||||
 | 
					import com.ruoyi.common.constant.CacheConstants;
 | 
				
			||||||
import com.ruoyi.common.constant.Constants;
 | 
					import com.ruoyi.common.constant.Constants;
 | 
				
			||||||
import com.ruoyi.common.core.domain.model.LoginUser;
 | 
					import com.ruoyi.common.core.domain.model.LoginUser;
 | 
				
			||||||
import com.ruoyi.common.core.redis.RedisCache;
 | 
					import com.ruoyi.common.core.redis.RedisCache;
 | 
				
			||||||
@@ -220,6 +221,6 @@ public class TokenService
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    private String getTokenKey(String uuid)
 | 
					    private String getTokenKey(String uuid)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        return Constants.LOGIN_TOKEN_KEY + uuid;
 | 
					        return CacheConstants.LOGIN_TOKEN_KEY + uuid;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -0,0 +1,81 @@
 | 
				
			|||||||
 | 
					package com.ruoyi.system.domain;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.ruoyi.common.utils.StringUtils;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * 缓存信息
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 * @author ruoyi
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					public class SysCache
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    /** 缓存名称 */
 | 
				
			||||||
 | 
					    private String cacheName = "";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** 缓存键名 */
 | 
				
			||||||
 | 
					    private String cacheKey = "";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** 缓存内容 */
 | 
				
			||||||
 | 
					    private String cacheValue = "";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** 备注 */
 | 
				
			||||||
 | 
					    private String remark = "";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public SysCache()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public SysCache(String cacheName, String remark)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        this.cacheName = cacheName;
 | 
				
			||||||
 | 
					        this.remark = remark;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public SysCache(String cacheName, String cacheKey, String cacheValue)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        this.cacheName = StringUtils.replace(cacheName, ":", "");
 | 
				
			||||||
 | 
					        this.cacheKey = StringUtils.replace(cacheKey, cacheName, "");
 | 
				
			||||||
 | 
					        this.cacheValue = cacheValue;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public String getCacheName()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        return cacheName;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void setCacheName(String cacheName)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        this.cacheName = cacheName;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public String getCacheKey()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        return cacheKey;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void setCacheKey(String cacheKey)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        this.cacheKey = cacheKey;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public String getCacheValue()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        return cacheValue;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void setCacheValue(String cacheValue)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        this.cacheValue = cacheValue;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public String getRemark()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        return remark;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void setRemark(String remark)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        this.remark = remark;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -1,7 +1,12 @@
 | 
				
			|||||||
package com.ruoyi.system.service.impl;
 | 
					package com.ruoyi.system.service.impl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.Collection;
 | 
				
			||||||
 | 
					import java.util.List;
 | 
				
			||||||
 | 
					import javax.annotation.PostConstruct;
 | 
				
			||||||
 | 
					import org.springframework.beans.factory.annotation.Autowired;
 | 
				
			||||||
 | 
					import org.springframework.stereotype.Service;
 | 
				
			||||||
import com.ruoyi.common.annotation.DataSource;
 | 
					import com.ruoyi.common.annotation.DataSource;
 | 
				
			||||||
import com.ruoyi.common.constant.Constants;
 | 
					import com.ruoyi.common.constant.CacheConstants;
 | 
				
			||||||
import com.ruoyi.common.constant.UserConstants;
 | 
					import com.ruoyi.common.constant.UserConstants;
 | 
				
			||||||
import com.ruoyi.common.core.redis.RedisCache;
 | 
					import com.ruoyi.common.core.redis.RedisCache;
 | 
				
			||||||
import com.ruoyi.common.core.text.Convert;
 | 
					import com.ruoyi.common.core.text.Convert;
 | 
				
			||||||
@@ -11,11 +16,6 @@ import com.ruoyi.common.utils.StringUtils;
 | 
				
			|||||||
import com.ruoyi.system.domain.SysConfig;
 | 
					import com.ruoyi.system.domain.SysConfig;
 | 
				
			||||||
import com.ruoyi.system.mapper.SysConfigMapper;
 | 
					import com.ruoyi.system.mapper.SysConfigMapper;
 | 
				
			||||||
import com.ruoyi.system.service.ISysConfigService;
 | 
					import com.ruoyi.system.service.ISysConfigService;
 | 
				
			||||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
					 | 
				
			||||||
import org.springframework.stereotype.Service;
 | 
					 | 
				
			||||||
import javax.annotation.PostConstruct;
 | 
					 | 
				
			||||||
import java.util.Collection;
 | 
					 | 
				
			||||||
import java.util.List;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * 参数配置 服务层实现
 | 
					 * 参数配置 服务层实现
 | 
				
			||||||
@@ -181,7 +181,7 @@ public class SysConfigServiceImpl implements ISysConfigService
 | 
				
			|||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public void clearConfigCache()
 | 
					    public void clearConfigCache()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        Collection<String> keys = redisCache.keys(Constants.SYS_CONFIG_KEY + "*");
 | 
					        Collection<String> keys = redisCache.keys(CacheConstants.SYS_CONFIG_KEY + "*");
 | 
				
			||||||
        redisCache.deleteObject(keys);
 | 
					        redisCache.deleteObject(keys);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -221,6 +221,6 @@ public class SysConfigServiceImpl implements ISysConfigService
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    private String getCacheKey(String configKey)
 | 
					    private String getCacheKey(String configKey)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        return Constants.SYS_CONFIG_KEY + configKey;
 | 
					        return CacheConstants.SYS_CONFIG_KEY + configKey;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,3 +7,51 @@ export function getCache() {
 | 
				
			|||||||
    method: 'get'
 | 
					    method: 'get'
 | 
				
			||||||
  })
 | 
					  })
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 查询缓存名称列表
 | 
				
			||||||
 | 
					export function listCacheName() {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/monitor/cache/getNames',
 | 
				
			||||||
 | 
					    method: 'get'
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 查询缓存键名列表
 | 
				
			||||||
 | 
					export function listCacheKey(cacheName) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/monitor/cache/getKeys/' + cacheName,
 | 
				
			||||||
 | 
					    method: 'get'
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 查询缓存内容
 | 
				
			||||||
 | 
					export function getCacheValue(cacheName, cacheKey) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/monitor/cache/getValue/' + cacheName + '/' + cacheKey,
 | 
				
			||||||
 | 
					    method: 'get'
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 清理指定名称缓存
 | 
				
			||||||
 | 
					export function clearCacheName(cacheName) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/monitor/cache/clearCacheName/' + cacheName,
 | 
				
			||||||
 | 
					    method: 'delete'
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 清理指定键名缓存
 | 
				
			||||||
 | 
					export function clearCacheKey(cacheKey) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/monitor/cache/clearCacheKey/' + cacheKey,
 | 
				
			||||||
 | 
					    method: 'delete'
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 清理全部缓存
 | 
				
			||||||
 | 
					export function clearCacheAll() {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/monitor/cache/clearCacheAll',
 | 
				
			||||||
 | 
					    method: 'delete'
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								ruoyi-ui/src/assets/icons/svg/redis-list.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								ruoyi-ui/src/assets/icons/svg/redis-list.svg
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
				
			|||||||
 | 
					<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1656035183065" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3395" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css">@font-face { font-family: feedback-iconfont; src: url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.woff2?t=1630033759944") format("woff2"), url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.woff?t=1630033759944") format("woff"), url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.ttf?t=1630033759944") format("truetype"); }
 | 
				
			||||||
 | 
					</style></defs><path d="M958.88 730.06H65.12c-18.28 0-33.12-14.82-33.12-33.12V68.91c0-18.29 14.83-33.12 33.12-33.12h893.77c18.28 0 33.12 14.82 33.12 33.12v628.03c-0.01 18.3-14.84 33.12-33.13 33.12zM98.23 663.83h827.53v-561.8H98.23v561.8z" p-id="3396"></path><path d="M512 954.55c-18.28 0-33.12-14.82-33.12-33.12V733.92c0-18.29 14.83-33.12 33.12-33.12s33.12 14.82 33.12 33.12v187.51c0 18.3-14.84 33.12-33.12 33.12z" p-id="3397"></path><path d="M762.01 988.21H261.99c-18.28 0-33.12-14.82-33.12-33.12 0-18.29 14.83-33.12 33.12-33.12h500.03c18.28 0 33.12 14.82 33.12 33.12-0.01 18.29-14.84 33.12-33.13 33.12zM514.74 578.55c-21.63 0-43.31-3.87-64.21-11.65-45.95-17.13-82.49-51.13-102.86-95.74-5.07-11.08-0.19-24.19 10.89-29.26 11.08-5.09 24.19-0.18 29.26 10.91 15.5 33.88 43.25 59.7 78.14 72.71 34.93 12.99 72.79 11.64 106.66-3.85 33.22-15.17 58.8-42.26 72.03-76.3 4.42-11.37 17.21-17.01 28.57-12.58 11.36 4.42 16.99 17.22 12.57 28.58-17.42 44.82-51.1 80.5-94.82 100.47-24.34 11.12-50.25 16.71-76.23 16.71z" p-id="3398"></path><path d="M325.27 528.78c-1.66 0-3.34-0.18-5.02-0.57-11.88-2.77-19.28-14.63-16.49-26.51l18.84-81c1.34-5.82 5-10.84 10.13-13.92 5.09-3.09 11.3-3.96 17.03-2.41l80.51 21.43c11.79 3.14 18.8 15.23 15.67 27.02-3.15 11.79-15.42 18.75-27.02 15.65l-58.49-15.57-13.69 58.81c-2.37 10.2-11.45 17.07-21.47 17.07zM360.8 351.01c-2.65 0-5.37-0.49-8-1.51-11.36-4.41-16.99-17.21-12.59-28.57 17.4-44.79 51.06-80.47 94.8-100.48 92.15-42.06 201.25-1.39 243.31 90.68 5.07 11.08 0.19 24.19-10.89 29.26-11.13 5.07-24.19 0.17-29.26-10.91-31.97-69.91-114.9-100.82-184.79-68.86-33.22 15.19-58.8 42.28-71.99 76.29-3.41 8.74-11.75 14.1-20.59 14.1z" p-id="3399"></path><path d="M684.68 376.74c-1.47 0-2.95-0.15-4.42-0.44l-81.61-16.68c-11.94-2.45-19.64-14.11-17.21-26.06 2.44-11.96 14.1-19.64 26.04-17.22l59.29 12.12 10.23-59.5c2.05-12 13.52-20.19 25.48-18.01 12.03 2.06 20.09 13.48 18.02 25.5l-14.08 81.96a22.089 22.089 0 0 1-9.29 14.49c-3.7 2.51-8.03 3.84-12.45 3.84z" p-id="3400"></path></svg>
 | 
				
			||||||
| 
		 After Width: | Height: | Size: 2.6 KiB  | 
							
								
								
									
										22
									
								
								ruoyi-ui/src/views/monitor/cache/index.vue
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										22
									
								
								ruoyi-ui/src/views/monitor/cache/index.vue
									
									
									
									
										vendored
									
									
								
							@@ -71,7 +71,7 @@ import { getCache } from "@/api/monitor/cache";
 | 
				
			|||||||
import echarts from "echarts";
 | 
					import echarts from "echarts";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default {
 | 
					export default {
 | 
				
			||||||
  name: "Server",
 | 
					  name: "Cache",
 | 
				
			||||||
  data() {
 | 
					  data() {
 | 
				
			||||||
    return {
 | 
					    return {
 | 
				
			||||||
      // 统计命令信息
 | 
					      // 统计命令信息
 | 
				
			||||||
@@ -79,8 +79,8 @@ export default {
 | 
				
			|||||||
      // 使用内存
 | 
					      // 使用内存
 | 
				
			||||||
      usedmemory: null,
 | 
					      usedmemory: null,
 | 
				
			||||||
      // cache信息
 | 
					      // cache信息
 | 
				
			||||||
      cache: [],
 | 
					      cache: []
 | 
				
			||||||
    };
 | 
					    }
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  created() {
 | 
					  created() {
 | 
				
			||||||
    this.getList();
 | 
					    this.getList();
 | 
				
			||||||
@@ -109,8 +109,8 @@ export default {
 | 
				
			|||||||
              data: response.data.commandStats,
 | 
					              data: response.data.commandStats,
 | 
				
			||||||
              animationEasing: "cubicInOut",
 | 
					              animationEasing: "cubicInOut",
 | 
				
			||||||
              animationDuration: 1000,
 | 
					              animationDuration: 1000,
 | 
				
			||||||
            },
 | 
					            }
 | 
				
			||||||
          ],
 | 
					          ]
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
        this.usedmemory = echarts.init(this.$refs.usedmemory, "macarons");
 | 
					        this.usedmemory = echarts.init(this.$refs.usedmemory, "macarons");
 | 
				
			||||||
        this.usedmemory.setOption({
 | 
					        this.usedmemory.setOption({
 | 
				
			||||||
@@ -130,17 +130,17 @@ export default {
 | 
				
			|||||||
                {
 | 
					                {
 | 
				
			||||||
                  value: parseFloat(this.cache.info.used_memory_human),
 | 
					                  value: parseFloat(this.cache.info.used_memory_human),
 | 
				
			||||||
                  name: "内存消耗",
 | 
					                  name: "内存消耗",
 | 
				
			||||||
                },
 | 
					                }
 | 
				
			||||||
              ],
 | 
					              ]
 | 
				
			||||||
            },
 | 
					            }
 | 
				
			||||||
          ],
 | 
					          ]
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
      });
 | 
					      });
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    // 打开加载层
 | 
					    // 打开加载层
 | 
				
			||||||
    openLoading() {
 | 
					    openLoading() {
 | 
				
			||||||
      this.$modal.loading("正在加载缓存监控数据,请稍候!");
 | 
					      this.$modal.loading("正在加载缓存监控数据,请稍候!");
 | 
				
			||||||
    },
 | 
					    }
 | 
				
			||||||
  },
 | 
					  }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										241
									
								
								ruoyi-ui/src/views/monitor/cache/list.vue
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										241
									
								
								ruoyi-ui/src/views/monitor/cache/list.vue
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,241 @@
 | 
				
			|||||||
 | 
					<template>
 | 
				
			||||||
 | 
					  <div class="app-container">
 | 
				
			||||||
 | 
					    <el-row :gutter="10">
 | 
				
			||||||
 | 
					      <el-col :span="8">
 | 
				
			||||||
 | 
					        <el-card style="height: calc(100vh - 125px)">
 | 
				
			||||||
 | 
					          <div slot="header">
 | 
				
			||||||
 | 
					            <span>缓存列表</span>
 | 
				
			||||||
 | 
					            <el-button
 | 
				
			||||||
 | 
					              style="float: right; padding: 3px 0"
 | 
				
			||||||
 | 
					              type="text"
 | 
				
			||||||
 | 
					              icon="el-icon-refresh-right"
 | 
				
			||||||
 | 
					              @click="refreshCacheNames()"
 | 
				
			||||||
 | 
					            ></el-button>
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					          <el-table
 | 
				
			||||||
 | 
					            v-loading="loading"
 | 
				
			||||||
 | 
					            :data="cacheNames"
 | 
				
			||||||
 | 
					            :height="tableHeight"
 | 
				
			||||||
 | 
					            highlight-current-row
 | 
				
			||||||
 | 
					            @row-click="getCacheKeys"
 | 
				
			||||||
 | 
					            style="width: 100%"
 | 
				
			||||||
 | 
					          >
 | 
				
			||||||
 | 
					            <el-table-column
 | 
				
			||||||
 | 
					              label="序号"
 | 
				
			||||||
 | 
					              width="60"
 | 
				
			||||||
 | 
					              type="index"
 | 
				
			||||||
 | 
					            ></el-table-column>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <el-table-column
 | 
				
			||||||
 | 
					              label="缓存名称"
 | 
				
			||||||
 | 
					              align="center"
 | 
				
			||||||
 | 
					              prop="cacheName"
 | 
				
			||||||
 | 
					              :show-overflow-tooltip="true"
 | 
				
			||||||
 | 
					              :formatter="nameFormatter"
 | 
				
			||||||
 | 
					            ></el-table-column>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <el-table-column
 | 
				
			||||||
 | 
					              label="备注"
 | 
				
			||||||
 | 
					              align="center"
 | 
				
			||||||
 | 
					              prop="remark"
 | 
				
			||||||
 | 
					              :show-overflow-tooltip="true"
 | 
				
			||||||
 | 
					            />
 | 
				
			||||||
 | 
					            <el-table-column
 | 
				
			||||||
 | 
					              label="操作"
 | 
				
			||||||
 | 
					              width="60"
 | 
				
			||||||
 | 
					              align="center"
 | 
				
			||||||
 | 
					              class-name="small-padding fixed-width"
 | 
				
			||||||
 | 
					            >
 | 
				
			||||||
 | 
					              <template slot-scope="scope">
 | 
				
			||||||
 | 
					                <el-button
 | 
				
			||||||
 | 
					                  size="mini"
 | 
				
			||||||
 | 
					                  type="text"
 | 
				
			||||||
 | 
					                  icon="el-icon-delete"
 | 
				
			||||||
 | 
					                  @click="handleClearCacheName(scope.row)"
 | 
				
			||||||
 | 
					                ></el-button>
 | 
				
			||||||
 | 
					              </template>
 | 
				
			||||||
 | 
					            </el-table-column>
 | 
				
			||||||
 | 
					          </el-table>
 | 
				
			||||||
 | 
					        </el-card>
 | 
				
			||||||
 | 
					      </el-col>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      <el-col :span="8">
 | 
				
			||||||
 | 
					        <el-card style="height: calc(100vh - 125px)">
 | 
				
			||||||
 | 
					          <div slot="header">
 | 
				
			||||||
 | 
					            <span>键名列表</span>
 | 
				
			||||||
 | 
					            <el-button
 | 
				
			||||||
 | 
					              style="float: right; padding: 3px 0"
 | 
				
			||||||
 | 
					              type="text"
 | 
				
			||||||
 | 
					              icon="el-icon-refresh-right"
 | 
				
			||||||
 | 
					              @click="refreshCacheKeys()"
 | 
				
			||||||
 | 
					            ></el-button>
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					          <el-table
 | 
				
			||||||
 | 
					            v-loading="subLoading"
 | 
				
			||||||
 | 
					            :data="cacheKeys"
 | 
				
			||||||
 | 
					            :height="tableHeight"
 | 
				
			||||||
 | 
					            highlight-current-row
 | 
				
			||||||
 | 
					            @row-click="handleCacheValue"
 | 
				
			||||||
 | 
					            style="width: 100%"
 | 
				
			||||||
 | 
					          >
 | 
				
			||||||
 | 
					            <el-table-column
 | 
				
			||||||
 | 
					              label="序号"
 | 
				
			||||||
 | 
					              width="60"
 | 
				
			||||||
 | 
					              type="index"
 | 
				
			||||||
 | 
					            ></el-table-column>
 | 
				
			||||||
 | 
					            <el-table-column
 | 
				
			||||||
 | 
					              label="缓存键名"
 | 
				
			||||||
 | 
					              align="center"
 | 
				
			||||||
 | 
					              :show-overflow-tooltip="true"
 | 
				
			||||||
 | 
					              :formatter="keyFormatter"
 | 
				
			||||||
 | 
					            >
 | 
				
			||||||
 | 
					            </el-table-column>
 | 
				
			||||||
 | 
					            <el-table-column
 | 
				
			||||||
 | 
					              label="操作"
 | 
				
			||||||
 | 
					              width="60"
 | 
				
			||||||
 | 
					              align="center"
 | 
				
			||||||
 | 
					              class-name="small-padding fixed-width"
 | 
				
			||||||
 | 
					            >
 | 
				
			||||||
 | 
					              <template slot-scope="scope">
 | 
				
			||||||
 | 
					                <el-button
 | 
				
			||||||
 | 
					                  size="mini"
 | 
				
			||||||
 | 
					                  type="text"
 | 
				
			||||||
 | 
					                  icon="el-icon-delete"
 | 
				
			||||||
 | 
					                  @click="handleClearCacheKey(scope.row)"
 | 
				
			||||||
 | 
					                ></el-button>
 | 
				
			||||||
 | 
					              </template>
 | 
				
			||||||
 | 
					            </el-table-column>
 | 
				
			||||||
 | 
					          </el-table>
 | 
				
			||||||
 | 
					        </el-card>
 | 
				
			||||||
 | 
					      </el-col>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      <el-col :span="8">
 | 
				
			||||||
 | 
					        <el-card :bordered="false" style="height: calc(100vh - 125px)">
 | 
				
			||||||
 | 
					          <div slot="header">
 | 
				
			||||||
 | 
					            <span>缓存内容</span>
 | 
				
			||||||
 | 
					            <el-button
 | 
				
			||||||
 | 
					              style="float: right; padding: 3px 0"
 | 
				
			||||||
 | 
					              type="text"
 | 
				
			||||||
 | 
					              icon="el-icon-refresh-right"
 | 
				
			||||||
 | 
					              @click="handleClearCacheAll()"
 | 
				
			||||||
 | 
					              >清理全部</el-button
 | 
				
			||||||
 | 
					            >
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					          <el-form :model="form">
 | 
				
			||||||
 | 
					            <el-row :gutter="32">
 | 
				
			||||||
 | 
					              <el-col :offset="1" :span="22">
 | 
				
			||||||
 | 
					                <el-form-item label="缓存名称:" prop="cacheName">
 | 
				
			||||||
 | 
					                  <el-input v-model="cacheForm.cacheName" :readOnly="true" />
 | 
				
			||||||
 | 
					                </el-form-item>
 | 
				
			||||||
 | 
					              </el-col>
 | 
				
			||||||
 | 
					              <el-col :offset="1" :span="22">
 | 
				
			||||||
 | 
					                <el-form-item label="缓存键名:" prop="cacheKey">
 | 
				
			||||||
 | 
					                  <el-input v-model="cacheForm.cacheKey" :readOnly="true" />
 | 
				
			||||||
 | 
					                </el-form-item>
 | 
				
			||||||
 | 
					              </el-col>
 | 
				
			||||||
 | 
					              <el-col :offset="1" :span="22">
 | 
				
			||||||
 | 
					                <el-form-item label="缓存内容:" prop="cacheValue">
 | 
				
			||||||
 | 
					                  <el-input
 | 
				
			||||||
 | 
					                    v-model="cacheForm.cacheValue"
 | 
				
			||||||
 | 
					                    type="textarea"
 | 
				
			||||||
 | 
					                    :rows="8"
 | 
				
			||||||
 | 
					                    :readOnly="true"
 | 
				
			||||||
 | 
					                  />
 | 
				
			||||||
 | 
					                </el-form-item>
 | 
				
			||||||
 | 
					              </el-col>
 | 
				
			||||||
 | 
					            </el-row>
 | 
				
			||||||
 | 
					          </el-form>
 | 
				
			||||||
 | 
					        </el-card>
 | 
				
			||||||
 | 
					      </el-col>
 | 
				
			||||||
 | 
					    </el-row>
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script>
 | 
				
			||||||
 | 
					import { listCacheName, listCacheKey, getCacheValue, clearCacheName, clearCacheKey, clearCacheAll } from "@/api/monitor/cache";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export default {
 | 
				
			||||||
 | 
					  name: "CacheList",
 | 
				
			||||||
 | 
					  data() {
 | 
				
			||||||
 | 
					    return {
 | 
				
			||||||
 | 
					      cacheNames: [],
 | 
				
			||||||
 | 
					      cacheKeys: [],
 | 
				
			||||||
 | 
					      cacheForm: {},
 | 
				
			||||||
 | 
					      loading: true,
 | 
				
			||||||
 | 
					      subLoading: false,
 | 
				
			||||||
 | 
					      nowCacheName: "",
 | 
				
			||||||
 | 
					      tableHeight: window.innerHeight - 200
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  created() {
 | 
				
			||||||
 | 
					    this.getCacheNames();
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  methods: {
 | 
				
			||||||
 | 
					    /** 查询缓存名称列表 */
 | 
				
			||||||
 | 
					    getCacheNames() {
 | 
				
			||||||
 | 
					      this.loading = true;
 | 
				
			||||||
 | 
					      listCacheName().then(response => {
 | 
				
			||||||
 | 
					        this.cacheNames = response.data;
 | 
				
			||||||
 | 
					        this.loading = false;
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    /** 刷新缓存名称列表 */
 | 
				
			||||||
 | 
					    refreshCacheNames() {
 | 
				
			||||||
 | 
					      this.getCacheNames();
 | 
				
			||||||
 | 
					      this.$modal.msgSuccess("刷新缓存列表成功");
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    /** 清理指定名称缓存 */
 | 
				
			||||||
 | 
					    handleClearCacheName(row) {
 | 
				
			||||||
 | 
					      clearCacheName(row.cacheName).then(response => {
 | 
				
			||||||
 | 
					        this.$modal.msgSuccess("清理缓存名称[" + this.nowCacheName + "]成功");
 | 
				
			||||||
 | 
					        this.getCacheKeys();
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    /** 查询缓存键名列表 */
 | 
				
			||||||
 | 
					    getCacheKeys(row) {
 | 
				
			||||||
 | 
					      const cacheName = row !== undefined ? row.cacheName : this.nowCacheName;
 | 
				
			||||||
 | 
					      if (cacheName === "") {
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      this.subLoading = true;
 | 
				
			||||||
 | 
					      listCacheKey(cacheName).then(response => {
 | 
				
			||||||
 | 
					        this.cacheKeys = response.data;
 | 
				
			||||||
 | 
					        this.subLoading = false;
 | 
				
			||||||
 | 
					        this.nowCacheName = cacheName;
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    /** 刷新缓存键名列表 */
 | 
				
			||||||
 | 
					    refreshCacheKeys() {
 | 
				
			||||||
 | 
					      this.getCacheKeys();
 | 
				
			||||||
 | 
					      this.$modal.msgSuccess("刷新键名列表成功");
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    /** 清理指定键名缓存 */
 | 
				
			||||||
 | 
					    handleClearCacheKey(cacheKey) {
 | 
				
			||||||
 | 
					      clearCacheKey(cacheKey).then(response => {
 | 
				
			||||||
 | 
					        this.$modal.msgSuccess("清理缓存键名[" + cacheKey + "]成功");
 | 
				
			||||||
 | 
					        this.getCacheKeys();
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    /** 列表前缀去除 */
 | 
				
			||||||
 | 
					    nameFormatter(row) {
 | 
				
			||||||
 | 
					      return row.cacheName.replace(":", "");
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    /** 键名前缀去除 */
 | 
				
			||||||
 | 
					    keyFormatter(cacheKey) {
 | 
				
			||||||
 | 
					      return cacheKey.replace(this.nowCacheName, "");
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    /** 查询缓存内容详细 */
 | 
				
			||||||
 | 
					    handleCacheValue(cacheKey) {
 | 
				
			||||||
 | 
					      getCacheValue(this.nowCacheName, cacheKey).then(response => {
 | 
				
			||||||
 | 
					        this.cacheForm = response.data;
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    /** 清理全部缓存 */
 | 
				
			||||||
 | 
					    handleClearCacheAll() {
 | 
				
			||||||
 | 
					      clearCacheAll().then(response => {
 | 
				
			||||||
 | 
					        this.$modal.msgSuccess("清理全部缓存成功");
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
@@ -176,9 +176,10 @@ insert into sys_menu values('110',  '定时任务', '2',   '2', 'job',        'm
 | 
				
			|||||||
insert into sys_menu values('111',  '数据监控', '2',   '3', 'druid',      'monitor/druid/index',      '', 1, 0, 'C', '0', '0', 'monitor:druid:list',      'druid',         'admin', sysdate(), '', null, '数据监控菜单');
 | 
					insert into sys_menu values('111',  '数据监控', '2',   '3', 'druid',      'monitor/druid/index',      '', 1, 0, 'C', '0', '0', 'monitor:druid:list',      'druid',         'admin', sysdate(), '', null, '数据监控菜单');
 | 
				
			||||||
insert into sys_menu values('112',  '服务监控', '2',   '4', 'server',     'monitor/server/index',     '', 1, 0, 'C', '0', '0', 'monitor:server:list',     'server',        'admin', sysdate(), '', null, '服务监控菜单');
 | 
					insert into sys_menu values('112',  '服务监控', '2',   '4', 'server',     'monitor/server/index',     '', 1, 0, 'C', '0', '0', 'monitor:server:list',     'server',        'admin', sysdate(), '', null, '服务监控菜单');
 | 
				
			||||||
insert into sys_menu values('113',  '缓存监控', '2',   '5', 'cache',      'monitor/cache/index',      '', 1, 0, 'C', '0', '0', 'monitor:cache:list',      'redis',         'admin', sysdate(), '', null, '缓存监控菜单');
 | 
					insert into sys_menu values('113',  '缓存监控', '2',   '5', 'cache',      'monitor/cache/index',      '', 1, 0, 'C', '0', '0', 'monitor:cache:list',      'redis',         'admin', sysdate(), '', null, '缓存监控菜单');
 | 
				
			||||||
insert into sys_menu values('114',  '表单构建', '3',   '1', 'build',      'tool/build/index',         '', 1, 0, 'C', '0', '0', 'tool:build:list',         'build',         'admin', sysdate(), '', null, '表单构建菜单');
 | 
					insert into sys_menu values('114',  '缓存列表', '2',   '6', 'cacheList',  'monitor/cache/list',       '', 1, 0, 'C', '0', '0', 'monitor:cache:list',      'redis-list',    'admin', sysdate(), '', null, '缓存列表菜单');
 | 
				
			||||||
insert into sys_menu values('115',  '代码生成', '3',   '2', 'gen',        'tool/gen/index',           '', 1, 0, 'C', '0', '0', 'tool:gen:list',           'code',          'admin', sysdate(), '', null, '代码生成菜单');
 | 
					insert into sys_menu values('115',  '表单构建', '3',   '1', 'build',      'tool/build/index',         '', 1, 0, 'C', '0', '0', 'tool:build:list',         'build',         'admin', sysdate(), '', null, '表单构建菜单');
 | 
				
			||||||
insert into sys_menu values('116',  '系统接口', '3',   '3', 'swagger',    'tool/swagger/index',       '', 1, 0, 'C', '0', '0', 'tool:swagger:list',       'swagger',       'admin', sysdate(), '', null, '系统接口菜单');
 | 
					insert into sys_menu values('116',  '代码生成', '3',   '2', 'gen',        'tool/gen/index',           '', 1, 0, 'C', '0', '0', 'tool:gen:list',           'code',          'admin', sysdate(), '', null, '代码生成菜单');
 | 
				
			||||||
 | 
					insert into sys_menu values('117',  '系统接口', '3',   '3', 'swagger',    'tool/swagger/index',       '', 1, 0, 'C', '0', '0', 'tool:swagger:list',       'swagger',       'admin', sysdate(), '', null, '系统接口菜单');
 | 
				
			||||||
-- 三级菜单
 | 
					-- 三级菜单
 | 
				
			||||||
insert into sys_menu values('500',  '操作日志', '108', '1', 'operlog',    'monitor/operlog/index',    '', 1, 0, 'C', '0', '0', 'monitor:operlog:list',    'form',          'admin', sysdate(), '', null, '操作日志菜单');
 | 
					insert into sys_menu values('500',  '操作日志', '108', '1', 'operlog',    'monitor/operlog/index',    '', 1, 0, 'C', '0', '0', 'monitor:operlog:list',    'form',          'admin', sysdate(), '', null, '操作日志菜单');
 | 
				
			||||||
insert into sys_menu values('501',  '登录日志', '108', '2', 'logininfor', 'monitor/logininfor/index', '', 1, 0, 'C', '0', '0', 'monitor:logininfor:list', 'logininfor',    'admin', sysdate(), '', null, '登录日志菜单');
 | 
					insert into sys_menu values('501',  '登录日志', '108', '2', 'logininfor', 'monitor/logininfor/index', '', 1, 0, 'C', '0', '0', 'monitor:logininfor:list', 'logininfor',    'admin', sysdate(), '', null, '登录日志菜单');
 | 
				
			||||||
@@ -308,6 +309,7 @@ insert into sys_role_menu values ('2', '113');
 | 
				
			|||||||
insert into sys_role_menu values ('2', '114');
 | 
					insert into sys_role_menu values ('2', '114');
 | 
				
			||||||
insert into sys_role_menu values ('2', '115');
 | 
					insert into sys_role_menu values ('2', '115');
 | 
				
			||||||
insert into sys_role_menu values ('2', '116');
 | 
					insert into sys_role_menu values ('2', '116');
 | 
				
			||||||
 | 
					insert into sys_role_menu values ('2', '117');
 | 
				
			||||||
insert into sys_role_menu values ('2', '500');
 | 
					insert into sys_role_menu values ('2', '500');
 | 
				
			||||||
insert into sys_role_menu values ('2', '501');
 | 
					insert into sys_role_menu values ('2', '501');
 | 
				
			||||||
insert into sys_role_menu values ('2', '1000');
 | 
					insert into sys_role_menu values ('2', '1000');
 | 
				
			||||||
		Reference in New Issue
	
	Block a user