网站空间域名能不能自己续费南宁市住房和城乡建设部网站

张小明 2026/1/2 3:19:48
网站空间域名能不能自己续费,南宁市住房和城乡建设部网站,030159网站建设与维护,上海网站建设排名文章目录前言第一章 鸿蒙与SpringBoot融合的技术基石1.1 鸿蒙开发的核心需求与技术痛点1.1.1 鸿蒙分布式应用的架构特点1.1.2 鸿蒙后端服务的核心诉求1.2 SpringBoot适配鸿蒙的技术优势1.2.1 快速开发与部署能力1.2.2 丰富的生态组件支撑1.2.3 高并发与高可用特性第二章 Spring…文章目录前言第一章 鸿蒙与SpringBoot融合的技术基石1.1 鸿蒙开发的核心需求与技术痛点1.1.1 鸿蒙分布式应用的架构特点1.1.2 鸿蒙后端服务的核心诉求1.2 SpringBoot适配鸿蒙的技术优势1.2.1 快速开发与部署能力1.2.2 丰富的生态组件支撑1.2.3 高并发与高可用特性第二章 SpringBoot RESTful接口开发鸿蒙应用的通信桥梁2.1 RESTful接口设计规范与鸿蒙适配2.1.1 RESTful核心设计原则2.1.2 统一响应格式设计2.2 SpringBoot接口开发实战用户管理模块2.2.1 项目初始化与依赖配置2.2.2 实体类与接口开发2.2.3 鸿蒙前端调用示例第三章 数据持久化基于Spring Data JPA的鸿蒙数据存储方案3.1 Spring Data JPA核心优势与适用场景3.1.1 JPA与Spring Data JPA的关系3.1.2 鸿蒙场景下的JPA选型理由3.2 Spring Data JPA实战用户数据持久化3.2.1 依赖配置与数据库连接3.2.2 实体类映射与Repository接口3.2.3 服务层封装与控制器改造第四章 安全认证Spring Security守护鸿蒙应用数据安全4.1 鸿蒙应用的安全需求与认证挑战4.1.1 鸿蒙应用的核心安全风险4.1.2 Spring Security的解决方案4.2 Spring Security JWT实战鸿蒙应用认证体系搭建4.2.1 依赖引入与JWT工具类开发4.2.2 Spring Security配置与认证逻辑实现4.2.3 登录接口开发与鸿蒙前端调用第五章 服务容错Sentinel保障鸿蒙后端服务高可用5.1 鸿蒙分布式场景下的服务容错需求5.1.1 服务故障的影响与危害5.1.2 Sentinel的核心能力与优势5.2 SpringBoot集成Sentinel实战5.2.1 依赖引入与基础配置5.2.3 接口容错处理与自定义降级逻辑5.2.4 Sentinel控制台监控与规则动态配置第六章 总结与拓展鸿蒙与SpringBoot融合的未来展望6.1 核心知识点回顾6.2 技术拓展与进阶方向6.3 推荐阅读资料6.4 探讨与思考6.5 结语前言在万物互联的时代鸿蒙操作系统HarmonyOS以其分布式架构优势正成为智能终端开发的新标杆而SpringBoot作为Java生态中轻量级微服务开发框架凭借“约定优于配置”的理念极大提升了后端服务的开发效率。当鸿蒙的前端分布式能力与SpringBoot的后端服务能力相结合便能构建出跨终端、高可用的全栈式智能应用。本文将聚焦SpringBoot中的RESTful接口开发、数据持久化、安全认证、服务容错四大核心模块详细讲解其在鸿蒙应用开发中的具体实践帮助开发者快速掌握两者融合的关键技术实现从后端服务搭建到鸿蒙前端调用的全流程落地。第一章 鸿蒙与SpringBoot融合的技术基石1.1 鸿蒙开发的核心需求与技术痛点1.1.1 鸿蒙分布式应用的架构特点鸿蒙采用分布式软总线、分布式数据管理、分布式任务调度等核心技术实现了“一次开发、多端部署”的开发模式。其应用分为Ability和UI两部分Ability作为应用的核心能力载体负责业务逻辑处理与跨设备交互UI则通过ArkUI框架实现多终端适配。但鸿蒙应用本身不具备复杂的数据处理、持久化存储及高并发访问能力必须依赖后端服务提供支撑。1.1.2 鸿蒙后端服务的核心诉求鸿蒙应用对后端服务的需求主要集中在三点一是接口的轻量化与高兼容性需适配鸿蒙多终端的网络请求场景二是数据处理的高效性需快速响应分布式设备的并发数据请求三是服务的可扩展性需支撑鸿蒙应用从单一设备到多设备联动的规模升级。而SpringBoot恰好能满足这些需求其简洁的配置、强大的生态及良好的可扩展性成为鸿蒙后端服务的最优选择之一。1.2 SpringBoot适配鸿蒙的技术优势1.2.1 快速开发与部署能力SpringBoot通过自动配置机制省去了传统Spring应用繁琐的XML配置开发者只需引入相关依赖即可快速搭建后端服务。例如构建一个支持JSON格式的RESTful接口仅需引入spring-boot-starter-web依赖无需额外配置即可实现HTTP请求处理这与鸿蒙“快速迭代”的开发理念高度契合。同时SpringBoot支持打包为JAR包独立运行配合Docker容器技术可实现后端服务的快速部署与跨环境迁移为鸿蒙应用的全场景落地提供支撑。1.2.2 丰富的生态组件支撑SpringBoot拥有庞大的生态体系其提供的spring-boot-starter-data-jpa、spring-boot-starter-security、spring-cloud-starter-alibaba-nacos等组件可分别满足数据持久化、安全认证、服务注册发现等需求。这些组件无需复杂集成即可直接应用于鸿蒙后端服务开发解决了鸿蒙应用在数据存储、接口安全、分布式服务治理等方面的技术痛点。此外SpringBoot对JSON、HTTP等通用协议的良好支持确保了与鸿蒙应用的高效通信。1.2.3 高并发与高可用特性SpringBoot基于Spring框架支持通过线程池、异步处理等机制提升服务并发能力可应对鸿蒙分布式设备带来的多终端并发请求场景。同时结合Spring Cloud的服务容错组件如Sentinel、Hystrix可实现服务的熔断、降级功能确保后端服务在高负载或异常情况下的稳定性为鸿蒙应用提供可靠的服务保障。第二章 SpringBoot RESTful接口开发鸿蒙应用的通信桥梁2.1 RESTful接口设计规范与鸿蒙适配2.1.1 RESTful核心设计原则RESTful接口以资源为核心通过HTTP方法GET、POST、PUT、DELETE表示对资源的操作采用JSON作为数据交换格式具有无状态、可缓存、可扩展等特点。针对鸿蒙应用接口设计需额外注意两点一是请求参数需简洁适配移动终端的网络环境二是响应格式需统一便于鸿蒙前端快速解析。例如针对鸿蒙设备的用户信息查询需求可设计如下接口规范GET /api/harmony/user/{userId}查询指定用户信息POST /api/harmony/user新增用户PUT /api/harmony/user/{userId}修改用户信息DELETE /api/harmony/user/{userId}删除用户2.1.2 统一响应格式设计为便于鸿蒙前端处理响应数据避免因接口返回格式不一致导致的解析异常需定义统一的响应实体。该实体应包含状态码、提示信息及数据内容三部分具体代码如下// 统一响应结果类publicclassResultT{// 状态码200成功400参数错误500服务器异常等privateIntegercode;// 提示信息privateStringmessage;// 响应数据privateTdata;// 构造方法、getter和setter省略// 成功响应静态方法publicstaticTResultTsuccess(Tdata){ResultTresultnewResult();result.setCode(200);result.setMessage(操作成功);result.setData(data);returnresult;}// 失败响应静态方法publicstaticTResultTfail(Integercode,Stringmessage){ResultTresultnewResult();result.setCode(code);result.setMessage(message);returnresult;}}该统一响应格式可直接在鸿蒙前端通过ArkUI的JSON解析工具解析减少前端开发工作量。2.2 SpringBoot接口开发实战用户管理模块2.2.1 项目初始化与依赖配置首先通过Spring Initializr创建SpringBoot项目选择Spring Web依赖用于开发RESTful接口。项目的pom.xml核心依赖如下dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency!-- 用于对象校验确保接口参数合法性 --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-validation/artifactId/dependency!-- Lombok简化代码 --dependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdoptionaltrue/optional/dependency2.2.2 实体类与接口开发定义用户实体类User包含用户ID、用户名、密码、设备ID等字段设备ID用于关联鸿蒙设备并通过JSR303注解进行参数校验DataNoArgsConstructorAllArgsConstructorpublicclassUser{// 用户IDprivateLonguserId;// 用户名非空且长度在2-20之间NotBlank(message用户名不能为空)Size(min2,max20,message用户名长度必须在2-20之间)privateStringusername;// 密码非空且长度不小于6NotBlank(message密码不能为空)Size(min6,message密码长度不能小于6位)privateStringpassword;// 关联的鸿蒙设备IDprivateStringdeviceId;}接着开发用户接口控制器UserController实现用户的增删改查功能结合统一响应格式返回结果RestControllerRequestMapping(/api/harmony/user)RequiredArgsConstructorpublicclassUserController{// 模拟数据存储实际开发中替换为数据库操作privatefinalMapLong,UseruserMapnewConcurrentHashMap();privateLongcurrentId1L;// 查询指定用户GetMapping(/{userId})publicResultUsergetUserById(PathVariableLonguserId){UseruseruserMap.get(userId);if(usernull){returnResult.fail(404,用户不存在);}returnResult.success(user);}// 新增用户PostMappingpublicResultUseraddUser(ValidRequestBodyUseruser){user.setUserId(currentId);userMap.put(user.getUserId(),user);returnResult.success(user);}// 修改用户PutMapping(/{userId})publicResultUserupdateUser(PathVariableLonguserId,ValidRequestBodyUseruser){if(!userMap.containsKey(userId)){returnResult.fail(404,用户不存在);}user.setUserId(userId);userMap.put(userId,user);returnResult.success(user);}// 删除用户DeleteMapping(/{userId})publicResultVoiddeleteUser(PathVariableLonguserId){if(!userMap.containsKey(userId)){returnResult.fail(404,用户不存在);}userMap.remove(userId);returnResult.success(null);}// 查询所有用户支持鸿蒙多设备批量查询GetMapping(/list)publicResultListUsergetAllUsers(){ListUseruserListnewArrayList(userMap.values());returnResult.success(userList);}}2.2.3 鸿蒙前端调用示例鸿蒙前端通过ArkUI的ohos.net.http模块发送HTTP请求调用上述接口。以查询用户信息为例核心代码如下importhttpfromohos.net.http;// 定义统一的后端服务基础地址constBASE_URLhttp://你的服务IP:8080/api/harmony;// 查询用户信息函数asyncfunctiongetUserById(userId:number):PromiseUser{letrequesthttp.createHttp();try{letresponseawaitrequest.request(${BASE_URL}/user/${userId},{method:http.RequestMethod.GET,header:{Content-Type:application/json}});// 解析响应数据letresultJSON.parse(response.result.toString());if(result.code200){returnresult.data;}else{thrownewError(result.message);}}catch(error){console.error(查询用户失败,error);throwerror;}finally{request.destroy();}}通过该方式鸿蒙前端可快速与SpringBoot后端实现数据交互完成用户管理功能。第三章 数据持久化基于Spring Data JPA的鸿蒙数据存储方案3.1 Spring Data JPA核心优势与适用场景3.1.1 JPA与Spring Data JPA的关系JPAJava Persistence API是Java EE的持久化规范定义了对象与关系数据库的映射规则及数据操作接口而Spring Data JPA是Spring对JPA的封装与扩展通过“接口继承方法命名规范”的方式无需编写SQL即可实现数据的增删改查操作极大简化了数据持久化代码。对于鸿蒙后端服务而言Spring Data JPA的优势在于开发效率高、SQL优化好、支持复杂查询可快速实现鸿蒙应用的用户数据、设备数据等存储需求。3.1.2 鸿蒙场景下的JPA选型理由鸿蒙应用常涉及多设备数据同步、用户数据跨终端共享等场景要求后端数据存储具备事务支持、数据一致性保障等特性。Spring Data JPA基于JPA规范天然支持事务管理可通过Transactional注解实现数据操作的原子性同时其支持的分页查询、动态条件查询等功能可满足鸿蒙多设备并发查询时的数据高效获取需求。此外JPA的对象映射特性可与鸿蒙前端的实体类结构保持一致减少数据转换成本。3.2 Spring Data JPA实战用户数据持久化3.2.1 依赖配置与数据库连接在原有SpringBoot项目基础上引入Spring Data JPA和MySQL依赖pom.xml核心配置如下dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-jpa/artifactId/dependencydependencygroupIdcom.mysql/groupIdartifactIdmysql-connector-j/artifactIdscoperuntime/scope/dependency在application.yml文件中配置数据库连接信息及JPA属性spring:datasource:url:jdbc:mysql://localhost:3306/harmony_db?useSSLfalseserverTimezoneUTCallowPublicKeyRetrievaltrueusername:rootpassword:你的数据库密码driver-class-name:com.mysql.cj.jdbc.Driverjpa:# 数据库方言database-platform:org.hibernate.dialect.MySQL8Dialect# 自动创建数据库表hibernate:ddl-auto:update# 显示SQL语句便于开发调试show-sql:true# 格式化SQLproperties:hibernate:format_sql:true3.2.2 实体类映射与Repository接口修改User实体类添加JPA注解实现对象与数据库表的映射DataNoArgsConstructorAllArgsConstructorEntityTable(namet_harmony_user)// 数据库表名publicclassUser{// 主键自增策略IdGeneratedValue(strategyGenerationType.IDENTITY)privateLonguserId;// 用户名唯一且非空NotBlank(message用户名不能为空)Size(min2,max20,message用户名长度必须在2-20之间)Column(uniquetrue,nullablefalse)privateStringusername;// 密码非空NotBlank(message密码不能为空)Size(min6,message密码长度不能小于6位)Column(nullablefalse)privateStringpassword;// 鸿蒙设备ID可空Column(namedevice_id)privateStringdeviceId;// 创建时间自动填充Column(namecreate_time,updatablefalse)CreatedDateprivateLocalDateTimecreateTime;// 更新时间自动填充Column(nameupdate_time)LastModifiedDateprivateLocalDateTimeupdateTime;}创建UserRepository接口继承JpaRepository即可获得基础的CRUD方法// JpaRepository实体类, 主键类型publicinterfaceUserRepositoryextendsJpaRepositoryUser,Long{// 根据用户名查询用户鸿蒙应用登录场景常用OptionalUserfindByUsername(Stringusername);// 根据设备ID查询关联用户多设备数据同步场景ListUserfindByDeviceId(StringdeviceId);// 模糊查询用户名包含指定字符的用户搜索功能PageUserfindByUsernameContaining(Stringkeyword,Pageablepageable);}Spring Data JPA会根据方法命名规范自动生成对应的SQL语句无需手动编写。3.2.3 服务层封装与控制器改造创建UserService服务层封装业务逻辑调用UserRepository实现数据操作并添加事务管理ServiceRequiredArgsConstructorpublicclassUserService{privatefinalUserRepositoryuserRepository;// 根据ID查询用户publicUsergetUserById(LonguserId){returnuserRepository.findById(userId).orElseThrow(()-newRuntimeException(用户不存在));}// 新增用户TransactionalpublicUseraddUser(Useruser){// 校验用户名是否已存在if(userRepository.findByUsername(user.getUsername()).isPresent()){thrownewRuntimeException(用户名已存在);}returnuserRepository.save(user);}// 修改用户TransactionalpublicUserupdateUser(LonguserId,Useruser){UserexistingUsergetUserById(userId);// 若修改用户名需校验新用户名是否已存在if(!existingUser.getUsername().equals(user.getUsername())userRepository.findByUsername(user.getUsername()).isPresent()){thrownewRuntimeException(用户名已存在);}user.setUserId(userId);// 保持创建时间不变user.setCreateTime(existingUser.getCreateTime());returnuserRepository.save(user);}// 删除用户TransactionalpublicvoiddeleteUser(LonguserId){if(!userRepository.existsById(userId)){thrownewRuntimeException(用户不存在);}userRepository.deleteById(userId);}// 分页查询用户publicPageUsergetUserPage(IntegerpageNum,IntegerpageSize,Stringkeyword){PageablepageablePageRequest.of(pageNum-1,pageSize,Sort.by(Sort.Direction.DESC,createTime));if(StringUtils.hasText(keyword)){returnuserRepository.findByUsernameContaining(keyword,pageable);}returnuserRepository.findAll(pageable);}}改造UserController注入UserService替换原有的模拟数据操作RestControllerRequestMapping(/api/harmony/user)RequiredArgsConstructorpublicclassUserController{privatefinalUserServiceuserService;GetMapping(/{userId})publicResultUsergetUserById(PathVariableLonguserId){try{UseruseruserService.getUserById(userId);returnResult.success(user);}catch(RuntimeExceptione){returnResult.fail(404,e.getMessage());}}PostMappingpublicResultUseraddUser(ValidRequestBodyUseruser){try{UsernewUseruserService.addUser(user);returnResult.success(newUser);}catch(RuntimeExceptione){returnResult.fail(400,e.getMessage());}}PutMapping(/{userId})publicResultUserupdateUser(PathVariableLonguserId,ValidRequestBodyUseruser){try{UserupdatedUseruserService.updateUser(userId,user);returnResult.success(updatedUser);}catch(RuntimeExceptione){returnResult.fail(400,e.getMessage());}}DeleteMapping(/{userId})publicResultVoiddeleteUser(PathVariableLonguserId){try{userService.deleteUser(userId);returnResult.success(null);}catch(RuntimeExceptione){returnResult.fail(404,e.getMessage());}}// 分页查询用户接口适配鸿蒙前端分页组件GetMapping(/page)publicResultPageUsergetUserPage(RequestParam(defaultValue1)IntegerpageNum,RequestParam(defaultValue10)IntegerpageSize,RequestParam(requiredfalse)Stringkeyword){PageUseruserPageuserService.getUserPage(pageNum,pageSize,keyword);returnResult.success(userPage);}}至此基于Spring Data JPA的数据持久化功能已实现鸿蒙应用可通过调用接口完成用户数据的持久化存储与查询。第四章 安全认证Spring Security守护鸿蒙应用数据安全4.1 鸿蒙应用的安全需求与认证挑战4.1.1 鸿蒙应用的核心安全风险鸿蒙应用作为跨设备运行的智能终端应用面临两大核心安全风险一是接口调用的身份伪造恶意攻击者可能通过伪造请求调用后端接口窃取用户数据二是数据传输的安全性鸿蒙设备与后端服务之间的HTTP传输数据可能被拦截篡改。因此后端服务必须实现完善的身份认证与授权机制确保只有合法的鸿蒙设备和用户才能访问接口。4.1.2 Spring Security的解决方案Spring Security是Spring生态中的安全框架提供了身份认证、授权、 CSRF防护、会话管理等完整的安全功能。针对鸿蒙应用Spring Security可通过JWTJSON Web Token实现无状态认证适配鸿蒙多设备的分布式场景——用户在一个设备上登录后生成的JWT令牌可在同一用户的多个鸿蒙设备上使用无需重复登录同时避免了传统会话认证的跨设备问题。4.2 Spring Security JWT实战鸿蒙应用认证体系搭建4.2.1 依赖引入与JWT工具类开发引入Spring Security和JWT相关依赖dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-security/artifactId/dependency!-- JWT依赖 --dependencygroupIdio.jsonwebtoken/groupIdartifactIdjjwt-api/artifactIdversion0.11.5/version/dependencydependencygroupIdio.jsonwebtoken/groupIdartifactIdjjwt-impl/artifactIdversion0.11.5/versionscoperuntime/scope/dependencydependencygroupIdio.jsonwebtoken/groupIdartifactIdjjwt-jackson/artifactIdversion0.11.5/versionscoperuntime/scope/dependency开发JWT工具类实现令牌的生成、解析与验证ComponentpublicclassJwtUtils{// 密钥实际开发中需配置在环境变量或配置中心Value(${jwt.secret})privateStringsecret;// 令牌过期时间24小时Value(${jwt.expiration})privateLongexpiration;// 生成JWT令牌publicStringgenerateToken(UserDetailsuserDetails){MapString,ObjectclaimsnewHashMap();// 可在令牌中存储鸿蒙设备ID等额外信息returnJwts.builder().setClaims(claims).setSubject(userDetails.getUsername()).setIssuedAt(newDate()).setExpiration(newDate(System.currentTimeMillis()expiration)).signWith(SignatureAlgorithm.HS512,secret).compact();}// 从令牌中获取用户名publicStringgetUsernameFromToken(Stringtoken){returnJwts.parser().setSigningKey(secret).parseClaimsJws(token).getBody().getSubject();}// 验证令牌有效性publicbooleanvalidateToken(Stringtoken,UserDetailsuserDetails){StringusernamegetUsernameFromToken(token);returnusername.equals(userDetails.getUsername())!isTokenExpired(token);}// 判断令牌是否过期privatebooleanisTokenExpired(Stringtoken){DateexpirationDateJwts.parser().setSigningKey(secret).parseClaimsJws(token).getBody().getExpiration();returnexpirationDate.before(newDate());}}4.2.2 Spring Security配置与认证逻辑实现首先实现UserDetailsService接口从数据库中加载用户信息用于认证ServiceRequiredArgsConstructorpublicclassUserDetailsServiceImplimplementsUserDetailsService{privatefinalUserRepositoryuserRepository;OverridepublicUserDetailsloadUserByUsername(Stringusername)throwsUsernameNotFoundException{UseruseruserRepository.findByUsername(username).orElseThrow(()-newUsernameNotFoundException(用户名不存在username));// 实际开发中密码需加密存储此处为简化示例returnneworg.springframework.security.core.userdetails.User(user.getUsername(),user.getPassword(),Collections.singleton(newSimpleGrantedAuthority(ROLE_USER)));}}开发JWT认证过滤器拦截请求并验证令牌ComponentRequiredArgsConstructorpublicclassJwtAuthenticationFilterextendsOncePerRequestFilter{privatefinalJwtUtilsjwtUtils;privatefinalUserDetailsServiceuserDetailsService;OverrideprotectedvoiddoFilterInternal(HttpServletRequestrequest,HttpServletResponseresponse,FilterChainfilterChain)throwsServletException,IOException{try{// 从请求头中获取令牌格式Bearer tokenStringjwtparseJwt(request);if(jwt!nulljwtUtils.validateToken(jwt,userDetailsService.loadUserByUsername(jwtUtils.getUsernameFromToken(jwt)))){StringusernamejwtUtils.getUsernameFromToken(jwt);UserDetailsuserDetailsuserDetailsService.loadUserByUsername(username);// 将认证信息存入Security上下文UsernamePasswordAuthenticationTokenauthenticationnewUsernamePasswordAuthenticationToken(userDetails,null,userDetails.getAuthorities());authentication.setDetails(newWebAuthenticationDetailsSource().buildDetails(request));SecurityContextHolder.getContext().setAuthentication(authentication);}}catch(Exceptione){logger.error(认证失败,e);}filterChain.doFilter(request,response);}// 解析请求头中的JWT令牌privateStringparseJwt(HttpServletRequestrequest){StringheaderAuthrequest.getHeader(Authorization);if(StringUtils.hasText(headerAuth)headerAuth.startsWith(Bearer )){returnheaderAuth.substring(7);}returnnull;}}配置Spring Security指定认证规则、放行接口等ConfigurationEnableWebSecurityRequiredArgsConstructorpublicclassSecurityConfigextendsWebSecurityConfigurerAdapter{privatefinalJwtAuthenticationFilterjwtAuthenticationFilter;privatefinalUserDetailsServiceuserDetailsService;// 密码编码器实际开发中使用BCryptPasswordEncoderBeanpublicPasswordEncoderpasswordEncoder(){returnNoOpPasswordEncoder.getInstance();}Overrideprotectedvoidconfigure(AuthenticationManagerBuilderauth)throwsException{auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder());}BeanOverridepublicAuthenticationManagerauthenticationManagerBean()throwsException{returnsuper.authenticationManagerBean();}Overrideprotectedvoidconfigure(HttpSecurityhttp)throwsException{http.cors().and().csrf().disable()// 配置异常处理.exceptionHandling().authenticationEntryPoint((request,response,ex)-{response.setContentType(application/json;charsetUTF-8);response.getWriter().write(JSON.toJSONString(Result.fail(401,未认证请先登录)));}).and()// 无状态认证不使用会话.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()// 配置接口访问规则.authorizeRequests()// 登录接口放行.antMatchers(/api/harmony/auth/login).permitAll()// 静态资源放行.antMatchers(/static/**).permitAll()// 其他接口需认证.anyRequest().authenticated();// 添加JWT过滤器http.addFilterBefore(jwtAuthenticationFilter,UsernamePasswordAuthenticationFilter.class);}}4.2.3 登录接口开发与鸿蒙前端调用开发登录控制器实现用户登录并生成JWT令牌RestControllerRequestMapping(/api/harmony/auth)RequiredArgsConstructorpublicclassAuthController{privatefinalAuthenticationManagerauthenticationManager;privatefinalUserDetailsServiceuserDetailsService;privatefinalJwtUtilsjwtUtils;PostMapping(/login)publicResultStringlogin(RequestBodyLoginRequestloginRequest){// 执行认证AuthenticationauthenticationauthenticationManager.authenticate(newUsernamePasswordAuthenticationToken(loginRequest.getUsername(),loginRequest.getPassword()));// 将认证信息存入上下文SecurityContextHolder.getContext().setAuthentication(authentication);// 生成JWT令牌UserDetailsuserDetailsuserDetailsService.loadUserByUsername(loginRequest.getUsername());StringjwtjwtUtils.generateToken(userDetails);returnResult.success(jwt);}// 登录请求参数实体DatapublicstaticclassLoginRequest{NotBlank(message用户名不能为空)privateStringusername;NotBlank(message密码不能为空)privateStringpassword;}}鸿蒙前端登录并携带令牌调用接口的核心代码// 登录函数asyncfunctionlogin(username:string,password:string):Promisestring{letrequesthttp.createHttp();try{letresponseawaitrequest.request(${BASE_URL}/auth/login,{method:http.RequestMethod.POST,header:{Content-Type:application/json},extraData:{username,password}});letresultJSON.parse(response.result.toString());if(result.code200){// 将令牌存入鸿蒙设备的偏好设置中awaitpreferences.putPreferencesValue(jwt_token,result.data);returnresult.data;}else{thrownewError(result.message);}}catch(error){console.error(登录失败,error);throwerror;}finally{request.destroy();}}// 携带令牌调用用户查询接口asyncfunctiongetUserWithToken(userId:number):PromiseUser{// 从偏好设置中获取令牌lettokenawaitpreferences.getPreferencesValue(jwt_token,);letrequesthttp.createHttp();try{letresponseawaitrequest.request(${BASE_URL}/user/${userId},{method:http.RequestMethod.GET,header:{Content-Type:application/json,Authorization:Bearer${token}}});letresultJSON.parse(response.result.toString());if(result.code200){returnresult.data;}else{thrownewError(result.message);}}catch(error){console.error(查询用户失败,error);throwerror;}finally{request.destroy();}}通过该认证体系鸿蒙应用的接口调用安全性得到有效保障仅持有合法JWT令牌的请求才能访问受保护接口。第五章 服务容错Sentinel保障鸿蒙后端服务高可用5.1 鸿蒙分布式场景下的服务容错需求5.1.1 服务故障的影响与危害鸿蒙应用的分布式特性意味着后端服务需同时应对多设备的并发请求当服务面临高负载、数据库异常或网络波动时可能出现响应延迟、接口超时等问题。若未采取容错措施单个服务的故障可能通过分布式调用链扩散导致整个系统雪崩影响所有鸿蒙设备的正常使用。因此后端服务必须具备熔断、降级、限流等容错能力。5.1.2 Sentinel的核心能力与优势Sentinel是阿里开源的轻量级服务容错框架具有流量控制、熔断降级、系统负载保护等核心功能其优势在于配置简单、性能优异、支持多种监控方式可快速集成到SpringBoot项目中。针对鸿蒙后端服务Sentinel可实现当接口QPS超过阈值时进行限流避免服务过载当接口调用异常率过高时自动熔断防止故障扩散当服务资源不足时进行降级返回默认结果保障核心功能可用。5.2 SpringBoot集成Sentinel实战5.2.1 依赖引入与基础配置引入Sentinel SpringBoot Starter依赖dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-sentinel/artifactIdversion2021.0.5.0/version/dependency在application.yml中配置Sentinel相关属性spring:cloud:sentinel:# 控制台地址用于可视化配置与监控transport:dashboard:localhost:8080# 应用名称在控制台中显示application:harmony-springboot-service# 规则持久化配置可选实际开发中可结合Nacos实现datasource:ds1:file:file:classpath:sentinel-rule.jsondata-type:jsonrule-type:flow创建sentinel-rule.json文件配置流量控制规则示例[{resource:/api/harmony/user/list,limitApp:default,grade:1,count:10,strategy:0,controlBehavior:0,clusterMode:false}]该规则表示对/api/harmony/user/list接口进行流量控制QPS阈值为10当超过阈值时直接拒绝请求。5.2.3 接口容错处理与自定义降级逻辑通过SentinelResource注解为接口添加容错能力指定熔断降级时的处理方法RestControllerRequestMapping(/api/harmony/user)RequiredArgsConstructorpublicclassUserController{privatefinalUserServiceuserService;// 为用户列表接口添加Sentinel容错保护GetMapping(/list)SentinelResource(value/api/harmony/user/list,blockHandlerhandleUserListBlock,fallbackhandleUserListFallback)publicResultListUsergetAllUsers(){ListUseruserListuserService.getAllUsers();returnResult.success(userList);}// 流量控制限流时的处理方法publicResultListUserhandleUserListBlock(BlockExceptione){returnResult.fail(503,当前请求人数过多请稍后再试);}// 接口异常熔断时的处理方法publicResultListUserhandleUserListFallback(Throwablee){returnResult.fail(500,服务暂时不可用请稍后重试);}// 分页查询接口添加容错保护GetMapping(/page)SentinelResource(value/api/harmony/user/page,blockHandlerhandleUserPageBlock,fallbackhandleUserPageFallback)publicResultPageUsergetUserPage(RequestParam(defaultValue1)IntegerpageNum,RequestParam(defaultValue10)IntegerpageSize,RequestParam(requiredfalse)Stringkeyword){PageUseruserPageuserService.getUserPage(pageNum,pageSize,keyword);returnResult.success(userPage);}publicResultPageUserhandleUserPageBlock(IntegerpageNum,IntegerpageSize,Stringkeyword,BlockExceptione){returnResult.fail(503,分页查询请求频繁请稍后再试);}publicResultPageUserhandleUserPageFallback(IntegerpageNum,IntegerpageSize,Stringkeyword,Throwablee){returnResult.fail(500,分页查询服务异常请稍后重试);}}5.2.4 Sentinel控制台监控与规则动态配置下载Sentinel控制台JAR包通过命令启动java -jar sentinel-dashboard-1.8.6.jar --server.port8080访问http://localhost:8080使用默认账号密码sentinel/sentinel登录即可看到鸿蒙后端服务的监控数据包括接口调用量、异常率、QPS等。在控制台中可动态配置流量控制、熔断降级等规则无需重启服务。例如为用户新增接口配置熔断规则当接口异常率超过50%且持续时间超过1秒时触发熔断熔断时长为5秒。配置后当鸿蒙应用批量新增用户导致接口异常时Sentinel会自动熔断该接口避免服务崩溃。第六章 总结与拓展鸿蒙与SpringBoot融合的未来展望6.1 核心知识点回顾本文围绕鸿蒙开发与SpringBoot的融合展开核心知识点涵盖四大模块一是RESTful接口开发通过统一响应格式与鸿蒙前端实现高效通信解决了多设备数据交互的兼容性问题二是数据持久化基于Spring Data JPA实现用户数据的存储与管理利用JPA的对象映射特性减少前后端数据转换成本三是安全认证结合Spring Security与JWT实现无状态认证保障鸿蒙应用的接口调用安全四是服务容错通过Sentinel实现限流、熔断、降级确保后端服务在高负载或异常情况下的稳定性。这四大模块共同构成了鸿蒙应用后端服务的核心架构实现了从数据存储到安全访问再到高可用保障的全流程覆盖。6.2 技术拓展与进阶方向在本文基础上开发者可从以下方向进行技术拓展一是接口加密在JWT认证的基础上对鸿蒙设备与后端服务之间的传输数据进行AES加密进一步提升数据安全性二是分布式服务治理结合Spring Cloud Alibaba生态引入Nacos实现服务注册发现与配置中心适配鸿蒙应用的大规模分布式部署场景三是数据同步优化利用鸿蒙的分布式数据管理能力与SpringBoot的消息队列如RabbitMQ实现多设备数据的实时同步四是性能优化通过Redis缓存热点数据如高频访问的用户信息减少数据库查询压力提升接口响应速度。6.3 推荐阅读资料为帮助开发者深入学习鸿蒙与SpringBoot的融合技术推荐以下优质资料鸿蒙开发官方文档《HarmonyOS应用开发指南》系统学习鸿蒙应用的分布式架构与ArkUI开发SpringBoot官方文档《Spring Boot Reference Guide》掌握SpringBoot的核心特性与高级配置书籍《Spring Cloud Alibaba微服务实战》学习基于Spring Cloud Alibaba的服务治理方案博客《JWT在分布式系统中的最佳实践》深入理解JWT的安全机制与使用技巧GitHub项目harmonyos-springboot-demo开源示例项目提供完整的鸿蒙与SpringBoot集成代码。6.4 探讨与思考在鸿蒙与SpringBoot的融合实践中仍有诸多问题值得探讨一是鸿蒙多设备的令牌共享机制如何实现同一用户在手机、平板、智能手表等多设备上的无缝登录与权限同步二是服务容错的精细化配置如何根据鸿蒙不同设备的请求特性如智能终端的请求频率、数据量动态调整Sentinel规则三是跨平台数据一致性如何解决鸿蒙应用与传统Android/iOS应用共用SpringBoot后端时的数据兼容问题欢迎大家在评论区分享自己的解决方案与实践经验。6.5 结语鸿蒙操作系统的崛起为智能终端开发带来了新的机遇而SpringBoot的高效开发能力为鸿蒙后端服务提供了坚实支撑。本文详细讲解了两者融合的核心技术希望能为开发者提供实用的参考。如果您觉得本文对您的开发工作有帮助欢迎让更多鸿蒙开发者受益。同时也欢迎大家关注我的账号后续将持续输出鸿蒙开发与Java后端融合的进阶内容与大家一同成长为鸿蒙生态的核心开发者。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

