Spring Boot:禁用 Spring Boot 单元测试的安全性 [重复]

Posted

技术标签:

【中文标题】Spring Boot:禁用 Spring Boot 单元测试的安全性 [重复]【英文标题】:Spring Boot: Disable security for Spring Boot Unit Test [duplicate] 【发布时间】:2019-03-30 23:38:48 【问题描述】:

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"
)

并将此注释添加到类中:

@AutoConfigureMockMvc(secure = false)

但不幸的是,测试仍然返回“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")));


被单元测试的类很简单:

@SpringBootApplication
@RestController
public class App 
@GetMapping("/resources")
public String[] resources(
        @RequestParam("mandatory_param") String mandatory,
        @RequestParam("valid_param") @NotNull String validParam) 
    return new String[]"1", "2";

...

有谁知道如何为测试禁用弹簧安全性? 谢谢

【问题讨论】:

【参考方案1】:

同时使用带有随机端口的 @SpringBootTest@AutoConfiguration 可能是个问题。 你可以试试:

@RunWith(SpringRunner.class)
@WebMvcTest(App.class)
@AutoConfigureMockMvc(secure = false)
public class ExampleTest

@RunWith(SpringRunner.class)
@SpringBootTest
@EnableAutoConfiguration(exclude =  SecurityAutoConfiguration.class, ManagementSecurityAutoConfiguration.class )
public class ExampleTest

您可以添加自定义配置文件(integration_test)并制作:

security:
      basic:
        enabled: false

@RunWith(SpringRunner.class)
@SpringBootTest
@ActiveProfiles(value="integration_test")
public class ExampleTest

更新:刚刚在另一个 SO 问题中找到了类似的答案:Disable security for unit tests with spring boot

【讨论】:

当然。请查看指向其他答案的链接。这些也已经过验证。 这个解决方案不起作用(我也试过这样的东西,从阅读 *** 答案)。我仍然收到以下错误状态 401。 @SpringBootTest( webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes=TestApp.class) @EnableAutoConfiguration(exclude = SecurityAutoConfiguration.class) public class MyTestClass ... 同样使用WebMvcTest注解出现错误,要求你使用 SpringBootTest 注释。所以,回到第一方,恐怕。但是感谢您的建议。 如果您或任何人仍有问题,请查看以下帖子:(1) - ***.com/questions/44412128/… (2) - ***.com/questions/39108765/…

以上是关于Spring Boot:禁用 Spring Boot 单元测试的安全性 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

spring boo的简单搭建(eclipse+springboot + redis + mysql + thymeleaf)

Spring boot 和 Spring Actuator - 禁用安全性

如何在 spring-boot 中禁用 spring-data-mongodb 自动配置

spring boot参考示例

Spring Boot:禁用 Spring Boot 单元测试的安全性 [重复]

Spring Boot:禁用安全自动配置