@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 12:26:18 浏览: 25
根据你提供的代码,你继承了一个名为 `AccessControlEntity` 的类,并重写了其中的 `canAccess` 方法。在重写的方法中,你使用了 `@Value` 注解来注入了一个名为 `enableAuth` 的布尔类型变量,并使用了 `StringUtils` 类和 `SecurityContextHolder` 来进行权限验证。 根据你的代码,重写的方法看起来是正确的。但是,如果重写的方法不生效,可能还有其他原因导致问题。 1. 检查父类方法是否被正确调用:如果你在其他地方调用了 `canAccess` 方法,并且没有使用子类的实例进行调用,那么重写的方法将不会被执行。请确保在需要调用 `canAccess` 方法的地方使用了子类的实例进行调用。 2. 检查父类方法的访问修饰符:如果父类中的 `canAccess` 方法被声明为 `private`,那么子类是无法重写该方法的。请确保父类方法的访问修饰符是 `protected` 或 `public`。 3. 检查依赖注入是否成功:你在子类中使用了 `@Resource` 注解来注入了一个名为 `redisTemplate` 的依赖。请确保该依赖被成功注入,并且在使用时不会出现空指针异常。 如果以上解决方案都不能解决问题,请提供更多关于问题的详细信息,以便我更好地帮助你解决问题。
相关问题

@Component public class CceedAccessControlEntity extends AccessControlEntity { @Resource private RedisTemplate redisTemplate; @Value("${auth.enable:true}") private boolean enableAuth; }

根据你提供的代码,你继承了一个名为 `AccessControlEntity` 的类,并在子类 `CceedAccessControlEntity` 中添加了一些新的成员变量。从代码中看,你使用了 `@Component` 注解来标识 `CceedAccessControlEntity` 类作为一个 Spring Bean。 根据你的描述,问题可能出现在子类中的重写代码上。如果你在子类中重写了父类的方法,但重写的代码不生效,有几个可能的原因: 1. 确保你在子类中正确地重写了父类的方法。在你提供的代码中,并没有看到你重写父类方法的部分。请确保你使用相同的方法名和签名来重写父类的方法。 2. 检查父类方法的访问修饰符。如果父类中被重写的方法的访问修饰符是 `private`,那么子类是无法重写该方法的。请确保父类方法的访问修饰符是 `protected` 或 `public`。 3. 确保重写的方法被正确调用。如果你在其他地方调用了该方法,确保调用的是子类中重写的方法,而不是父类中原有的方法。 如果以上解决方案都不能解决问题,请提供更多关于你重写代码以及哪些功能不生效的信息,以便我更好地帮助你解决问题。

