我已经为我的 Spring Boot 应用程序创建了自定义登录表单。
在我的表单集成测试中,我想检查收到的 cookie 是否包含 JSESSIONID XSRF-TOKEN .

但是,我只收到了 XSRF-TOKEN .

这是我的测试:

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringApplicationConfiguration(classes = Application.class) 
@WebAppConfiguration 
@IntegrationTest("server.port:0") 
public class UserIT { 
 
    @Autowired 
    private WebApplicationContext context; 
    @Autowired 
    private FilterChainProxy springSecurityFilterChain; 
 
    @Value("${local.server.port}") 
    private Integer port; 
 
    private MockMvc mockMvc; 
 
    @Before 
    public void setup() { 
        mockMvc = 
                MockMvcBuilders.webAppContextSetup(context).addFilters(springSecurityFilterChain) 
                        .build(); 
    } 
 
    @Test 
    public void getUserInfoTest() throws Exception { 
        disableSslVerification(); 
 
        MvcResult result = 
                mockMvc.perform(formLogin("/login").user("roy").password("spring")).andExpect(authenticated()) 
                        .andReturn(); 
        Cookie sessionId = result.getResponse().getCookie("JSESSIONID"); 
        Cookie token = result.getResponse().getCookie("XSRF-TOKEN"); 
} 

安全配置:
@Override 
    public void configure(HttpSecurity http) throws Exception { 
        // @formatter:off    
        http 
            //.httpBasic() 
            //.and() 
                .headers().frameOptions().disable() 
            .and() 
                .antMatcher("/**").authorizeRequests() 
                .antMatchers("/actuator/health").permitAll() 
                .antMatchers("/actuator/**").hasAuthority(Authority.Type.ROLE_ADMIN.getName()) 
                .antMatchers("/login**", "/index.html", "/home.html").permitAll() 
                .anyRequest().authenticated() 
            .and() 
                .formLogin().loginPage("/login.jsp") 
                    .usernameParameter("username") 
                    .passwordParameter("password") 
                    .loginProcessingUrl("/login") 
                     .permitAll() 
            .and() 
                .logout().logoutSuccessUrl("/login.jsp").permitAll() 
            .and() 
                .csrf().csrfTokenRepository(csrfTokenRepository()) 
            .and() 
                .addFilterAfter(csrfHeaderFilter(), CsrfFilter.class) 
                .addFilterBefore(ssoFilter(), BasicAuthenticationFilter.class); 
        // @formatter:on 
    } 

请帮助我获得所需的结果。

请您参考如下方法:

您也看不到 Set-Cookie header 。对我来说,这是 MockMVC 的一大限制。有关解决方法,请参阅 Why does Spring MockMvc result not contain a cookie? .


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!