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 自动配置