我在使用 Spring Security 5.1 测试 Spgring Boot 2 应用程序时遇到了一些问题。
问题:我总是收到 403 响应。
这是我尝试过的两种方法:
1)通过执行以下操作禁用测试安全性:
@Value("${security.enabled:true}")
private boolean securityEnabled;
@Override
protected void configure(HttpSecurity pHttpSecurity) throws Exception
{
if (!securityEnabled)
{
return;
}
并且仅将 application.properties 用于将此变量设置为 false 的测试。这仍然会导致 403,因为 PreAuthorize 仍然希望您获得授权,并且我在过去禁用安全配置时观察到相同的行为:我还必须注释掉所有 PreAuthorize 注释才能在没有安全性的情况下手动测试。
2)运行测试:
@WithMockUser(username = "admin", roles = "ADMIN")
这个解决方案实际上提出了一个问题,即 PreAuthorize 不会自动附加ROLE_前缀,这实际上是我使用它的原因,因为我的角色也没有它。为了尝试运行测试,我实际上更改了我正在访问的路由,如果这是唯一的工作方式,我将更改角色名称(但也许 @Secured 也会这样做)。
这是使用@WithMockUser 时请求的相关部分的样子。
MockHttpServletRequest:
HTTP Method = POST
Request URI = /admin/createUser
Parameters = {}
Headers = {Content-Type=[application/json]}
Body = <no character encoding set>
Session Attrs = {SPRING_SECURITY_CONTEXT=org.springframework.security.core.context.SecurityContextImpl@e0791834:
Authentication: org.springframework.security.authentication.UsernamePasswordAuthenticationToken@e0791834:
Principal: org.springframework.security.core.userdetails.User@586034f:
Username: admin; Password: [PROTECTED]; Enabled: true; AccountNonExpired: true;
credentialsNonExpired: true; AccountNonLocked: true; Granted Authorities: ROLE_ADMIN;
Credentials: [PROTECTED]; Authenticated: true; Details: null; Granted Authorities: ROLE_ADMIN}
我也尝试过 @Secured 和 @RolesAllowed 有和没有附加 ROLE_ 和相同的行为。到目前为止,其他类似帖子中提出的答案都没有奏效。
那么,对我做错了什么有任何帮助吗?启用安全性的任何正确测试方式?如果没有,如果禁用安全性,有什么方法可以告诉 Spring 忽略 PreAuthorize?
提前致谢!