当前位置: 首页 > news >正文

Java Web开发实战与项目——用户认证与授权模块开发

Web应用中,用户认证与授权是至关重要的功能,确保只有合法用户才能访问受保护的资源。Spring Security作为一个强大的安全框架,支持多种认证与授权方式。在本章节中,我们将深入探讨三种常见的用户认证与授权方案:基于Token的用户认证(JWT)、OAuth2认证与授权,以及使用Spring Security与OAuth2实现社交登录。


1. 实现基于Token的用户认证(JWT)
1.1 什么是JWT

JWT(JSON Web Token)是一种基于Token的认证机制,广泛应用于分布式系统中。它通常由三部分组成:

  • Header:通常包含Token类型和加密算法的信息。
  • Payload:包含用户的身份信息及相关的元数据(如角色)。
  • Signature:用于验证JWT的真实性,通常使用秘钥进行加密。

JWT的优势在于它是无状态的,也就是说,服务器不需要存储会话信息,所有信息都包含在JWT中。这使得它非常适用于微服务架构和分布式系统。

1.2 JWT认证流程
  1. 用户登录时,提交用户名和密码。
  2. 服务器验证用户信息,通过验证后生成JWT。
  3. 将JWT返回给客户端,客户端保存Token。
  4. 客户端在后续请求中,将Token附加在HTTP请求的Authorization头部中,服务器通过解密Token来验证用户身份。
1.3 使用Spring Boot实现JWT认证
  1. 添加依赖

pom.xml中添加JWT相关依赖:

<dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.11.5</version>
</dependency>

生成JWT的工具类

创建一个JWT生成工具类,用于生成和解析JWT。

@Component
public class JwtTokenUtil {private String secretKey = "secret";  // 秘钥,应该放在配置文件中private long expirationTime = 86400000L;  // 过期时间,24小时// 生成JWTpublic String generateToken(String username) {Date now = new Date();Date expiryDate = new Date(now.getTime() + expirationTime);return Jwts.builder().setSubject(username).setIssuedAt(now).setExpiration(expiryDate).signWith(SignatureAlgorithm.HS512, secretKey).compact();}// 从JWT中解析出用户名public String getUsernameFromToken(String token) {return Jwts.parser().setSigningKey(secretKey).parseClaimsJws(token).getBody().getSubject();}// 验证JWT是否有效public boolean validateToken(String token, String username) {String parsedUsername = getUsernameFromToken(token);return (parsedUsername.equals(username) && !isTokenExpired(token));}// 判断JWT是否过期private boolean isTokenExpired(String token) {Date expiration = Jwts.parser().setSigningKey(secretKey).parseClaimsJws(token).getBody().getExpiration();return expiration.before(new Date());}
}

认证过滤器

创建一个过滤器,用于在每个请求中验证JWT。

@Component
public class JwtAuthenticationFilter extends OncePerRequestFilter {@Autowiredprivate JwtTokenUtil jwtTokenUtil;@Overrideprotected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)throws ServletException, IOException {String token = request.getHeader("Authorization");if (token != null && token.startsWith("Bearer ")) {token = token.substring(7);String username = jwtTokenUtil.getUsernameFromToken(token);if (username != null && SecurityContextHolder.getContext().getAuthentication() == null) {UsernamePasswordAuthenticationToken authentication =new UsernamePasswordAuthenticationToken(username, null, new ArrayList<>());SecurityContextHolder.getContext().setAuthentication(authentication);}}filterChain.doFilter(request, response);}
}

​​​​​​​用户认证与生成Token

在用户登录时,生成JWT并返回给客户端。

