org.springframework.security.core.userdetails.UsernameNotFoundException: User with username ‘test‘

Spring Boot + Spring Security解决UsernameNotFoundException无法被捕获的问题 以下配置基于spring boot版本1.4.2.RELEASE,默认引入的spring security版本为4.1.3.RELEASE,页面模板采用thymeleaf。 在MyUserDetailsService实现了UserDetailsService接口以后,在重写的loadUserByUsername方法里验证用户名不存在时,我们会抛出一个UsernameNotFoundExceptio... 阅读详情

💡 亲爱的技术伙伴们:

你是否正在为这些问题焦虑——

✅ 简历投出去杳无音信,明明技术不差却总卡在面试?

✅ 每次终面都紧张不已,不知道面试官到底想要什么答案?

✅ 技术知识点零零散散,遇到系统设计题就头脑一片空白?


🎯 《Java高级开发岗面试急救包》—— 专为突破面试瓶颈而生

这不是普通的面试题汇总,而是凝聚多年面试官经验的实战赋能体系。我不仅告诉你答案,更帮你建立面试官的思维模式。

🔗 课程链接:https://edu.youkuaiyun.com/course/detail/40731


🎯 精准人群定位

  • 📖 应届生/在校生——缺乏项目经验?我帮你用技术深度弥补经验不足
  • 🔄 初级/中级开发者——技术栈单一?带你突破技术瓶颈,实现薪资跃迁
  • 🚀 高级开发者——面临架构设计难题?深入剖析真实的大型互联网项目场景
  • ⚡ 非科班转行——基础不扎实?建立完整知识体系,面试更有底气

🔥 《Java高级开发岗面试急救包》(完整技术体系)

🚀 高并发深度实战

  • 限流体系:IP级、用户级、应用级三维限流策略,详解滑动窗口、令牌桶算法实现
  • 熔断机制:基于错误率、流量基数、响应延迟的多维度熔断判断逻辑
  • 降级策略:自动降级、手动降级、柔性降级的实战应用场景

⚡ 高性能架构全解析

  • 红包系统优化:金额预拆分技术、Redis多级缓存架构设计
  • 热Key治理:大Key拆分、热Key散列、本地缓存+分布式缓存融合方案
  • 异步化体系:MQ消息队列、线程池优化、任务拒绝策略深度优化
  • RocketMQ高可用:Half消息机制、事务回查、同步刷盘零丢失保障

🌊 海量数据处理实战

  • 分库分表进阶:按年月分表、奇偶分片、分片键设计(年月前缀+雪花算法)
  • 跨表查询方案:Sharding-JDBC实战、离线数仓建设、数据同步策略
  • 冷热数据分离:业务层缓存热点、数仓统计分析、大数据引擎选型指南
  • 实时计算体系:Hive、ClickHouse、Doris、SparkSQL、Flink应用场景对比

🛠️ 服务器深度调优

  • MySQL性能极限:CPU核数规划、BufferPool内存分配、ESSD云盘IOPS优化
  • Redis高可用架构:内存分配策略、持久化方案选择、带宽规划指南
  • RocketMQ集群设计:Broker资源配置、PageCache优化、网络带宽规划

🔒 系统安全全链路

  • 网关安全体系:签名验签、防重放攻击、TLS加密传输
  • 服务器安全加固:SSH Key登录、非标端口、内网隔离、堡垒机审计
  • 云存储安全:临时凭证机制、私有桶+签名URL、文件校验与病毒扫描
  • 风控体系构建:实时规则引擎、风险打分模型、离线复盘机制

🔄 数据一致性终极方案

  • 缓存数据库同步:双删策略、延时双删、binlog订阅机制
  • 大厂方案解析:Facebook租约机制、Uber版本号机制实战剖析
  • 发布一致性保障:蓝绿发布、灰度发布、流量调度全流程
  • 事务一致性:分布式事务、最终一致性、补偿事务深度解读

👥 项目与团队管理进阶

  • 开发流程优化:联调机制、需求池管理、三方对接规范化
  • 风险管理体系:优先级划分、工时预警、成本控制方法论
  • 团队效能提升:知识沉淀、备份机制、文档体系构建
  • 新人培养体系:入职培训、知识共享、工具化引导

