@Component public class CceedAccessControlEntity extends AccessControlEntity { @Resource private RedisTemplate redisTemplate; @Value("${auth.enable:true}") private boolean enableAuth; @Override public boolean canAccess(String funcName) { if (!enableAuth) { return true; } if (StringUtils.isEmpty(funcName)) { return false; } return canAccessInternal(funcName); } private boolean canAccessInternal(String funcName) { SysUserDetails sysUserDetails = (SysUserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); if (sysUserDetails == null || StringUtils.isEmpty(sysUserDetails.getUserId())) { return false; } String key = CacheKeyUtils.buildCacheKey(RedisCacheKeys.USER_PERMISSION_CACHE, sysUserDetails.getUserId(), RedisCacheKeys.USER_CACHE); List<String> permissions = (List<String>) redisTemplate.opsForValue().get(key); if (CollectionUtils.isEmpty(permissions)) { return false; } return permissions.contains(funcName); } }
时间: 2024-02-14 09:26:18 浏览: 217
MybatisPlus中@TableField注解的使用详解
3星 · 编辑精心推荐
根据你提供的代码,你继承了一个名为 `AccessControlEntity` 的类,并重写了其中的 `canAccess` 方法。在重写的方法中,你使用了 `@Value` 注解来注入了一个名为 `enableAuth` 的布尔类型变量,并使用了 `StringUtils` 类和 `SecurityContextHolder` 来进行权限验证。
根据你的代码,重写的方法看起来是正确的。但是,如果重写的方法不生效,可能还有其他原因导致问题。
1. 检查父类方法是否被正确调用:如果你在其他地方调用了 `canAccess` 方法,并且没有使用子类的实例进行调用,那么重写的方法将不会被执行。请确保在需要调用 `canAccess` 方法的地方使用了子类的实例进行调用。
2. 检查父类方法的访问修饰符:如果父类中的 `canAccess` 方法被声明为 `private`,那么子类是无法重写该方法的。请确保父类方法的访问修饰符是 `protected` 或 `public`。
3. 检查依赖注入是否成功:你在子类中使用了 `@Resource` 注解来注入了一个名为 `redisTemplate` 的依赖。请确保该依赖被成功注入,并且在使用时不会出现空指针异常。
如果以上解决方案都不能解决问题,请提供更多关于问题的详细信息,以便我更好地帮助你解决问题。
阅读全文