SpringSecurity——如何获取当前登录用户的信息
目录
1. 直接注入 Principal
2. 直接注入 Authentication
3. 注入 UsernamePasswordAuthenticationToken
4. 通过 SecurityContextHolder 获取
5. 使用自定义工具方法
总结
如何获取更多的用户信息
自定义用户实体类
如何忽略某些字段(不返回前端)以及规范日期格式
登录成功后的处理:
在 Spring Security 中,当前登录用户的信息实际上都存储在与当前线程绑定的 SecurityContext 中,里面保存了一个 Authentication 对象。你展示的这几种写法,其实都是不同的方式来获取这个 Authentication 对象或者从中提取出用户信息。下面详细说明每种方式的原理和适用场景:
1. 直接注入 Principal
@GetMapping("/welcome")
@ResponseBody
public Object toLoginInfo(Principal principal){return principal;
}
说明:
当你在 Controller 方法中直接声明一个 Principal
类型的参数时,Spring Security 会自动注入当前登录用户对应的 Principal
对象。通常,Principal
只包含最基本的用户标识(例如用户名),但如果需要更多信息,就需要使用 Authentication
。
2. 直接注入 Authentication
@GetMapping("/welcome2")
@ResponseBody
public Object toLoginInfo2(Authentication authentication) {return authentication;
}
说明:
Authentication
接口继承自 Principal
,除了包含用户名外,还包含了用户的权限信息(Authorities)、认证凭证(Credentials)、认证状态等。直接注入 Authentication
可以获取更丰富的信息,是实际开发中常用的方式之一。
3. 注入 UsernamePasswordAuthenticationToken
@GetMapping("/welcome3")
@ResponseBody
public Object toLoginInfo3(UsernamePasswordAuthenticationToken usernamePasswordAuthenticationToken) {return usernamePasswordAuthenticationToken;
}
- 说明:
UsernamePasswordAuthenticationToken
是Authentication
的一个常见实现,通常在基于表单登录时使用。它除了保存用户名和密码,还保存了用户权限等信息。直接注入这种类型的参数,与直接注入Authentication
类似,只是类型更加具体。
4. 通过 SecurityContextHolder
获取
@GetMapping("/welcome4")
@ResponseBody
public Object toLoginInfo4() {return SecurityContextHolder.getContext().getAuthentication();
}
说明:
这种方式是从静态的 SecurityContextHolder
中获取当前线程绑定的 SecurityContext
,再从中取出 Authentication
对象。使用这种方式可以在非 Controller 的地方(例如在业务逻辑或工具类中)获取当前登录用户的信息。
5. 使用自定义工具方法
@GetMapping("/welcome5")
@ResponseBody
public Object toLoginInfo5() {return LoginInfoUtil.getCurrentLoginUser();
}
说明:
这是一个对上面几种方式的封装,通常会在项目中封装一个工具类(如 LoginInfoUtil
),内部封装对 SecurityContextHolder
的调用或者其他逻辑处理,返回一个更为友好的用户信息对象。这样做有利于集中管理和统一用户信息的获取逻辑。
LoginInfoUtil:
public class LoginInfoUtil {/*** 获取当前登录用户信息* @return*/public static TUser getCurrentLoginUser() {return (TUser) SecurityContextHolder.getContext().getAuthentication().getPrincipal();}
}
总结
-
统一存储:
Spring Security 将当前认证信息统一保存在SecurityContext
中,通过SecurityContextHolder
实现线程级别的绑定。 -
多种方式:
你可以直接通过方法参数(如Principal
、Authentication
或更具体的认证类)来获取,也可以在任意位置通过SecurityContextHolder.getContext().getAuthentication()
获取。这些方式本质上都是获取同一个对象,只是使用方式不同。 -
扩展与封装:
如果在项目中经常需要获取当前用户信息,可以封装一个工具类,方便调用和后续扩展。
Authentication
继承自 Principal
,这意味着它不仅包含基本的身份信息,还扩展了额外的认证细节。
UsernamePasswordAuthenticationToken
是 Authentication
接口的一个具体实现,专门用于用户名和密码认证的场景。
在实际认证流程中,通常会通过 UsernamePasswordAuthenticationToken
来封装用户提交的认证信息,并在认证成功后返回一个完整的认证对象。
如何获取更多的用户信息
实体类实现UserDetails接口,实现UserDetails的7个接口,这样,你既可以保留 Spring Security 要求的七个方法,又可以在实体类中扩展其他的业务属性。
自定义用户实体类
扩展业务属性:
在你的用户实体类中,可以添加额外的属性,例如真实姓名、邮箱、电话等等。
实现 UserDetails 接口的七个方法:
-
getAuthorities():
返回用户拥有的权限(或角色),通常是一个包含 GrantedAuthority 对象的集合。 -
getPassword():
返回用户的密码,用于身份验证。 -
getUsername():
返回用户名。 -
isAccountNonExpired():
表示用户账户是否未过期。返回 true 表示账户有效,未过期。 -
isAccountNonLocked():
表示用户账户是否未被锁定。返回 true 表示账户未被锁定。 -
isCredentialsNonExpired():
表示用户的凭证(密码)是否未过期。 -
isEnabled():
表示用户账户是否可用(启用状态)。
之后由于之前是返回UserDetails的实现类User,此时由于我们有自定义的实现类TUser,因此我们可以直接返回了,不需要使用框架的User类了。
@Overridepublic UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {// 通过用户名查询数据库TUser user = userMapper.selectByLoginAct(username);if (user == null){throw new UsernameNotFoundException("用户不存在");}return user; // 实现了UserDetails接口,包含所有字段// // 返回框架User(UserDetails的实现类)但是使用UserDetails接收
// return User.builder()
// .username(user.getLoginAct())
// .password(user.getLoginPwd())
// .authorities(AuthorityUtils.NO_AUTHORITIES) // 没有权限(权限管理部分)
// .build(); // 把UserDetails(User)返回给框架之后,框架会采用密码加密器进行密码的比较}
如何忽略某些字段(不返回前端)以及规范日期格式
使用
@JsonIgnore // 表示该字段不返回给前端
如果实体类当中日期类较多,每一个字段加上规范会很麻烦,因此一般会在application.yml当中配置Jackson的转换方式:
spring:application:name: Security-04-login-info# jackson配置 时间格式(使用指定的时区和格式)jackson:time-zone: GMT+8date-format: yyyy-MM-dd HH:mm:ss
登录成功后的处理:
@Bean// 安全过滤器链Beanpublic SecurityFilterChain securityFilterChain(HttpSecurity httpSecurity) throws Exception { //httpSecurity方法参数注入Beanreturn httpSecurity// 配置自己的登录页面.formLogin( (formLogin) ->{formLogin.loginProcessingUrl("/login") // 登录账户密码往哪个地址提交.loginPage("/toLogin")// 定制登录页面.successForwardUrl("/welcome"); // 登录成功之后,跳转到哪个页面,默认是跳转到之前的页面}).authorizeHttpRequests((authorizeHttpRequests)->{authorizeHttpRequests.requestMatchers("/toLogin","/common/captcha").permitAll() // 特殊情况,toLogin不需要登录就可以访问, 验证码不需要登录就可以访问.anyRequest().authenticated(); // 除了上述特殊情况之外,其他任何请求都需要认证之后才能访问}).addFilterBefore(captchaFilter, UsernamePasswordAuthenticationFilter.class).build();}
使用 .successForwardUrl("/welcome") 时,Spring Security 在用户登录成功后不会发起新的 HTTP 请求,而是通过内部的请求转发(forward)的方式,将当前请求转发到指定的 URL(即 "/welcome")。这意味着:
- 内部转发: 请求在服务器内部进行转发,不会改变浏览器地址栏显示的 URL。
- 请求方法保持不变: 转发过程中,原始的 HTTP 请求方法(例如 POST)会被保留。因此,如果登录请求是 POST,则转发后的 "/welcome" 接口也是 POST 请求。
- 常用于登录成功后的处理: 这种方式适合需要在登录成功后继续处理原始请求数据或者保持请求上下文的场景。
总结来说,.successForwardUrl("/welcome") 用于在认证成功后,将请求内部转发到 "/welcome" 接口,从而执行相应的处理逻辑,而不是向浏览器发起新的请求。
相关文章:
SpringSecurity——如何获取当前登录用户的信息
目录 1. 直接注入 Principal 2. 直接注入 Authentication 3. 注入 UsernamePasswordAuthenticationToken 4. 通过 SecurityContextHolder 获取 5. 使用自定义工具方法 总结 如何获取更多的用户信息 自定义用户实体类 如何忽略某些字段(不返回前端ÿ…...
ospf动态路由
一、为什么使用动态路由 OSPF(open shortest path first开放最短路径优先)是内部网关协议(IGP)的一种,基于链路状态算法(LS)。 OSPF企业级路由协议(RFC2328 OSPFv2),核心重点协议 OSPF共三个版本,OSPFV1主要是实验室…...
在react当中利用IntersectionObserve实现下拉加载数据
目录 一、传统的下拉加载方案 二、存在问题 1.性能较差 2.不够精确 三、IntersectionObserve版本下拉加载 1、callback 2、options 四、IntersectionObserver实例 1、Intersection的优势 2、实现思路 3、代码实现 在进行前端开发的过程中,常常会碰到下拉…...
SpringBoot之如何集成SpringDoc最详细文档
文章目录 一、概念解释1、OpenAPI2、Swagger3、Springfox4、Springdoc5. 关系与区别 二、SpringDoc基本使用1、导包2、正常编写代码,不需要任何注解3、运行后访问下面的链接即可 三、SpringDoc进阶使用1、配置文档信息2、配置文档分组3、springdoc的配置参数**1. 基…...
Transaction rolled back because it has been marked as rollback-only问题解决
transaction rolled back because it has been marked as rollback-only 简略总结> 发生场景:try-catch多业务场景 发生原因:业务嵌套,事务管理混乱,外层业务与内层业务抛出异常节点与回滚节点不一致。 解决方式:修…...
单片机写的小液晶屏驱动+汉字滚屏
单片机写的小液晶屏驱动汉字滚屏 stm32f401freertos内置HZK16 单片机汉字滚屏...
SpringBoot整合LangChain4j操作AI大模型实战详解
一、引言 在当今这个人工智能飞速发展的时代,AI大模型已经逐渐渗透到我们生活的方方面面,为企业和开发者带来了前所未有的机遇。然而,如何高效地接入并利用这些AI大模型,成为了摆在许多开发者面前的一道难题。SpringBoot作为一款…...
深度解析 | Android 13 Launcher3分页指示器改造:横线变圆点实战指南
一、需求背景与技术挑战 在Android 13系统定制开发中,我们面临将Launcher3桌面从传统双层架构优化为现代单层布局的挑战。原生系统采用的分页横线指示器在视觉呈现上存在两点不足: 风格陈旧不符合Material You设计规范 空间占用较大影响屏幕利用率 通…...
【Qt】private槽函数可以被其他类中的信号连接
private槽函数可以被其他类中的信号连接。 即使 B 类的槽函数是 private 的,A 类通过信号连接 B 类的槽函数也没有问题。这是因为 Qt 的信号和槽机制是通过元对象系统(Meta-Object System)实现的,而不是直接调用函数。只要信号和…...
C语言每日一练——day_7
引言 针对初学者,每日练习几个题,快速上手C语言。第七天。(连续更新中) 采用在线OJ的形式 什么是在线OJ? 在线判题系统(英语:Online Judge,缩写OJ)是一种在编程竞赛中用…...
Python --**kwargs
在 Python 中,**kwargs 是一个特殊语法,用于在函数定义中接收任意数量的关键字参数(即键值对参数),并将这些参数以字典形式存储。它是 Python 中处理动态参数的强大工具,适用于需要灵活传递参数的场景。 1.…...
网络编程之客户端通过服务器与另外一个客户端交流
服务器使用select模型搭建,客户端1使用线程搭建,客户端2使用poll模型搭建, 使用时需要先运行服务器,具体编译可看我最后的图片 head.h头文件 #ifndef __HEAD_H_ #define __HEAD_H_ #include <stdio.h> #include <string…...
mybatis集合映射association与collection
官方文档:MyBatis的一对多关联关系 一、用途 一对一:association 一对多:collection 二、association 比较容易理解,可参考官方文档 三、collection <?xml version"1.0" encoding"UTF-8"?> &l…...
windows克隆项目找不到,修改git bash中存储的账号密码
git clone项目找不到,提示:remote: The project you were looking for could not be found. 有可能是地址错误、没有权限、账号密码错误 1.地址错误 从新检查git地址,确保地址是正确的。 2.没有权限 确保你有访问该项目的权限 3.账号密码…...
Linux中安装redis
Redis的安装包,从官方下载下来的是c语言的源码包,我们需要自己编译安装。具体操作步骤如下: 安装redis 上传redis资源包 安装C语言的编译环境 gcc yum install -y gcc-c 解压redis源码在当前目录 tar -zxvf redis-6.2.4.tar.gz 进入解压目录…...
Springboot项目打包成war包
1、首先创建一个springboot工程,然后我们改造启动类如: import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuil…...
Word:双栏排版操作步骤及注意事项
将word单栏文字排版为双栏是论文投稿前的重要步骤,也是非常容易出错的一步。但事实上排版的操作并不复杂,本篇博客旨在把操作过程及注意事项简单记录下来,便于日后浏览和查询。 【Step1】打开“显示/隐藏段落标记” (ctrl*&#…...
ArcGIS10. 8简介与安装,附下载地址
目录 ArcGIS10.8 1. 概述 2. 组成与功能 3. 10.8 特性 下载链接 安装步骤 1. 安装准备 2. 具体步骤 3.补丁 其他版本安装 ArcGIS10.8 1. 概述 ArcGIS 10.8 是由美国 Esri 公司精心研发的一款功能强大的地理信息系统(GIS)平台。其核心功能在于…...
MySQL:数据库基础
数据库基础 1.什么是数据库?2.为什么要学习数据库?3.主流的数据库(了解)4.服务器,数据库,表之间的关系5.数据的逻辑存储6.MYSQL架构7.存储引擎 1.什么是数据库? 数据库(Database,简称DB)&#x…...
数据结构-----初始数据结构、及GDB调试
一、数据结构核心概念 相互之间存在一种或多种特定关系的数据元素的集合。 1. 数据结构定义 // 嵌入式场景示例:传感器网络节点结构 struct SensorNode {uint16_t node_id; // 2字节float temperature; // 4字节uint32_t timestamp; // 4字节struct Se…...
go面向对象编程三大特性,封装、继承和多态
1.简介 go具有面向对象编程的封装、继承和多态的特性,只是实现的方式和其它OOP语言不一样,下面看下go的三大特性是如何实现的。 2.封装 2.1基本介绍 封装就是把抽象出的字段和对字段的操作封装在一起,数据被保护在内部,程序的其它包只能通过被授权的操作(方法),才能…...
华为ISC+战略规划项目数字化转型驱动的智慧供应链革新(169页PPT)(文末有下载方式)
资料解读:华为ISC战略规划项目数字化转型驱动的智慧供应链革新 详细资料请看本解读文章的最后内容。 华为的ISC战略规划项目是其供应链数字化转型的核心,旨在通过智慧供应链的革新,提升企业的竞争力和运营效率。本文将从多个维度详细解读这…...
算法刷题记录——LeetCode篇(10) [第901~1000题](持续更新)
(优先整理热门100及面试150,不定期持续更新,欢迎关注) 994. 腐烂的橘子 在给定的 m x n 网格 grid 中,每个单元格可以有以下三个值之一: 值 0 代表空单元格;值 1 代表新鲜橘子;值 2 代表腐烂的橘子。 每…...
Python中的字典:深度解析与应用实践
一、字典的本质与特性 Python字典(Dictionary)是以**键值对(Key-Value Pair)**形式存储数据的无序集合,使用大括号{}定义。其核心特性包括: 快速查找:基于哈希表实现,通过键&#…...
jmeter配件元素
jmeter配件元素 CSV Data Set Config名词解释测试场景Recycle on EOF:False配置测试结果 Recycle on EOF:True配置测试结果 Sharing mode:All Threads配置测试结果 Sharing mode:Current thread group配置测试结果 Sharing mode:Current thread配置测试结果 HTTP Header Manage…...
VSCode + CMake
参考文献: 如何用 GCC, CMake 和 Make 编译C/C代码Windows 上的 Linux 子系统:WSLWSL:桌面 UI 远程连接 RDP 配置 VScode 文章目录 CMake 配置VSCode 配置launch.jsontask.jsonc_cpp_properties.json CMake 配置 编写如下的 CmakeLists.t…...
JVM的一些知识
JVM简介 JVM 是 Java Virtual Machine 的简称,意为 Java 虚拟机。 虚拟机是指通过软件模拟的具有完整硬件功能的、运行在一个完全隔离的环境中的完整计算机系统。常见的虚拟机:JVM、VMwave、Virtual Box。 JVM 和其他两个虚拟机的区别: VMw…...
SpringCloud网关:Gateway路由配置与过滤器链
文章目录 引言一、Gateway基本架构二、路由配置方式2.1 配置文件方式2.2 Java代码方式 三、内置断言工厂四、内置过滤器工厂4.1 请求路径相关过滤器4.2 请求和响应头过滤器4.3 功能性过滤器 五、自定义过滤器5.1 自定义GatewayFilter5.2 自定义过滤器工厂 六、全局过滤器总结 引…...
Git 分支使用规范全解(多人协作开发适用)
🚀 Git 分支使用规范全解(多人协作开发适用) 本文将为你梳理一套清晰、标准、适合企业/团队使用的 Git 分支管理策略,适用于前后端、边缘端、AI项目等多种场景。 🧩 为什么要规范分支管理? 防止多人协作混乱、冲突频发清晰区分:开发中 / 待发布 / 已上线 的版本快速定…...
【华三】路由器交换机忘记登入密码或super密码的重启操作
【华三】路由器交换机忘记登入密码或super密码的重启操作 背景步骤跳过认证设备:路由器重启设备翻译说明具体操作 跳过当前系统配置重启设备具体操作 背景 当console口的密码忘记,或者说本地用户的密码忘记,其实这时候是登入不了路由器的&am…...
Linux驱动开发进阶 - 文件系统
文章目录 1、前言2、学习目标3、VFS虚拟文件系统3.1、超级块(Super Block)3.2、dentry3.3、inode3.4、file 4、文件系统的挂载5、文件系统的注册5.1、文件系统的注册过程5.1.2、定义文件系统类型5.1.3、注册文件系统5.1.4、注销文件系统 5.2、文件系统的…...
Mac:JMeter 下载+安装+环境配置(图文详细讲解)
📌 下载JMeter 下载地址:https://jmeter.apache.org/download_jmeter.cgi 📌 无需安装 Apache官网下载 JMeter 压缩包,无需安装,下载解压后放到自己指定目录下即可。 按我自己的习惯,我会在用户 jane 目…...
蓝桥杯备考:图论之Prim算法
嗯。通过我们前面的学习,我们知道了,一个具有n个顶点的连通图,它的生成树包括n-1个边,如果边多一条就会变成图,少一条就不连通了 接下来我们来学一下把图变成生成树的一个算法 Prim算法,我们从任意一个结…...
Linux 文件操作-标准IO函数3- fread读取、fwrite写入、 fprintf向文件写入格式化数据、fscanf逐行读取格式化数据的验证
目录 1. fread 从文件中读取数据 1.1 读取次数 每次读取字节数 < 原内容字节数 1.2 读取次数 每次读取字节数 > 原内容字节数 2.fwrite 向文件中写入数据 2.1写入字符串验证 2.2写入结构体验证 3. fprintf 将数据写入到指定文件 4. fscanf 从文件中逐行读取内容…...
汽车一键启动系统使用方便,舒适出行,轻松匹配
汽车一键启动系统 系统定义 移动管家汽车一键启动系统是装置在智能汽车上的一部分,是实现简约打火和熄火过程的一个按钮装置。它可以在原车钥匙锁头的位置改装,也能独立面板改装,现在很多高低配置的车辆都可安装。 功能特点 基本功能 启…...
python函数的多种参数使用形式
目录 1. 位置参数(Positional Arguments) 2. 关键字参数(Keyword Arguments) 3. 默认参数(Default Arguments) 4. 可变参数(Variable Positional Arguments) 5. 关键字可变参数&…...
Qt带参数的信号和槽,以及信号与槽的连接方式
1.带参数的信号和槽 Qt的信号与槽也支持带有参数,同时也可以支持重载 此处我们要求,信号函数的参数列表要和对应连接的槽函数参数列表一致 此时信号触发,调用到槽函数的时候,信号函数中的实参就能够被传递到槽函数的形参中 示例…...
深度解析ECharts.js:构建现代化数据可视化的利器
引言:数据可视化的新时代挑战 在数字化转型浪潮中,数据可视化已成为企业决策和用户体验的关键环节。面对海量数据的呈现需求,传统表格已无法满足用户对直观洞察的渴求。作为百度开源的JavaScript可视化库,ECharts.js凭借其强大的…...
Flutter:页面滚动,导航栏背景颜色过渡动画
记录:导航默认透明,页面发生滚动后,导航背景色由0-1,过渡到白色背景。 view import package:ducafe_ui_core/ducafe_ui_core.dart; import package:flutter/material.dart; import package:get/get.dart; import package:redo…...
一文了解ThreadLocal
什么是ThreadLocal? ThreadLocal是每个线程私有的,线程可以把自己的私有数据放到ThreadLocal里面,不用担心其他线程访问到自己ThreadLocal。 通过set()方法将值存入ThreadLocal或者修改值,get()方法取出值,remove()方…...
日常学习开发记录-input组件
实现 1.实现2.inline-table和table-cell实现2.1 表格布局的特性2.2 示例 3.clear清除事件未生效3.1 原因3.2 解决 4. 增加type为text和textarea4.1 rows,autosize的实现 5.拓展-composition事件 1.实现 <template><div class"my-input":class"{is-dis…...
【数据库系统原理】简答题
真题 2024-10 31.数据模型的三大要素是什么? 32.简述关系模型的参照完整性规则。 33.什么是视图?视图的作用是什么? 34.简述两个实体型之间联系的三种形式,并举例说明。 35.什么是数据库备份?MySQL使用什么语句实现备份与恢复数据库中表的数据? 2024-04 31.请解释数据…...
20250319在荣品的PRO-RK3566开发板的buildroot系统下使用集成的QT应用调试串口UART3
stty -F /dev/ttyS3 115200 -echo cat /dev/ttyS3 & echo serialdata > /dev/ttyS3 20250319在荣品的PRO-RK3566开发板的buildroot系统下使用集成的QT应用调试串口UART3 2025/3/19 14:17 缘起:在荣品的PRO-RK3566开发板的buildroot系统下,在命令…...
C#基于MVC模式实现TCP三次握手,附带简易日志管理模块
C#基于MVC模式实现TCP三次握手 1 Model1.1 ServerModel1.2 ClientModel1.3 配置参数模块1.4 日志管理模块1.4.1 数据结构1.4.1 日志管理工具类1.4.1 日志视图展示1.4.1.1 UcLogManage.cs1.4.1.2 UcLogManage.Designer.cs 2 视图(View)2.1 ViewServer2.1.…...
大语言模型的多垂类快速评估与 A/B 测试
简介 行业领先的模型构建企业携手澳鹏(Appen)开展了一项极具挑战性的项目。针对 3 至 6 个大型语言模型(LLM),在广泛的通用领域及复杂专业领域(如医疗保健、法律、金融、编程、数学和汽车行业等࿰…...
一个成功的Git分支模型
本作品原发布账号为【白鸽子中文网】,现转至当前账号【飞翔中文网】。 反思备录(2020/3/5) 这个模型构思于2010年,现已过去10余年,(2010年)那时正处于Git诞生后不久。在这10年间,git-flow(本文中提到的分支模型) 在许多软件队伍里…...
MySQL 在 CentOS 7 上安装的步骤指南
🏝️专栏:Mysql_猫咪-9527的博客-CSDN博客 🌅主页:猫咪-9527-CSDN博客 “欲穷千里目,更上一层楼。会当凌绝顶,一览众山小。” 目录 1. 卸载不需要的环境 2. 获取 MySQL YUM 仓库 3. 安装 MySQL 4. 启动…...
DeepSeek-R1深度解读
deepseek提出了一种通过强化学习(RL)激励大语言模型(LLMs)推理能力的方法,个人认为最让人兴奋的点是:通过RL发现了一个叫“Aha Moment”的现象,这个时刻发生在模型的中间版本中。在这个阶段&…...
吴恩达机器学习笔记复盘(六)梯度下降算法
简介 梯度下降(Gradient Descent)是一种常用的优化算法,广泛应用于机器学习、深度学习等领域,在这里是用于求J(w,b)局部最小值。 我自己觉得这样说有点过于抽象。换个直观点的说法就是,一个人…...
【环境配置】windows下vscode下无法激活conda环境、创建虚拟环境报错
前言 我的本地的系统,绝大部分是使用的ubuntu。去年下半年开始切换成windows,然后windows下使用vscode还需要注意一些小的配置。为了避免反复搜索,这里记录下。 当已经在 windows 下安装了anaconda、vscode,之后的使用有可能存…...