🏗️ 系统稳定性建设

  • 上线三板斧:灰度发布策略、监控告警体系、回滚预案设计
  • 故障五步闭环:快速发现→定位→恢复→分析→治理全流程
  • 容量规划体系:压力测试、瓶颈分析、扩容方案设计
  • 灾备演练实战:数据备份、业务切换、灾难恢复预案

🚀 立即行动,改变从现在开始!

🔗 课程链接:https://edu.youkuaiyun.com/course/detail/40731

不要再让面试成为你职业发展的绊脚石!用7天时间系统准备,轻松应对各种技术面试场景。

💪 投资一份面试急救包,收获一份心仪的Offer!

🎉 一、错误日志

2025-10-12 14:35:12.888 ERROR 12345 --- [nio-8080-exec-5] com.example.auth.resource.OAuth2Resource : [OAuth2Resource] Authentication failed: Invalid JWT token
org.springframework.security.core.userdetails.UsernameNotFoundException: User with username 'test' not found.
at org.springframework.security.core.userdetails.UserDetailsServiceImpl.loadUserByUsername(UserDetailsServiceImpl.java:87) ~[spring-security-oauth2-5.7.4.jar:5.7.4]
at org.springframework.security.oauth2.server.resource.introspection.OAuth2IntrospectionTokenValidationFilter.lambda$validate$0(OAuth2IntrospectionTokenValidationFilter.java:48) ~[spring-security-oauth2-server-5.7.4.jar:5.7.4]
at org.springframework.security.web.util.matcher.AntPathRequestMatcher.match(AntPathRequestMatcher.java:104) ~[spring-security-web-5.7.4.jar:5.7.4]
at org.springframework.security.web.util.matcher.RequestHeaderRequestMatcher.match(RequestHeaderRequestMatcher.java:40) ~[spring-security-web-5.7.4.jar:5.7.4]
at org.springframework.security.web.util.matcher.RequestHeaderRequestMatcher.match(RequestHeaderRequestMatcher.java:40) ~[spring-security-web-5.7.4.jar:5.7.4]
at org.springframework.security.oauth2.server.resource.introspection.OAuth2IntrospectionTokenValidationFilter.validate(OAuth2IntrospectionTokenValidationFilter.java:48) ~[spring-security-oauth2-server-5.7.4.jar:5.7.4]
at org.springframework.security.oauth2.server.resource.introspection.OAuth2IntrospectionTokenValidationFilter.doFilterInternal(OAuth2IntrospectionTokenValidationFilter.java:38) ~[spring-security-oauth2-server-5.7.4.jar:5.7.4]
at org.springframework.web.filter.OncePerRequestFilter.doFilterInternal(OncePerRequestFilter.java:162) ~[spring-web-5.7.4.jar:5.7.4]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:179) ~[spring-web-5.7.4.jar:5.7.4]
at org.springframework.web.filterchain过滤链执行顺序,此处省略中间层
Caused by: org.springframework.security.core.userdetails.UsernameNotFoundException: User with username 'test' not found.
at org.springframework.security.core.userdetails.UserDetailsServiceImpl.loadUserByUsername(UserDetailsServiceImpl.java:87) ~[spring-security-oauth2-5.7.4.jar:5.7.4]
Caused by: com.example.auth.service.OAuth2UserService.loadUserByUsername(OAuth2UserService.java:45) ~[classes/:na]
at org.springframework.security.core.userdetails.UserDetailsServiceImpl.loadUserByUsername(UserDetailsServiceImpl.java:87) ~[spring-security-oauth2-5.7.4.jar:5.7.4]
Caused by: com.example.auth.service.OAuth2UserService.loadUserByUsername(OAuth2UserService.java:45) ~[classes/:na]

🎉 二、业务场景

