HTTP 403 Forbidden error in Spring Web Security

flvtvl50  于 2023-04-21  发布在  Spring
关注(0)|答案(1)|浏览(151)

我正在尝试访问定义如下的控制器:

@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

以及。任何关于什么是错误的建议将是非常有帮助的。

ylamdve6

ylamdve61#

要在本地环境中测试受保护的端点,而无需强制安全性,您可以使用@WebMvcTest注解,并将controllers参数设置为要测试的控制器。此外,您可以使用@WithMockUser注解创建一个具有用户名和密码的模拟用户。
例如,假设您有一个HelloController,它在/hello上有一个需要身份验证的安全端点。您可以使用提供的代码片段在测试类中创建一个测试用例。testHello()方法使用MockMvc示例向/hello发送GET请求,并期望响应包含字符串“Hello!”。
通过使用@WithMockUser,您可以绕过安全要求并对模拟用户进行身份验证。这允许您在不触发强制安全措施的情况下测试端点。
这里有一个例子

@WebMvcTest(controllers = HelloController.class)
@WithMockUser(username = "alice", password = "12345")
class HelloTests {

    @Autowired
    private MockMvc mvc;
    @Test
    void testHello() throws Exception {
        mvc.perform(get("/hello"))
                .andExpect(content().string("Hello!"));
    }
}

相关问题