@RestController
public class AuthController {@Autowiredprivate JwtTokenUtil jwtTokenUtil;@PostMapping("/login")public ResponseEntity<?> createAuthenticationToken(@RequestBody AuthenticationRequest authenticationRequest) {// 验证用户身份if ("user".equals(authenticationRequest.getUsername()) && "password".equals(authenticationRequest.getPassword())) {String token = jwtTokenUtil.generateToken(authenticationRequest.getUsername());return ResponseEntity.ok(new AuthenticationResponse(token));}return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("Invalid credentials");}
}
1.4 保护资源

在需要保护的资源上使用@PreAuthorize@Secured注解来进行权限控制。

@RestController
@RequestMapping("/admin")
public class AdminController {@GetMapping("/dashboard")@PreAuthorize("hasRole('ADMIN')")public String getAdminDashboard() {return "Admin Dashboard";}
}

2. 配置OAuth2认证与授权
2.1 什么是OAuth2

OAuth2是一个授权框架,用于让第三方应用访问用户资源而无需暴露用户的用户名和密码。OAuth2通过授权码密码客户端凭证等不同方式来获取Token,常见的应用场景包括社交登录和API访问。

2.2 配置OAuth2认证

在Spring Boot中,OAuth2认证可以通过spring-security-oauth2-clientspring-security-oauth2-jose等库来配置。

​​​​​​​添加依赖

pom.xml中添加OAuth2的相关依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>

​​​​​​​配置application.yml

application.yml中配置OAuth2客户端信息,如以下示例配置Google OAuth2登录:

spring:security:oauth2:client:registration:google:client-id: YOUR_GOOGLE_CLIENT_IDclient-secret: YOUR_GOOGLE_CLIENT_SECRETscope:- profile- emailredirect-uri: "{baseUrl}/login/oauth2/code/{registrationId}"authorization-grant-type: authorization_codeclient-name: Googleprovider:google:authorization-uri: https://accounts.google.com/o/oauth2/authtoken-uri: https://oauth2.googleapis.com/tokenuser-info-uri: https://www.googleapis.com/oauth2/v3/userinfo

​​​​​​​OAuth2登录处理

Spring Boot自动处理OAuth2登录过程。您只需配置相关的OAuth2提供商(如Google、GitHub等),并在应用中使用@EnableOAuth2Sso注解来开启社交登录。

@SpringBootApplication
@EnableOAuth2Sso
public class OAuth2Application {public static void main(String[] args) {SpringApplication.run(OAuth2Application.class, args);}
}

3. 使用Spring Security与OAuth2实现社交登录
3.1 社交登录简介

社交登录(Social Login)是指通过已有的社交媒体账户(如Google、Facebook、GitHub等)进行身份验证的方式。通过OAuth2协议,用户无需在每个应用中注册单独的账户,只需使用现有的社交账户登录。

3.2 配置社交登录

​​​​​​​配置第三方OAuth2登录

以GitHub为例,在application.yml中配置GitHub OAuth2客户端:

spring:security:oauth2:client:registration:github:client-id: YOUR_GITHUB_CLIENT_IDclient-secret: YOUR_GITHUB_CLIENT_SECRETscope: read:userredirect-uri: "{baseUrl}/login/oauth2/code/{registrationId}"authorization-grant-type: authorization_codeclient-name: GitHubprovider:github:authorization-uri: https://github.com/login/oauth/authorizetoken-uri: https://github.com/login/oauth/access_tokenuser-info-uri: https://api.github.com/user

​​​​​​​自定义用户信息

OAuth2UserService中,您可以自定义如何从OAuth2提供商获取用户信息。

@Service
public class CustomOAuth2UserService extends DefaultOAuth2UserService {@Overridepublic OAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2AuthenticationException {OAuth2User user = super.loadUser(userRequest);// 在此可以从user中获取用户信息并存储到数据库return user;}
}

​​​​​​​社交登录成功后的回调处理

使用Spring Security的默认OAuth2登录机制,用户登录成功后会自动跳转到指定的成功页面,您可以在SecurityConfig中自定义成功和失败的处理:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity http) throws Exception {http.oauth2Login().loginPage("/login").successHandler(new OAuth2LoginSuccessHandler()).failureHandler(new OAuth2LoginFailureHandler());}
}
3.3 完成社交登录

通过以上配置,您已经成功集成了OAuth2社交登录,支持用户通过Google、GitHub等社交账户进行登录。


总结

本文详细介绍了基于Token的用户认证(JWT)、OAuth2认证与授权的配置与实现,以及如何使用Spring Security与OAuth2实现社交登录。通过这些技术,我们可以实现灵活且安全的认证与授权机制,并有效地支持分布式应用和微服务架构中的用户管理。