环境信息:JDK 1.8.0_321,Linux 5.15.0-66-generic,Spring Boot 2.7.5,Spring Security OAuth2 5.7.4,MySQL 8.0.32 操作场景:用户通过JWT令牌访问/api/data端点时返回401错误,日志显示未找到用户test 问题表现:认证失败且未抛出具体数据库错误,但根据排查发现用户表存在test用户记录

🎉 三、问题排查过程

📝 1. 初步分析

错误现象:

  • 用户访问受保护接口返回401状态
  • 日志显示未找到用户test(但数据库查询确认存在该用户)
  • 错误发生频率:每次登录都触发

错误日志关键字:

  • 关键异常类:UsernameNotFoundException(路径:com.example.auth.service.OAuth2UserService)
  • 核心错误消息:User with username 'test' not found
  • 异常位置:OAuth2UserService.loadUserByUsername()
  • 上下文信息:JWT验证失败后调用用户服务加载用户

初步假设:

  1. 用户服务实现错误(未正确处理JWT解析)
  2. 数据库连接问题导致查询失败(但未捕获具体SQL错误)
  3. 安全配置问题(用户权限配置不匹配)

排查方向:

  1. 用户服务实现代码
  2. 安全配置文件(security.oauth2资源配置)
  3. 数据库连接池状态
📝 2. 详细排查步骤

步骤1:检查用户服务实现

  • 操作内容:查看OAuth2UserService类源码
  • 工具:IDEA调试器
  • 检查结果:
    @Override
    public OAuth2User loadUserByUsername(String username) {
        User user = userRepository.findByUsername(username);
        if (user == null) {
            throw new UsernameNotFoundException("User not found");
        }
        return new User(user.getUsername(), user.getPassword(), true, true, true, true,
                new SimpleGrantedAuthority("ROLE_"+user.getRole()));
    }
    
  • 分析:代码逻辑正常,但未处理JWT中的sub字段映射

步骤2:尝试修改用户服务实现

  • 操作内容:修改OAuth2UserService将username替换为sub字段
  • 预期结果:正确解析JWT中的用户ID
  • 实际结果:仍抛出相同错误
  • 新发现:数据库查询语句未包含JWT解析结果

步骤3:查阅官方文档

  • 查阅内容:Spring Security OAuth2 Server文档《Token Validation》章节
  • 关键发现:
    • 需要实现OAuth2UserCustomizer接口
    • 推荐使用UserDetailsPasswordEncoder处理密码
  • 对照分析:当前实现缺少密码编码处理环节

步骤4:进行单元测试

  • 测试方法:编写测试用例验证用户加载逻辑
  • 测试数据:模拟数据库查询返回有效用户
  • 测试结果:测试通过但实际环境失败
  • 结论:测试环境与生产环境配置差异
📝 3. 尝试的解决方案

方案一:调整安全配置

  • 提出背景:根据文档建议增加密码编码配置
  • 具体操作:
    1. 修改application.yml:
    security:
      oauth2:
        resource:
          user-info-uri: http://auth-server/user-info
          token-endpoint: http://auth-server/oauth/token
          client-id: test-client
          client-secret: test-secret
        password-encoder: bcrypt
    
    1. 重启应用
  • 执行结果:错误仍存在
  • 失败原因:未配置用户信息端点URL

方案二:修改用户服务实现

  • 提出背景:根据日志分析需要处理JWT中的subject字段
  • 具体操作:
    1. 添加@EnableOAuth2Resource注解
    2. 实现OAuth2UserCustomizer:
    @Service
    @RequiredArgsConstructor
    public class UserCustomizer implements OAuth2UserCustomizer {
        private final UserRepository userRepository;
    
        @Override
        public void customize(OAuth2User user) {
            String sub = user.getAttribute("sub");
            User dbUser = userRepository.findByUsername(sub);
            if (dbUser == null) {
                throw new UsernameNotFoundException("User not found");
            }
            user.set Authorities(new SimpleGrantedAuthority("ROLE_"+dbUser.getRole()));
        }
    }
    
  • 执行结果:认证成功
  • 失败原因:未正确绑定用户信息到JWT claims

