品牌型号:联想拯救者R7000
系统:Windows 10专业版
软件版本:Spring Boot 4.0.2
在开发大型后端项目时,一般会使用Spring Security安全框架,该框架内置了RBAC权限管理模型,相对来说权限限制更精细。在开发阶段,无论是前后端分离项目中的接口联调,还是日常的bug排查,都需要测试Spring Security的接口,本文将为大家介绍Spring Security怎么测试接口,Spring Security如何查询用户信息的相关内容。
一、Spring Security怎么测试接口
Spring Security的接口测试,不仅是要测接口能否正常工作,还需要测试接口的认证、授权是否生效,要确保未授权用户无法访问指定接口,只有授权的用户才能正常操作对应权限的接口。下面我就详细为大家介绍一下Spring Security测试接口的步骤。
首先在Spring Boot项目中,需先引入Spring Security相关依赖和测试依赖,核心依赖包括spring-boot-starter-security和spring-security-test等,具体可以参考下图Maven坐标。

其次需要配置Spring Security的基础规则,比如哪些接口是所有角色都可以访问(登录接口),配置用户角色(如ADMIN、USER),此处仅为大家做演示,在内存中定义了两个用户,并简单配置了Spring Security的拦截接口配置。

在开发中,测试方式主要有两种,Postman测试和JUnit测试。如果使用Postman测试,需要携带认证,根据认证方式选择,否则会返回401未授权错误。如果未关闭CSRF保护,POST、PUT等请求还需携带CSRF令牌,否则会返回403禁止访问。

例如我们在后台管理系统时,【/admin】开头的接口仅允许ADMIN角色访问,【/user】开头的接口允许USER和ADMIN角色访问,【/public】接口允许任何人访问。测试时,用Postman分别使用ADMIN和USER账号登录调用对应接口,验证ADMIN能正常访问所有接口,USER无法访问/admin接口,/public接口正常,未登录时接口返回401。

对于JUnit+MockMvc测试,适合在开发阶段编写单元测试,确保接口逻辑符合预期,结合@WithMockUser注解模拟不同角色的用户,无需启动完整项目,测试效率更高。

二、Spring Security如何查询用户信息
在Spring Security项目中,经常需要查询用户信息,例如登录后获取当前登录用户的基本信息、根据用户名/用户ID查询用户详情、日志记录时获取操作人信息等。Spring Security提供了多种查询方式,下面我就为大家介绍一下Spring Security查询用户信息的方法。
我们可以通过SecurityContextHolder获取当前登录用户信息,Spring Security会将当前登录用户的信息存储在SecurityContext中,而SecurityContext通过ThreadLocal存储在当前线程中,例如下图方法的第一行代码,通过Authentication对象可获取用户名、权限等信息。

在实际开发中,例如在用户个人中心页面中,需要显示当前登录用户的昵称、手机号、角色等信息,此时就可以通过上面介绍的方法获取Authentication对象,再从对象中提取所需信息,不需要查询数据库。但有一点需要注意,如果是在异步线程中获取用户信息,会出现获取不到的情况,因为ThreadLocal无法跨线程传递,此时需手动将SecurityContext传递到异步线程中。

三、总结
以上就是Spring Security怎么测试接口,Spring Security如何查询用户信息的相关内容。使用了Spring Security开发接口后,不仅需要测试接口功能,还需要测试接口权限,文中为大家简单演示了测试步骤。对于比较常用的“查询用户信息”,从上下文即可获取,并且底层是ThreadLocal,需要注意异步线程问题,希望对你有所帮助。