关于作者:

15年互联网开发、带过10-20人的团队,多次帮助公司从0到1完成项目开发,在TX等大厂都工作过。当下为退役状态,写此篇文章属个人爱好。本人开发期间收集了很多开发课程等资料,需要可联系我

相关文章:

Java Web开发实战与项目——用户认证与授权模块开发

Web应用中&#xff0c;用户认证与授权是至关重要的功能&#xff0c;确保只有合法用户才能访问受保护的资源。Spring Security作为一个强大的安全框架&#xff0c;支持多种认证与授权方式。在本章节中&#xff0c;我们将深入探讨三种常见的用户认证与授权方案&#xff1a;基于To…...

蓝桥杯篇---IAP15F2K61S2中断

文章目录 前言简介中断源1.外部中断2.定时器中断3.串口中断4.ADC中断5.PCA中断6.SPI中断7.PWM中断 中断优先级中断相关寄存器1.IE2.IP3.TCON4.SCON 中断使用步骤1.配置中断源2.使能中断3.设置优先级4.编写中断服务程序5.清除中断标志 示例代码&#xff1a;外部中断使用示例代码…...

django连接mysql数据库

1.下载mysqlclient第三方库 2.在settings.py里连接数据库&#xff08;提前建好&#xff09; DATABASES {default: {ENGINE: django.db.backends.mysql,NAME: 学生信息,USER: root,PASSWORD: 999123457,HOST: localhost,POST: 3306,} } 3.在models.py里创建一个类&#xff0…...

Python爬虫TLS

TLS指纹校验原理和绕过 浏览器可以正常访问&#xff0c;但是用requests发送请求失败。 后端是如何监测得呢&#xff1f;为什么浏览器可以返回结果&#xff0c;而requests模块不行呢&#xff1f; https://cn.investing.com/equities/amazon-com-inc-historical-data 1.指纹校…...

Docker 部署 MySQL 8 详细图文教程

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall ︱vue3-element-admin︱youlai-boot︱vue-uniapp-template &#x1f33a; 仓库主页&#xff1a; GitCode︱ Gitee ︱ Github &#x1f496; 欢迎点赞 &#x1f44d; 收藏 ⭐评论 …...

基于Python的Diango旅游数据分析推荐系统设计与实现+毕业论文(15000字)

基于Python的Diango旅游数据分析推荐系系统设计与实现毕业论文指导搭建视频&#xff0c;带爬虫 配套论文1w5字 可定制到某个省份&#xff0c;加40 基于用户的协同过滤算法 有后台管理 2w多数据集 可配套指导搭建视频&#xff0c;加20 旅游数据分析推荐系统采用了Python语…...

网络安全java练习平台 js网络安全

&#x1f345; 点击文末小卡片 &#xff0c;免费获取网络安全全套资料&#xff0c;资料在手&#xff0c;涨薪更快 网上学习资料一大堆&#xff0c;但如果学到的知识不成体系&#xff0c;遇到问题时只是浅尝辄止&#xff0c;不再深入研究&#xff0c;那么很难做到真正的技术提升…...

在做题中学习(90):螺旋矩阵II

解法&#xff1a;模拟 思路&#xff1a;创建相同大小的一个二维数组&#xff08;矩阵&#xff09;&#xff0c;用变量标记原矩阵的行数和列数&#xff0c;每次遍历完一行或一列&#xff0c;相应行/列数--&#xff0c;进行对应位置的赋值即可。此题是正方形矩阵&#xff0c;因此…...

Educational Codeforces Round 174 (Rated for Div. 2)(ABCD)

A. Was there an Array? 翻译&#xff1a; 对于整数数组 ​&#xff0c;我们将其相等特征定义为数组 &#xff0c;其中&#xff0c;如果数组 a 的第 i 个元素等于其两个相邻元素&#xff0c;则 &#xff1b;如果数组 a 的第 i 个元素不等于其至少一个相邻元素&#xff0c;则 …...

qemu启动aarch64 linux+ buildroot + 应用程序