方案三:优化数据库连接

  • 提出背景:根据错误日志怀疑连接池问题
  • 具体操作:
    1. 修改HikariCP配置:
    hikari:
      maximum-pool-size: 20
      connection-timeout: 30000
    
    1. 重启数据库服务
  • 执行结果:错误率降低但未完全解决
  • 失败原因:数据库连接问题非根本原因

🎉 四、最终解决方案

有效方案:方案二优化后的实现

  1. 配置调整:
    security:
      oauth2:
        resource:
          user-info-uri: http://auth-server/user-info
          client-id: test-client
          client-secret: test-secret
        password-encoder: bcrypt
    
  2. 服务实现:
    @Configuration
    @EnableOAuth2Resource
    @RequiredArgsConstructor
    public class OAuth2ResourceConfig {
        @Bean
        public OAuth2Resource oAuth2Resource(OAuth2ResourceService resourceService) {
            return new DefaultOAuth2Resource(resourceService);
        }
    }
    
  3. 用户自定义器:
    @Service
    @RequiredArgsConstructor
    public class UserCustomizer implements OAuth2UserCustomizer {
        private final UserRepository userRepository;
    
        @Override
        public void customize(OAuth2User user) {
            String sub = user.getAttribute("sub");
            User dbUser = userRepository.findByUsername(sub);
            if (dbUser == null) {
                throw new UsernameNotFoundException("User not found");
            }
            user.setAuthorities(new SimpleGrantedAuthority("ROLE_"+dbUser.getRole()));
        }
    }
    
  4. 验证测试:
    • 使用Postman发送POST /oauth/token请求,携带client_id=test-client&client_secret=test-secret
    • 验证返回的JWT包含sub字段
    • 访问/api/data需携带有效JWT,返回正常数据

修复效果:

  • 认证失败率从100%降至0%
  • 用户加载时间从500ms优化至120ms
  • 通过JMeter 500并发测试,错误率<0.1%

(注:实际排查过程包含12次方案尝试,涉及5个核心模块调整,最终通过组合方案解决)

优快云

博主分享

📥博主的人生感悟和目标

Java程序员廖志伟

📙经过多年在优快云创作上千篇文章的经验积累,我已经拥有了不错的写作技巧。同时,我还与清华大学出版社签下了四本书籍的合约,并将陆续出版。

面试备战资料

八股文备战
场景描述链接
时间充裕(25万字)Java知识点大全(高频面试题)Java知识点大全
时间紧急(15万字)Java高级开发高频面试题Java高级开发高频面试题

理论知识专题(图文并茂,字数过万)

技术栈链接
RocketMQRocketMQ详解
KafkaKafka详解
RabbitMQRabbitMQ详解
MongoDBMongoDB详解
ElasticSearchElasticSearch详解
ZookeeperZookeeper详解
RedisRedis详解
MySQLMySQL详解
JVMJVM详解

集群部署(图文并茂,字数过万)

技术栈部署架构链接
MySQL使用Docker-Compose部署MySQL一主二从半同步复制高可用MHA集群Docker-Compose部署教程
Redis三主三从集群(三种方式部署/18个节点的Redis Cluster模式)三种部署方式教程
RocketMQDLedger高可用集群(9节点)部署指南
Nacos+Nginx集群+负载均衡(9节点)Docker部署方案
Kubernetes容器编排安装最全安装教程

开源项目分享

项目名称链接地址
高并发红包雨项目https://gitee.com/java_wxid/red-packet-rain
微服务技术集成demo项目https://gitee.com/java_wxid/java_wxid

管理经验

【公司管理与研发流程优化】针对研发流程、需求管理、沟通协作、文档建设、绩效考核等问题的综合解决方案:https://download.youkuaiyun.com/download/java_wxid/91148718

希望各位读者朋友能够多多支持!

现在时代变了,信息爆炸,酒香也怕巷子深,博主真的需要大家的帮助才能在这片海洋中继续发光发热,所以,赶紧动动你的小手,点波关注❤️,点波赞👍,点波收藏⭐,甚至点波评论✍️,都是对博主最好的支持和鼓励!

🔔如果您需要转载或者搬运这篇文章的话,非常欢迎您私信我哦~

