Spring Boot 版本:2.0.4.RELEASE
对于下面的 Spring Boot 测试,测试返回一个不需要的 401 响应:
“401”状态,“错误”:“未授权”
为测试禁用 Spring Security 的最佳方法是什么?
我尝试添加一个配置“security.basic.enabled=false”属性,如下所示:
@SpringBootTest(<br>
webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,<br>
classes = TestApp.class,<br>
properties = {
"security.basic.enabled=false"
})
Run Code Online (Sandbox Code Playgroud)
并将此注释添加到类中:
@AutoConfigureMockMvc(secure = false)
Run Code Online (Sandbox Code Playgroud)
但不幸的是,测试仍然返回“401”未经授权的错误代码。
原始测试
@RunWith(SpringRunner.class)
@SpringBootTest(
webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,
classes = App.class
)
public class ExampleTest{
@Autowired
public void setup(@LocalServerPort int port) {
RestAssured.port = port;
}
@Test
public voidtestMethod() {
// This test code is not important to my question.
given().log().all().get("/resources").then().log().all().statusCode(HttpURLConnection.HTTP_BAD_REQUEST).body("error", equalTo("invalid_request")).body(not(containsString("error_reason")));
}
}
Run Code Online (Sandbox Code Playgroud)
被单元测试的类很简单:
@SpringBootApplication
@RestController
public class App …Run Code Online (Sandbox Code Playgroud) java spring-security spring-boot spring-security-test spring-boot-test
我有一个反应式(Spring WebFlux)Web 应用程序,其中很少有受保护资源的 REST API。(Oauth2)。要手动访问它们,我需要获取具有客户端凭据授予类型的授权令牌并在请求中使用该令牌。
现在,我需要编写可以通过 Spring 的 WebTestClient 进行调用来调用 API 的测试。我在尝试访问 API 时收到 403 禁止。编写测试用例时我哪里做错了。
以下是我的安全配置:
@EnableWebFluxSecurity
public class WebSecurityConfiguration {
@Bean
SecurityWebFilterChain springWebFilterChain(ServerHttpSecurity http) throws Exception {
http
.csrf().disable()
.authorizeExchange()
.pathMatchers(ACTUATOR_ENDPOINT_PATTERN)
.permitAll()
.pathMatchers("/my/api/*")
.hasAuthority("SCOPE_myApi")
.anyExchange().authenticated()
.and()
.oauth2ResourceServer()
.jwt();
http.addFilterAfter(new SomeFilter(), SecurityWebFiltersOrder.AUTHORIZATION);
return http.build();
}
@Bean
public ReactiveOAuth2AuthorizedClientManager authorizedClientManager(
ReactiveClientRegistrationRepository clientRegistrationRepository,
ReactiveOAuth2AuthorizedClientService authorizedClientService) {
ReactiveOAuth2AuthorizedClientProvider authorizedClientProvider =
ReactiveOAuth2AuthorizedClientProviderBuilder.builder()
.clientCredentials()
.build();
AuthorizedClientServiceReactiveOAuth2AuthorizedClientManager authorizedClientManager =
new AuthorizedClientServiceReactiveOAuth2AuthorizedClientManager(
clientRegistrationRepository, authorizedClientService);
authorizedClientManager.setAuthorizedClientProvider(authorizedClientProvider);
return authorizedClientManager;
}
@Bean
public WebClient webClient(ReactiveOAuth2AuthorizedClientManager authorizedClientManager) {
ServerOAuth2AuthorizedClientExchangeFilterFunction oauth …Run Code Online (Sandbox Code Playgroud) java spring-security-oauth2 spring-security-test spring-webflux