TP模块化开发商城----(三)商品分类表及无限级分类

开始学习
阅读次数31918
难度级别中级
更新时间2022-04-14 16:40

5小时学习时长

原创教程:独孤九剑系列|立即查看

课程介绍

本课程将会用短小精悍的语言,模块式的开发一个商城,方便大家代码的复用,不需要为了一个功能的实现花费大量的时间学习其他不相关的功能,同时把所有课程组合在一起就是一个完整的商城项目,非常适合学员们来练手。

相关文章

如何高效测试 Spring Security OAuth2 资源服务器配置
如何高效测试 Spring Security OAuth2 资源服务器配置 本文详解如何在不依赖真实授权服务器的前提下,通过spring-security-test和spring-addons等工具对SpringSecurity的JWT资源服务器配置进行精准、快速、可维护的单元与集成测试。本文详解如何在不依赖真实授权服务器的前提下,通过spring-security-test和spring-addons等工具对SpringSecurity的JWT资源服务器配置进行精准、快速、可维护的单元与集成测试。在构建基于SpringSecurity的OAuth2资源服务器时,一个常见误区是试图在测试中启动真实授权服务器(如Keycloak或Auth0)——这不仅显著拖慢CI流程,还引入网络、证书、状态管理等非业务耦合因素,违背“测试应聚焦被测系统自身行为”的基本原则。✅正确策略是:将JWT解析与签名验证视为框架职责(由SpringSecurity自动完成),测试焦点应完全放在访问控制逻辑上——即:哪些用户(携带哪些scope)能访问哪些端点?是否正确拒绝非法请求?一、核心测试方式:模拟JWT身份(MockedAuthentication)SpringSecurity提供了开箱即用的测试支持类,允许你在@WebMvcTest或@WebFluxTest中直接构造JwtAuthenticationToken,绕过实际JWT解析环节:org.springframework.securityspring-security-testtestimportstaticorg.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.jwt;importstaticorg.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;importstaticorg.springframework.test.web.servlet.result.MockMvcResultMatchers.*;@WebMvcTest(controllers=MachinController.class)classMachinControllerTest{@AutowiredMockMvcmockMvc;@TestvoidgivenAnonymousUser_whenAccessPrivateEndpoint_thenUnauthorized()throwsException{mockMvc.perform(get("/api/v1/private/machin")).andExpect(status().isUnauthorized());}@TestvoidgivenUserWithApiReadScope_whenAccessPrivateEndpoint_thenOk()throwsException{mockMvc.perform(get("/api/v1/private/machin").with(jwt().jwt(jwt->jwt.authorities(List.of(newSimpleGrantedAuthority("SCOPE_api:read")))))).andExpect(status().isOk());}@TestvoidgivenUserWithoutRequiredScope_whenAccessPrivateEndpoint_thenForbidden()throwsException{mockMvc.perform(get("/api/v1/private/machin").with(jwt().jwt(jwt->jwt.authorities(List.of(newSimpleGrantedAuthority("SCOPE_openid")))))).andExpect(status().isForbidden());}}?关键说明:jwt()是SecurityMockMvcRequestPostProcessors提供的便捷构造器;.jwt(jwt->jwt.authorities(...))模拟了JWT的scope声明被转换为GrantedAuthority的过程;所有@PreAuthorize,@PostAuthorize,hasAuthority()等表达式均能真实生效,因为SecurityContext中已注入合法的JwtAuthenticationToken。二、进阶方案:使用@WithMockJwtAuth简化测试若项目中大量使用JWT权限测试,推荐引入SpringAddons提供的语义化注解,大幅提升可读性与复用性:com.c4-soft.springaddonsspring-addons-oauth2-test6.0.12test@Test@WithMockJwtAuth("SCOPE_api:read")voidgivenUserWithApiReadScope_whenAccessPrivateEndpoint_thenOk()throwsException{mockMvc.perform(get("/api/v1/private/machin")).andExpect(status().isOk());}@Test@WithMockJwtAuth("SCOPE_api:write,SCOPE_profile")voidgivenUserWithMultipleScopes_whenAccessProtectedEndpoint_thenOk()throwsException{mockMvc.perform(get("/api/v1/private/other")).andExpect(status().isOk());}该注解自动完成JWT构造、权限注入及上下文设置,避免重复模板代码,且支持多scope、自定义issuer、claims等高级场景。三、测试分层建议:什么该测?什么不该测?测试类型推荐范围示例单元测试方法级安全(@PreAuthorize)、权限表达式逻辑、自定义AuthorityGrantedAuthorityConverter@PreAuthorize("hasAuthority(‘SCOPE_api:write’)&&#id>0")集成测试控制器层完整访问链路(含路径匹配、HTTP方法、状态码、响应内容)/api/v1/private/**是否仅接受含SCOPE_api:read/write的请求?避免测试JWT签名验证、密钥轮换、OIDC发现文档解析、授权服务器交互逻辑不要写测试去校验JWT是否被SpringSecurity正确解码或验签——这是框架责任⚠️注意事项:禁用@SpringBootTest全量启动做安全测试:它会加载全部Bean,掩盖配置错误(如HttpSecurity配置未生效),且速度极慢;勿在测试中启用HTTPS或真实SSL:添加properties="server.ssl.enabled=false"即可规避证书问题;确保@EnableMethodSecurity(或旧版@EnableGlobalMethodSecurity)被正确启用,否则@PreAuthorize不生效。四、配置优化建议(可选但强烈推荐)为提升配置一致性与环境可移植性,可将原生spring-boot-starter-oauth2-resource-server替换为spring-addons-webmvc-jwt-resource-server:com.c4-soft.springaddonsspring-addons-webmvc-jwt-resource-server6.0.12配合简洁的application.yml:com.c4-soft.springaddons.security:issuers:-location:https://auth.example.com/realms/myrealmauthorities:claims:scopeprefix:SCOPE_permit-all:/api/v1/public/**此举可统一管理多issuer、CORS、跨环境权限映射策略,且无需修改Java配置类即可适配Keycloak/Auth0/Cognito等不同授权服务。

2026.02.01 16:02

相关课程

更多

免费

MySQL开发技巧(一)视频教程
高级MySQL开发技巧(一)视频教程

26081次学习

收藏

免费

bootstrap响应式开发教程
高级bootstrap响应式开发教程

79601次学习

收藏

免费

MongoDB 教程
初级MongoDB 教程

328112次学习

收藏

免费

布尔教育Linux优化视频教程
高级布尔教育Linux优化视频教程

26851次学习

收藏

免费

尚学堂Mahout视频教程
初级尚学堂Mahout视频教程

32636次学习

收藏

热门专题

更多
Eclipse创建jsp文件教程合集
Eclipse创建jsp文件教程合集

本专题整合了Eclipse创建jsp文件、创建jsp项目等等内容,阅读专题下面的文章了解更多详细教程。

244

2026.02.05

java连接字符串方法汇总
java连接字符串方法汇总

本专题整合了java连接字符串教程合集,阅读专题下面的文章了解更多详细操作。

195

2026.02.05

Golang处理数据库错误教程合集
Golang处理数据库错误教程合集

本专题整合了Golang数据库错误处理方法、技巧、管理策略相关内容,阅读专题下面的文章了解更多详细内容。

167

2026.02.06

Java JNI 与本地代码交互实战
Java JNI 与本地代码交互实战

本专题系统讲解 Java 通过 JNI 调用 C/C++ 本地代码的核心机制,涵盖 JNI 基本原理、数据类型映射、内存管理、异常处理、性能优化策略以及典型应用场景(如高性能计算、底层库封装)。通过实战示例,帮助开发者掌握 Java 与本地代码混合开发的完整流程。

146

2026.02.02

Java 设计模式与重构实践
Java 设计模式与重构实践

本专题专注讲解 Java 中常用的设计模式,包括单例模式、工厂模式、观察者模式、策略模式等,并结合代码重构实践,帮助学习者掌握 如何运用设计模式优化代码结构,提高代码的可读性、可维护性和扩展性。通过具体示例,展示设计模式如何解决实际开发中的复杂问题。

105

2026.02.03

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号