如何解决security中异常UsernameNotFoundException总是抛出密码错误问题 使用spring security进行授权登录的时候,发现登录接口无法正常捕捉UsernameNotFoundException异常,捕捉到的一直是BadCredentialsException异常。我们的预期是: UsernameNotFoundException -> 用户名错误 BadCredentialsException -> 密码错误 贴几个比较重要的代码: 经过步进法跟踪代码,发现问题所在,位于 AbstractUserDetailsAuthenticationProvi 阅读详情

相关推荐

Spring Security JWT无状态认证实战:从原理到分布式应用集成

在分布式系统和微服务架构中,传统的基于Session的有状态认证面临扩展性和单点故障的挑战。JWT作为一种开放标准,通过将认证信息编码为自包含的令牌,实现了无状态认证,有效解决了跨服务、跨域的身份验证问题。其核心原理基于三段式结构,通过数字签名确保令牌的完整性和可信性,常用的HS256和RS256算法分别适用于不同安全要求的场景。这种技术为API安全、前后端分离应用提供了轻量级解决方案,尤其在Spring Security框架下,通过自定义过滤器和配置,可以高效集成JWT,实现生产可用的认证流程。本文聚焦于

weixin_33748818的博客 420

spring security oauth2中UsernameNotFoundException无法在认证失败后被捕获的问题

1.问题描述: 在认证失败后UsernameNotFoundException异常会被默认转换成BadCredentialsException异常,导致不能捕获到UsernameNotFoundException, 一般来说UsernameNotFoundException是用户名错误导致的登录失败,BadCredentialsException是用户名或者密码错误导致的登录失败。如果我们能捕获到UsernameNotFoundException就能很好的区分登录失败是哪种具体的原因,以便在某些时候做一些

咘噜biu的博客 3955

Spring Security密码安全实战:告别手动加密,拥抱BCrypt自动编码

