我正在尝试访问定义如下的控制器:
@GetMapping(value = "/central-cloud-connector/api/v1/connector/version", produces = "application/json")
403错误提示:
{
"timestamp": "2023-04-16T18:27:13.550+00:00",
"status": 403,
"error": "Forbidden",
"path": "/central-cloud-connector/api/v1/connector/version"
}
控制器定义如下:
@GetMapping(value = "/central-cloud-connector/api/v1/connector/version", produces = "application/json")
public String getVersion() {
// Body of the method
}
我们要做的是在没有强制安全性的情况下访问控制器。这主要是为了在本地环境中进行测试。
项目中使用的Spring Security依赖项是:
implementation 'org.springframework.security:spring-security-web:5.8.2'
implementation 'org.springframework.security:spring-security-core:5.8.2'
implementation 'org.springframework.security:spring-security-config:5.8.2'
而SecurityConfiguration类是
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.securityMatcher("/central-cloud-connector/**")
.authorizeHttpRequests((authz) -> authz.anyRequest().authenticated())
.cors().disable()
.csrf().disable();
return http.build();
}
启用Spring Security的应用程序日志片段
Set SecurityContextHolder to AnonymousAuthenticationToken [Principal=anonymousUser, Credentials=[PROTECTED], Authenticated=true, Details=WebAuthenticationDetails [RemoteIpAddress=0:0:0:0:0:0:0:1, SessionId=null], Granted Authorities=[ROLE_ANONYMOUS]]
Request requested invalid session id 00212494548EA206FE728C5ED4BB5E57
Invoking ExceptionTranslationFilter (10/11)
Invoking AuthorizationFilter (11/11)
Checking authorization on SecurityContextHolderAwareRequestWrapper[ org.springframework.security.web.header.HeaderWriterFilter$HeaderWriterRequest@42a59089] using org.springframework.security.authorization.AuthenticatedAuthorizationManager@635ed42a
Sending AnonymousAuthenticationToken [Principal=anonymousUser, Credentials=[PROTECTED], Authenticated=true, Details=WebAuthenticationDetails [RemoteIpAddress=0:0:0:0:0:0:0:1, SessionId=null], Granted Authorities=[ROLE_ANONYMOUS]] to authentication entry point since access is denied
我们试着提供
security.basic.enable= false
management.security.enabled= false
以及。任何关于什么是错误的建议将是非常有帮助的。
1条答案
按热度按时间ylamdve61#
要在本地环境中测试受保护的端点,而无需强制安全性,您可以使用
@WebMvcTest
注解,并将controllers
参数设置为要测试的控制器。此外,您可以使用@WithMockUser
注解创建一个具有用户名和密码的模拟用户。例如,假设您有一个
HelloController
,它在/hello
上有一个需要身份验证的安全端点。您可以使用提供的代码片段在测试类中创建一个测试用例。testHello()
方法使用MockMvc示例向/hello
发送GET请求,并期望响应包含字符串“Hello!”。通过使用
@WithMockUser
,您可以绕过安全要求并对模拟用户进行身份验证。这允许您在不触发强制安全措施的情况下测试端点。这里有一个例子