1、Linux内核网址 https://www.kernel.org/ 2、安装依赖 sudo apt update sudo apt install -y build-essential qemu qemu-system gcc make bc flex bison libssl-dev libncurses5-dev libelf-dev 3、拉取kernel代码和编译kernel git clone --depth 1 https://git.ker…...

Sponge VS Spring:新兴力量与行业标准的碰撞

框架特性对比 特性SpongeSpring编程语言Go (Golang)Java设计范式低代码, 代码生成, 模块化IoC (控制反转), DI (依赖注入), AOP (面向切面编程)性能高性能, 执行速度快, 并发性好成熟的性能, 需要 JVM 调优, 启动时间可能较长成熟度与稳定性较新, 快速发展中非常成熟, 行业标准…...

推荐几款较好的开源成熟框架

一. 若依&#xff1a; 1. 官方网站&#xff1a;https://doc.ruoyi.vip/ruoyi/ 2. 若依SpringBootVueElement 的后台管理系统&#xff1a;https://gitee.com/y_project/RuoYi-Vue 3. 若依SpringBootVueElement 的后台管理系统&#xff1a;https://gitee.com/y_project/RuoYi-Cl…...

【分布式】Hadoop完全分布式的搭建(零基础)

Hadoop完全分布式的搭建 环境准备&#xff1a; &#xff08;1&#xff09;VMware Workstation Pro17&#xff08;其他也可&#xff09; &#xff08;2&#xff09;Centos7 &#xff08;3&#xff09;FinalShell &#xff08;一&#xff09;模型机配置 0****&#xff09;安…...

JavaScript 异步编程:Promise 与 await 的关联与使用

在 JavaScript 中&#xff0c;异步编程是处理耗时操作&#xff08;如网络请求、文件读写等&#xff09;的核心机制。Promise 和 await 是两种常用的异步编程工具&#xff0c;它们密切相关&#xff0c;但又有各自的特点和适用场景。本文将深入探讨它们的关联、区别以及如何在实际…...

体验用ai做了个python小游戏

体验用ai做了个python小游戏 写在前面使用的工具2.增加功能1.要求增加视频作为背景。2.我让增加了一个欢迎页面。3.我发现中文显示有问题。4.我提出了背景修改意见&#xff0c;欢迎页面和结束页面背景是视频&#xff0c;游戏页面背景是静态图片。5.提出增加更多游戏元素。 总结…...

golang常用库之-swaggo/swag根据注释生成接口文档

文章目录 golang常用库之-swaggo/swag库根据注释生成接口文档什么是swaggo/swag golang常用库之-swaggo/swag库根据注释生成接口文档 什么是swaggo/swag github&#xff1a;https://github.com/swaggo/swag 参考文档&#xff1a;https://golang.halfiisland.com/community/pk…...

【可实战】Linux 常用统计命令:排序sort、去重uniq、统计wc

在 Linux 系统中&#xff0c;有一些常用的命令可以用来收集和统计数据。 一、常用统计命令的使用场景 日志分析和监控&#xff1a;通过使用 Linux 统计命令&#xff0c;可以实时监控和分析系统日志文件&#xff0c;了解系统的运行状况和性能指标。例如&#xff0c;使用 tail 命…...

【设计模式】【创建型模式】建造者模式(Builder)

&#x1f44b;hi&#xff0c;我不是一名外包公司的员工&#xff0c;也不会偷吃茶水间的零食&#xff0c;我的梦想是能写高端CRUD &#x1f525; 2025本人正在沉淀中… 博客更新速度 &#x1f44d; 欢迎点赞、收藏、关注&#xff0c;跟上我的更新节奏 &#x1f3b5; 当你的天空突…...

UE5.3 C++ 通过Spline样条实现三维连线,自己UV贴图。

一.制作了基于USplineComponent的画线插件&#xff0c;就是我们常说的样条线。 直接看怎么用&#xff0c;关于插件实现细节&#xff0c;后续会更新&#xff0c;看思路就行。通过ID,管理每一条线。移除删掉上一帧的线条Mesh。第一个点&#xff0c;是本身直接放过去。第二个点是…...

每日学习Java之一万个为什么

