如何通过@WithAnonymousUser正确测试LoginForm

时间:2017-08-25 15:40:17

标签: spring spring-security spring-mvc-test

关于Spring Security

对于扩展WebSecurityConfigurerAdapter的类,我对configure方法有以下内容:

        .and()
        .formLogin()
            .loginPage("/perfom/login")
            .loginProcessingUrl("/perform_/login")
            .usernameParameter("username")//default
            .passwordParameter("password")//default
            .defaultSuccessUrl("/welcome")
            .failureUrl("/perfom/login?error") //default is /login?error
            .permitAll()

它在运行时工作正常。直到这里没有问题。

Spring MVC Test播放时,我有以下内容:

@Before
public void setUp(){
    mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext)
                             .apply(springSecurity())
                             .build();
}

@Test
@WithAnonymousUser
public void saveOneHtmlGetForNonAuthenticatedPrincipalTest() throws Exception {

    resultActions = mockMvc.perform(get(url).with(csrf().asHeader()).accept(MediaType.TEXT_HTML_VALUE)
                                            .header("Accept-Language", ClientUserLocale.ENGLISH.getLocale().toString())).andDo(print());

    resultActions.andExpect(status().isFound())
                 .andExpect(redirectedUrl("/perfom/login"));
}

测试失败,并显示以下错误消息:

java.lang.AssertionError: 
Redirected URL expected:</perfom/login> 
but was:<http://localhost/perfom/login>

不确定是否是预期的行为或遗漏的东西,不确定原因 http://localhost/出现。

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,并且能够使用redirectedUrlPattern进行修复。

您的解决方案应该是:

.andExpect(redirectedUrlPattern("**/perfom/login"))