我有java Spring Security应用程序(用jhipster构建),我正在尝试添加一些基于当前经过身份验证的用户测试逻辑的单元测试.
为此,我已将我的MockMvc
对象配置为使用Web应用程序上下文和弹簧安全性,如下所示:
@Test @Transactional public void getAllContacts() throws Exception { restContactMockMvc = MockMvcBuilders .webAppContextSetup(context) .apply(springSecurity()) .build(); restContactMockMvc.perform(get("/api/contacts")).andExpect(status().isOk()); }
问题是我还将应用程序配置为需要HTTPS,每当我运行此单元测试时,我都会收到302重定向响应,因为它似乎试图发送HTTP请求而不是HTTPS.
我强制执行HTTPS的方式是使用以下行SecurityConfiguration.configure(HttpSecurity http)
:
if (env.acceptsProfiles("!dev"))http.requiresChannel().anyRequest().requiresSecure();
所以,我的问题是如何让我的单元测试正确运行?可能是通过发送模拟HTTPS请求,还是通过在运行单元测试时禁用HTTPS?
使用Springs MockMvc,您还可以使用secure(true)方法指定要发送模拟HTTPS请求,如下所示:
restContactMockMvc.perform( get("/api/contacts").secure( true ) ).andExpect( status().isOk() )