9.Class <?> class1 Myclass.class 为什么要有通配符&#xff1f;传给谁用的&#xff1f; 首先&#xff0c;这里的class特指某个对象在JVM中的元数据集合。 有普通、接口、数组、基本类型、 void 类型、局部类、匿名类、枚举、注解 1.类型安全&#xff1a;通配符允许…...

4、IP查找工具-Angry IP Scanner

在前序文章中&#xff0c;提到了多种IP查找方法&#xff0c;可能回存在不同场景需要使用不同的查找命令&#xff0c;有些不容易记忆&#xff0c;本文将介绍一个比较优秀的IP查找工具&#xff0c;可以应用在连接树莓派或查找IP的其他场景中。供大家参考。 Angry IP Scanner下载…...

华为昇腾920b服务器部署DeepSeek翻车现场

最近到祸一台HUAWEI Kunpeng 920 5250&#xff0c;先看看配置。之前是部署的讯飞大模型&#xff0c;发现资源利用率太低了。把5台减少到3台&#xff0c;就出了他 硬件配置信息 基本硬件信息 按照惯例先来看看配置。一共3块盘&#xff0c;500G的系统盘&#xff0c; 2块3T固态…...

一周学会Flask3 Python Web开发-http响应状态码

锋哥原创的Flask3 Python Web开发 Flask3视频教程&#xff1a; 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 在Flask程序中&#xff0c;客户端发出的请求触发相应的视图函数&#xff0c;获取返回值会作为响应的主体&#xff0c;最后生成…...

Javascript网页设计实例:通过JS实现上传Markdown转化为脑图并下载脑图

功能预览 深度与密度测试 对于测试部分&#xff0c;分别对深度和密度进行了测试&#xff1a; 注意&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;只实现了识别Markdown中的#代表的层级&#xff0c;所以不能使用其余标识符&#xff0…...

【Spring生命周期】Bean元信息配置阶段

引言 本系列将详细讲解Spring生命周期的13个阶段&#xff0c;从源码角度帮助我们更好的理解Spring框架和bean生命周期全流程 Bean信息定义4种方式 API的方式Xml文件方式properties文件的方式注解的方式 在 Spring 框架中&#xff0c;Bean 元信息配置阶段是整个 Bean 生命周…...

【iOS】SwiftUI状态管理