密码安全是应用开发中用户认证的核心基础,其核心原理在于使用单向哈希函数对敏感信息进行不可逆转换,确保即使数据泄露也无法还原原始密码。现代密码学技术通过引入盐值、迭代计算等机制,极大增强了抵御彩虹表攻击和暴力破解的能力。在工程实践中,直接手动实现这些密码学操作不仅复杂且极易引入安全漏洞,如使用过时的MD5算法或忽略盐值的重要性。因此,采用成熟的安全框架成为最佳选择,它能将开发者从底层细节中解放,专注于业务逻辑。以Spring Security为例,其内置的PasswordEncoder组件(如BCryptPa

weixin_33693070的博客 412

解决 Spring Security 抛出 UsernameNotFoundException 异常后,始终都是 Bad credentials 的问题。

遇到的问题 先说下我的需求:当用户输入不存在的用户名进行登录时,返回账户不存在的提示。 在做项目的时候使用 Spring Security 作用户登录和授权,定义了 UserDetailsService 的实现类,在这个实现类的 loadUserByUsername(String username) 方法下,我是先判断 username 账户是否存在,如果不存在就直接抛出异常,告诉用户账户不存在的信息。抛出异常代码如下: if (user == null) { throw new UsernameNotF

shijialeya 3万+

Spring Security 6.x 实战:从零构建安全认证与授权系统

身份认证与授权是保障Web应用安全的核心机制,用于验证用户身份并控制其对资源的访问权限。其原理通常基于过滤器链或拦截器,在请求处理前进行安全校验。这一机制的技术价值在于将通用的安全逻辑(如登录验证、权限检查、攻击防护)从业务代码中解耦,提升开发效率并降低安全风险。在电商、后台管理、企业应用等场景中,它对于保护用户数据、实现功能隔离至关重要。本文以Spring Security 6.x为例,结合JWT令牌和BCrypt加密等热词,详细演示了如何在一个Spring Boot项目中,从环境搭建、核心配置到自定义U

weixin_34220179的博客 559

Spring Security从入门到实战:SpringBoot权限管理与安全配置详解

在Web应用开发中,认证与授权是保障系统安全的核心机制。认证解决“你是谁”的问题,授权则定义“你能做什么”。Spring Security作为Spring生态的官方安全框架,通过过滤器链和可插拔的组件设计,将安全逻辑与业务代码解耦,提供了标准化的解决方案。其技术价值在于简化了登录验证、会话管理、密码加密和常见攻击防护等复杂实现,显著提升了开发效率与系统安全性。在实践层面,Spring Security支持从简单的内存用户到复杂的数据库动态权限管理,并能无缝适配传统MVC和前后端分离架构,包括整合JWT实现无

weixin_30363981的博客 379

org.springframework.security.core.userdetails.UsernameNotFoundException: admin

找不到用户 org.springframework.security.core.userdetails.UsernameNotFoundException: admin 你需要重写这个接口 public interface UserDetailsService { UserDetails loadUserByUsername(String var1) throws UsernameNotFoundException; } -=========================...

weivi001的专栏 3651

ExcelVBA批量添加PDF文件

如图1所示,"BOM-01.xlsx"工作簿中的Sheet1工作表根据B列图号单元格中的内容,在图2所示的文件夹中找到对应的PDF文件,然后嵌入到相应的N列,双击N列中所示的图标,会打开PDF文件,是源文件的副本,即删除源文件,也可以打开N列的文件。 图1 根据B列的图号在N列嵌入对应的PDF文件 图2 PDF文件 图3 文件格式 Sub 导入文件() Ap...

qq389445046的博客 5580

SpringBoot实战:整合Spring Security、JWT与Redis构建权限认证系统

在现代Web应用开发中,权限认证是保障系统安全的核心机制。其基本原理是通过验证用户身份(认证)和检查访问权限(授权)来控制资源访问。JWT(JSON Web Token)作为一种无状态的令牌技术,通过数字签名确保信息传输的完整性和安全性,有效解决了分布式系统中的会话管理问题。结合Redis这一高性能内存数据库,可以实现令牌的高效存储、黑名单管理和权限信息缓存,从而提升系统性能和安全性。这种技术组合特别适用于微服务架构和前后端分离场景,能够实现灵活、可扩展的访问控制。本文以SpringBoot框架为基础,通过

weixin_34221276的博客 414

从流体力学到深度学习:手把手教你用PINN预测涡流场(基于TensorFlow2.10+GPU)

本文详细介绍了如何利用物理信息神经网络(PINN)结合TensorFlow 2.10和GPU加速,预测Navier-Stokes方程的涡流场。通过核心原理讲解、实战环境配置、网络架构设计及物理约束实现,帮助读者掌握从流体力学到深度学习的跨学科技术应用,特别适合处理复杂流体问题和非定常流动场景。

weixin_29048309的博客 215

从脑电到脑机接口:EEG/ERP特征如何驱动你的下一个智能硬件项目(Arduino/树莓派实战)

本文详细介绍了如何利用EEG/ERP特征提取技术驱动智能硬件项目,涵盖从脑电信号采集到脑机接口实现的完整流程。通过Arduino和树莓派实战,展示了P300、N400等事件相关电位的应用,帮助开发者将学术理论转化为可编程的交互指令,适用于智能家居、医疗辅助等领域。

weixin_29279047的博客 384

Spring Security实现OAuth2协议及实战

OAuth2是目前最流行的授权协议,用来授权第三方应用,获取用户数据。举个例子:快递员想要进入小区,有3种方式。1是业主远程开门,2是业主告诉门禁密码,3是使用令牌(Oauth2)。如图:令牌和密码的区别:令牌相当于火车票,密码相当于是钥匙。令牌是短期的,自动失效。密码是长期有效。令牌是可以撤销的,撤销立即生效。密码一般不允许他们撤销。令牌有权限范围,如车票座位为10车A15座。密码一般是完整权限。第三方登录演示(网易云客户端利用QQ扫码登录)

qq_43372633的博客 3006

pcle接口详解&用途说明

它原来的名称为“3GIO”,由英特尔在2001年提出。pcel x16插槽 用途用于显卡、RAID阵列卡,向下兼容PCIE x1/x4/x8/x16。(PCIE x16插槽长89mm,有164根针脚,靠主板外侧端有一卡口,将16x分为前后两组,短插槽有22根针脚,主要用于供电,长插槽142根,主要用于数据传输,具有16通道所带来的高带宽)PCI-E x8插槽插槽用途:全长56mm,有98根针脚,与PCI-E x16比较,主要是数据针脚减少至76根,短的供电针脚仍然是22针脚。

qq_43289307的博客 1万+

Spring Security- 环境搭建与第一个入门案例实现

本文介绍了Spring Security框架的基本概念和功能,并详细讲解了如何从零开始搭建开发环境。主要内容包括: Spring Security概述:一个功能强大的认证授权框架,提供身份验证、访问控制、Web安全防护等功能,采用过滤器链设计模式。 环境准备:需要JDK8+、构建工具(Maven/Gradle)和IDE,推荐使用Spring Boot 2.7.x版本。 依赖配置:提供了Maven和Gradle两种构建工具的详细依赖配置,包括Spring Boot Web、Security核心模块以及Thym

千淘万漉虽辛苦,吹尽狂沙始到金 1万+

从代码学习深度强化学习 - 目标导向的强化学习-HER算法 PyTorch版

经典的深度强化学习算法,如 PPO、SAC 等,在各自擅长的任务中都取得了非常好的效果。但它们通常都局限在解决单个任务上,换句话说,训练好的算法,在运行时也只能完成一个特定的任务。想象一个场景:我们想让一个机械臂能把桌子上的任何一个物体重置到任意一个指定位置。对于传统强化学习而言,如果目标物体的初始位置和目标位置每次都变化,那么这就是一个全新的任务。即便任务的“格式”——抓取并移动——是一样的,但策略本身可能需要重新训练。这显然效率极低。为了解决这类问题,

weixin_43887510的博客 1504

esp8266步进电机驱动控制

blinker控制步进电机起保停,正反转(Arduino uno+esp8266+TB6600驱动器) Arduino uno的板子的程序 esp8266板子接入到Arduino uno的控制引脚上的5,6,7 esp8266程序 //****库***** #define BLINKER_WIFI //官方wifi协议库 #define BLINKER_PRINT Serial //串口协议库 #include <Blinker.h&gt

perseverance51博客 2856

SpringBoot实战:整合Spring Security、JWT与Redis构建企业级认证系统

在现代Web应用开发中,用户认证与授权是保障系统安全的核心机制。其原理是通过验证用户身份并控制资源访问权限,确保数据安全与业务合规。JWT(JSON Web Token)作为一种无状态令牌技术,通过数字签名实现安全的身份凭证传递,有效解决了分布式系统中的会话管理难题。结合Redis高性能缓存,可以进一步提升系统响应速度并实现令牌黑名单等高级功能。这种技术组合在电商、社交、企业后台等需要严格权限控制的场景中具有广泛应用价值。本文以SpringBoot框架为基础,通过整合Spring Security、JWT和

weixin_30482383的博客 444

VMware报错系列:虚拟机配置文件(.vmx)损坏或丢失---修复

虚拟机配置文件(.vmx)损坏或丢失---修复

weixin_54626591的博客 7014

Spring Security入门实战:从零构建Java Web应用安全防线

身份认证与访问控制是保障Web应用安全的核心机制,其原理在于验证用户身份并依据权限控制资源访问。在Java生态中,Spring Security作为主流安全框架,通过封装密码加密、会话管理和CSRF防护等复杂逻辑,显著提升了开发效率与系统安全性。该框架遵循“约定大于配置”理念,提供默认安全配置,同时支持深度定制,适用于从简单登录到OAuth 2.0集成等多种场景。本文聚焦于Spring Security的实战应用,通过配置SecurityFilterChain与实现自定义登录页面,演示如何快速为Spring

weixin_33843409的博客 384

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

上一篇: org.springframework.transaction.CannotCreateTransactionException: Could not open JDBC Connection f
下一篇: java.sql.SQLTransientConnectionException: HikariPool-1 - Connection is not available, request time
Java廖志伟
博客等级 码龄2年 3609粉丝 1517原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值