代码解释:@Configuration @EnableCaching public class RedisConfig extends CachingConfigurerSupport { @Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory){ RedisTemplate<String, Object> template = new RedisTemplate<>(); templa

这段代码是用于配置 Redis 的缓存,使用了 Spring 提供的缓存框架。具体解释如下: - `@Configuration`:声明这个类是一个配置类,相当于传统的 XML 配置文件。 - `@EnableCaching`:启用缓存支持。 - `RedisConfig extends CachingConfigurerSupport`:继承了 `CachingConfigurerSupport` 类,这个类提供了一些缓存配置的默认实现,可以让我们重写需要的方法来实现自定义配置。 - `@Bean`:声明这个方法返回一个 Spring 管理的 Bean 对象。 - `RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory)`:定义了一个名为 `redisTemplate` 的 Bean,这个 Bean 的类型是 `RedisTemplate<String, Object>`,返回的是 RedisTemplate 对象。 - `RedisConnectionFactory factory`:声明了一个名为 `factory` 的参数,这个参数是 `RedisConnectionFactory` 类型,表示这个 Bean 需要一个 RedisConnectionFactory 对象作为参数。 - `RedisTemplate<String, Object> template = new RedisTemplate<>();`:创建一个 RedisTemplate 对象。 - `template.setConnectionFactory(factory)`:设置 RedisTemplate 对象的连接工厂,即上面传入的 RedisConnectionFactory 对象。 - `template.setValueSerializer(new GenericToStringSerializer<>(Object.class))`:设置 RedisTemplate 对象的值序列化器,这里使用了 `GenericToStringSerializer`,将任何类型的值转换为字符串后存储到 Redis 中。 - `return template`:返回 RedisTemplate 对象,这个对象将被 Spring 管理。

相关推荐

package com.tiger.biz.websocket; import lombok.extern.slf4j.Slf4j; import org.java_websocket.client.WebSocketClient; import org.java_websocket.drafts.Draft_6455; import org.java_websocket.handshake.ServerHandshake; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; import javax.websocket.server.ServerEndpoint; import java.net.URI; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Map; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; /** * websocket的客户端 */ @Slf4j public class DemoWebSocketClient extends WebSocketClient { @Autowired private RedisTemplate<String, String> redisTemplate; public static final String HEARTBEAT_CMD = "此处为商定的保活命令"; public DemoWebSocketClient(URI serverUri) { super(serverUri, new Draft_6455()); } @Override public void onOpen(ServerHandshake serverHandshake) { //开启心跳保活 heartbeat(this); log.info("===建立连接,心跳保活开启==="); } @Override public void onMessage(String s) { log.info("{}时来自服务端的消息:{}", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()), s); try { Map<Object, Object> map = redisTemplate.opsForHash().entries("zd:location"); System.out.println(map.size()+"dd"); } catch (Exception e) { e.printStackTrace(); } } @Override public void onClose(int a, String s, boolean b) { //重连 log.info("由于:{},连接被关闭,开始尝试重新连接", s); DemoReconnectThreadEnum.getInstance().reconnectWs(this); } @Override public void onError(Exception e) { log.error("====websocket出现错误====" + e.getMessage()); } /** * 心跳保活 * * @param var1 */ private void heartbeat(DemoWebSocketClient var1) { Schedul 改进以上代码怎么让 redistimplate正常注入 且URI serverUri不报错

有如下需求:根据输入关键字检索博客信息;请根据下面已有代码,补全业务逻辑。 PostDocment实体类: @Data @Document(indexName="post", type="post", createIndex=true) public class PostDocment implements Serializable { @Id private Long id; // ik分词器 @Field(type = FieldType.Text, searchAnalyzer="ik_smart", analyzer = "ik_max_word") private String title; @Field(type = FieldType.Long) private Long authorId; @Field(type = FieldType.Keyword) private String authorName; private String authorAvatar; private Long categoryId; @Field(type = FieldType.Keyword) private String categoryName; private Integer level; private Boolean recomment; private Integer commentCount; private Integer viewCount; @Field(type = FieldType.Date) private Date created; } PostRepository: @Repository public interface PostRepository extends ElasticsearchRepository { } SearchService接口(Page类型是org.springframework.data.domain): public interface SearchService { Page search(Long current, Long size, String keyword); } SearchServiceImpl实现类: @Slf4j @Service public class SearchServiceImpl implements SearchService { @Autowired PostRepository postRepository; /** * 实现根据关键词检索,关键词可能匹配title,也可能匹配authorName或者categoryName * @param current 查询的当前页 * @param size 每页展示size * @param keyword 查询关键词 * @return */ public org.springframework.data.domain.Page search(Long current, Long size, String keyword ) { } 控制层此处省略...... 注意:es中可能设计的操作QueryBuilders.multiMatchQuery(Object text, String... fieldNames); QueryBuilders.MatchQuery(Object text, String fieldNames); QueryBuilders.boolQuery().......

最新推荐

recommend-type

08内墙涂料工程.doc

08内墙涂料工程
recommend-type

Springboot759的幼儿园管理系统.mp4

项目运行视频
recommend-type

PHP校园二手信息网站的设计与开发(源代码+论文).rar

php,PHP校园二手信息网站的设计与开发(源代码+论文)
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

MATLAB图像处理算法宝典:从理论到实战

![MATLAB图像处理算法宝典:从理论到实战](https://img-blog.csdnimg.cn/20200717112736401.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2d1emhhbzk5MDE=,size_16,color_FFFFFF,t_70) # 1. MATLAB图像处理基础理论 MATLAB图像处理是一种利用MATLAB编程语言进行图像处理的强大工具。它提供了丰富的函数和工具箱,用于图像获取、增强、分
recommend-type

matlab中1/x的非线性规划

在MATLAB中,可以使用非线性规划函数(`fmincon`)来优化一个包含1/x的非线性目标函数。下面是一个简单的例子: ```matlab % 定义目标函数 fun = @(x) 1/x; % 定义约束函数(这里没有约束) nonlcon = []; % 定义初始点 x0 = 1; % 定义优化选项 options = optimoptions('fmincon', 'Display', 'iter'); % 进行非线性规划 [x, fval] = fmincon(fun, x0, [], [], [], [], [], [], nonlcon, options); ``` 在
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。
recommend-type

"互动学习:行动中的多样性与论文攻读经历"

多样性她- 事实上SCI NCES你的时间表ECOLEDO C Tora SC和NCESPOUR l’Ingén学习互动,互动学习以行动为中心的强化学习学会互动,互动学习,以行动为中心的强化学习计算机科学博士论文于2021年9月28日在Villeneuve d'Asq公开支持马修·瑟林评审团主席法布里斯·勒菲弗尔阿维尼翁大学教授论文指导奥利维尔·皮耶昆谷歌研究教授:智囊团论文联合主任菲利普·普雷教授,大学。里尔/CRISTAL/因里亚报告员奥利维耶·西格德索邦大学报告员卢多维奇·德诺耶教授,Facebook /索邦大学审查员越南圣迈IMT Atlantic高级讲师邀请弗洛里安·斯特鲁布博士,Deepmind对于那些及时看到自己错误的人...3谢谢你首先,我要感谢我的两位博士生导师Olivier和Philippe。奥利维尔,"站在巨人的肩膀上"这句话对你来说完全有意义了。从科学上讲,你知道在这篇论文的(许多)错误中,你是我可以依
recommend-type

MATLAB数据可视化黑科技:洞悉数据背后的秘密

![MATLAB数据可视化黑科技:洞悉数据背后的秘密](https://img-blog.csdnimg.cn/img_convert/1a36558cefc0339f7836cca7680c0aef.png) # 1. MATLAB数据可视化的基本原理 MATLAB数据可视化是一种将数据转化为图形表示形式的技术,以帮助人们理解和分析数据。其基本原理包括: - **数据表示:**将原始数据转换为图形元素,如点、线和条形。 - **图形布局:**确定图形元素在绘图区域中的位置和大小。 - **图形美化:**添加标题、标签、颜色和纹理等元素,以增强图形的可读性和美观性。 - **交互性:**允