State ObservedObject StateObject 的使用 import SwiftUIclass CountModel: ObservableObject {Published var count: Int 0 // 通过 Published 标记的变量会触发视图更新init() {print("TimerModel initialized at \(count)")} }struct ContentView: View {State…...

ubuntu上如何查看coredump文件默认保存在哪个路径?

在 Ubuntu 系统中&#xff0c;可以通过以下几种方式来查看 coredump 文件默认保存的路径&#xff1a; 1. 查看core_pattern配置 core_pattern是一个内核参数&#xff0c;它决定了 coredump 文件的保存位置和命名规则。可以通过以下命令查看其当前值&#xff1a; cat /proc/s…...

技术总结汇总

目录 数据库 数据库系统原理 MySQL Redis Java Java 基础 Java 容器 Java 并发 Java 虚拟机 Java I/O 系统设计 系统设计基础 微服务 分布式 集群和负载均衡 灾备和故障转移 限流 降级和熔断 缓存 消息队列 设计模式 DDD领域驱动设计 开发框架和中间件…...

Java-如何将其他地方拉取的jar包导入本地maven环境

背景 公司的一个老旧二开项目&#xff0c;原项目维护方不合作了&#xff0c;提供的项目源码提供给到公司。项目中用到了一些原维护方内部的jar包&#xff0c;导致二开时依赖的这些部分全部报错。虽然在项目中直接导入此jar包可以解决报红报错问题&#xff0c;但是在使用maven打…...

Unity 聊天气泡根据文本内容适配

第一步 拼接UI 1、对气泡图进行九宫图切割 2、设置底图pivot位置和对齐方式 pivot位置&#xff1a;&#xff08;0&#xff0c;1&#xff09; 对齐方式&#xff1a;左上对齐 3、设置文本pivot位置和对齐方式&#xff0c;并挂上布局组件 pivot设置和对齐方式和底图一样&#…...

【组态PLC】基于博图V16和组态王六层双部电梯组态设计【含PLC组态源码 M008期】

控制要求 1&#xff09;两台电梯同时运行时&#xff0c;共同享用一套外呼按钮。 2&#xff09;当两台电梯同时去响应外呼信号时&#xff0c;两台电梯自动定向启动前往相应的楼层&#xff0c;当某一台电梯先行到达指定层楼时&#xff0c;另外一台电梯必须就近停靠平层&#xf…...

Python--数据类型(中)

1. 列表&#xff08;list&#xff09; 1.1 定义与特性 定义&#xff1a;有序、可变的容器&#xff0c;支持多种数据类型混合存储。 user_list ["奥力给", 98, True] empty_list [] # 空列表可变性&#xff1a;列表内部元素可修改&#xff0c;区别于字符串和元组。…...

学习总结2.19

首先就是对dfs和bfs的熟悉&#xff0c;dfs是一种递归函数&#xff0c;通过不断深搜来达到目的&#xff0c;通常用于寻找多少未知量&#xff0c;相较于bfs&#xff0c;编译难度更低一点&#xff1b;bfs多用于寻找最短路径之类&#xff0c;相较于dfs代码多了一部分队列的代码&…...

[Vivado报错] [Runs 36-527] DCP does not exist

一、错误原因解析 此错误表明Vivado在指定路径未找到.dcp&#xff08;Design Checkpoint&#xff09;文件&#xff0c;通常由以下原因导致&#xff1a; 路径过长或特殊字符&#xff1a;Windows系统路径长度限制&#xff08;260字符&#xff09;可能导致文件生成失败&#xff…...

深度学习的集装箱箱号OCR识别技术,识别率99.9%

集装箱箱号OCR识别技术是一项结合计算机视觉和规则校验的复杂任务&#xff0c;以下是其关键要点及实现思路的总结&#xff1a; 1、集装箱号结构&#xff1a;11位字符&#xff0c;格式为公司代码(3字母)和序列号(6数字)以及校验码(1数字)和尺寸/类型代码(可选)&#xff0c;例如…...

基于java新闻管理系统,推荐一款开源cms内容管理系统ruoyi-fast-cms

一、项目概述 1.1 项目背景 在信息高速流通的当下&#xff0c;新闻媒体行业每天都要处理和传播海量信息。传统的新闻管理模式依赖人工操作&#xff0c;在新闻采集、编辑、发布以及后续管理等环节中&#xff0c;不仅效率低下&#xff0c;而且容易出现人为失误。同时&#xff0…...

网络安全要学python 、爬虫吗

网络安全其实并不复杂&#xff0c;只是比普通开发岗位要学习的内容多一点。无论是有过编程基础还是零基础的都可以学习的。网络安全目前可就业的岗位从技术上可分为两部分&#xff1a;web安全和二进制逆向安全。web安全是网络安全的入门方向&#xff0c;内容简单&#xff0c;就…...

ChatGPT行业热门应用提示词案例-AI绘画类

AI 绘画指令是一段用于指导 AI 绘画工具&#xff08;如 DALLE、Midjourney 等&#xff09;生成特定图像的文本描述。它通常包含场景、主体、风格、色彩、氛围等关键信息&#xff0c;帮助 AI 理解创作者的意图&#xff0c;从而生成符合要求的绘画作品。 ChatGPT 拥有海量的知识…...

网络安全钓鱼邮件测试 网络安全 钓鱼

&#x1f345; 点击文末小卡片 &#xff0c;免费获取网络安全全套资料&#xff0c;资料在手&#xff0c;涨薪更快 如今&#xff0c;网络安全是一个备受关注的话题&#xff0c;“网络钓鱼”这个词也被广泛使用。 即使您对病毒、恶意软件或如何在线保护自己一无所知&#xff0c;您…...

写一个python组件

写一个python组件 核心功能代码命令行接口打包配置安装与测试注意 写一个python组件&#xff0c;具体的&#xff1a;项目结构设计&#xff1a;定义你的项目的目录结构。编写核心功能代码&#xff1a;实现你想要的功能。创建命令行接口(CLI)&#xff1a;使用argparse或click库来…...

deepseek-v3在阿里云和腾讯云的使用中的差异

随着deepseek在各大云商上线&#xff0c;试用了下阿里云和腾讯云的deepseek服务&#xff0c;在回答经典数学问题9.9和9.11谁大时&#xff0c;发现还是有差异的。将相关的问题记录如下。 1、问题表现 笔者使用的openai的官方sdk go-openai。 因本文中测验主要使用阿里云和腾讯…...

DevOps自动化部署详解:从理念到实践

在软件开发日益快速迭代的今天&#xff0c;如何以高效、稳定且可重复的方式将代码变更从开发环境自动部署到生产环境成为企业竞争的重要因素。DevOps 正是在这一背景下应运而生&#xff0c;它打破开发、测试、运维之间的壁垒&#xff0c;通过自动化工具和流程&#xff0c;实现持…...

systemverilog刷题小记

1、systemverilog的队列特性 1.1队列的基础操作 方法语法时间复杂度示例结果头部插入q.push_front(item)O(1)q.push_front(5)[5, ...]尾部插入q.push_back(item)O(1)q.push_back(8)[..., 8]头部删除q.pop_front()O(1)x q.pop_front()[...]尾部删除q.pop_back()O(1)x q.pop_…...

jetbrains IDEA集成大语言模型

一、CodeGPT ‌CodeGPT‌是由CSDN打造的一款生成式AI产品&#xff0c;专为开发者量身定制。它能够提供强大的技术支持&#xff0c;帮助开发者在学习新技术或解决实际工作中的各种计算机和开发难题‌1。 idea集成 1.在线安装&#xff1a;直接在线安装 2.离线安装 JetBrains Mar…...

23. AI-大语言模型-DeepSeek赋能开发-Spring AI集成

文章目录 前言一、Spring AI 集成 DeepSeek1. 开发AI程序2. DeepSeek 大模型3. 集成 DeepSeek 大模型1. 接入前准备2. 引入依赖3. 工程配置4. 调用示例5. 小结 4. 集成第三方平台&#xff08;已集成 DeepSeek 大模型&#xff09;1. 接入前准备2. POM依赖3. 工程配置4. 调用示例…...

Ubuntu学习备忘

1. 打开Terminal快捷键 ctrl alt t 2.Ubuntu22.04的root没有默认初始密码&#xff0c; 为root设置密码&#xff0c;下面链接的step1, How to allow GUI root login on Ubuntu 22.04 Jammy Jellyfish Linux - LinuxConfig...

AI 编程助手 cursor的系统提示词 prompt

# Role 你是一名极其优秀具有10年经验的产品经理和精通java编程语言的架构师。与你交流的用户是不懂代码的初中生&#xff0c;不善于表达产品和代码需求。你的工作对用户来说非常重要&#xff0c;完成后将获得10000美元奖励。 # Goal 你的目标是帮助用户以他容易理解的…...

DAO设计模式

DAO设计模式 1.概念 ​ DAO&#xff08;Data Access Object&#xff09;模式是一种用于分离业务逻辑与数据访问逻辑的设计模式&#xff0c;其核心思想是通过抽象接口屏蔽底层数据操作细节&#xff0c;提升代码的可维护性和扩展性。 2.DAO模式的定义与核心思想 DAO模式属于J…...

为什么外贸办公需要跨境专线网络?

你好&#xff0c;今天我们来聊聊SD-WAN技术在出海企业办公中的应用以及其带来的诸多优势。当今出海企业在与海外分支机构或合作伙伴开展高效的网络通讯和数据传输时&#xff0c;面临着许多挑战。此时&#xff0c;SD-WAN作为一种新兴的网络优化技术&#xff0c;正在改变这些企业…...

挪车小程序挪车二维码php+uniapp

一款基于FastAdminThinkPHP开发的匿名通知车主挪车微信小程序&#xff0c;采用匿名通话的方式&#xff0c;用户只能在有效期内拨打车主电话&#xff0c;过期失效&#xff0c;从而保护车主和用户隐私。提供微信小程序端和服务端源码&#xff0c;支持私有化部署。 更新日志 V1.0…...