如何用网站做课件网站访问量查询

maxGraph完全指南:5个技巧快速掌握专业级图表开发 【免费下载链接】maxGraph maxGraph is a fully client side JavaScript diagramming library 项目地址: https://gitcode.com/gh_mirrors/ma/maxGraph maxGraph是一个功能强大的前端图表库,专门…

张小明 2026/1/1 1:27:34 网站建设

西安网站建设哪个好建设企业网站电话

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个交互式Git命令学习工具,能够根据用户输入的远程仓库URL和分支名称,自动生成正确的git pull命令。要求包含以下功能:1. 输入框接收Git远程…

张小明 2026/1/1 1:27:01 网站建设

品牌网站建设十小蝌蚪做网站工资还没有文员高

贪心算法:像“贪吃蛇”一样,永远只吃眼前的苹果?当你玩贪吃蛇时,你是否会毫不犹豫地冲向最近的那个食物?这种“每一步都选眼前最优”的策略,正是贪心算法的灵魂所在。但它真的能让你通关吗?想象…

张小明 2026/1/1 1:26:25 网站建设

高端网站建设优化专门做餐饮ppt的网站

Files文件管理器终极性能优化完整指南:8个核心技巧让老旧电脑重获新生 【免费下载链接】Files Building the best file manager for Windows 项目地址: https://gitcode.com/gh_mirrors/fi/Files 你是否在为Files文件管理器的缓慢响应和卡顿操作而烦恼&#…

张小明 2026/1/1 1:25:51 网站建设

三端合一网站开发的关键技术angularjs 做电商网站

Windows 平台部署 Elasticsearch?先搞定 JDK 依赖配置! 你是不是也遇到过这种情况:兴冲冲地完成了 elasticsearch下载和安装 ,满怀期待地运行 elasticsearch.bat ,结果命令行窗口一闪而过,或者弹出一句…

张小明 2026/1/1 1:25:16 网站建设

个人网站软件wordpress oday

基于python的新能源汽车充电管理系统的设计与实现 目录 摘 要 Abstract 第一章 绪 论 1.1 研究背景及意义 1.2 国内外研究现状 1.3 论文组织结构 第二章 关键技术 2.1 MySQL简介 2.2 Python 2.3 Django框架 2.4 Pycharm简介 2.5 B/S模式 第三章 新能源汽车充电管…

张小明 2026/1/1 1:24:41 网站建设