gpt4 book ai didi

java - 使用 Spring Security 进行 Spring Boot 2 测试

转载 作者:行者123 更新时间:2023-11-28 21:19:58 26 4
gpt4 key购买 nike

<分区>

我在使用 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?

提前致谢!

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com