我已经有了java Spring Security应用程序(用jhipster构建),我正在尝试添加一些单元测试,这些测试基于当前已验证用户的逻辑。
为此,我配置了MockMvc
对象,以使用Web应用程序上下文和Spring安全性,如下所示:
@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。
我在SecurityConfiguration.configure(HttpSecurity http)
中执行HTTPS的方式是使用以下行:
if (env.acceptsProfiles("!dev"))http.requiresChannel().anyRequest().requiresSecure();
所以,我的问题是如何让我的单元测试正确运行?可能是通过发送一个模拟的HTTPS请求,或者在运行单元测试的情况下禁用HTTPS?
4条答案
按热度按时间zbq4xfa01#
使用Springs MockMvc工具,您还可以指定要使用secure(true)方法发送模拟HTTPS请求,如下所示:
deikduxw2#
我正在用我已经开始使用的修复程序来回答我自己的问题,希望这能帮助其他人。我仍然对其他更好的解决方案持开放态度。
在
SecurityConfiguration.configure(HttpSecurity http)
方法中,我修改了if语句,以便在运行integrationTest时跳过它来强制https:guykilcj3#
除了正确的答案@rhinds之外,您还可以将以下代码添加到
@Before
方法中,以使所有调用在默认情况下都是安全的:gk7wooem4#
如果配置不正确,Spring Security会将响应状态更改为“302 FOUND”。请仔细检查您的安全配置。
其中
CustomAuthTokenFilter
是AbstractAuthenticationProcessingFilter
的自定义实现;MyAuthSuccessHandler
和MyAuthFailureHandler
是您提供处理程序它们可以为空,也可以包含您自定义逻辑