Я пытаюсь протестировать некоторые конечные точки (я совсем новичок в тестировании) и у меня возникает проблема, при которой Mocked Authentication, кажется, всегда принимается и возвращает 200.
Тест без Auth, похоже, имеетпользователь только с ROLE_USER, но конечная точка все еще возвращает успех.
Я могу только предположить, что мой SecurityConfig не используется экземпляром MockMVC, и по умолчанию "пусть все запросы происходят"?? 1005 *
Даже изменение моей конфигурации безопасности, чтобы разрешить только пользователям с «ROLE_GOD», по-прежнему приводит к состоянию. ОК для всех тестовых запросов.
Попробовал после Spring Docs и некоторых постов здесь и не получил никакой удачи ...
Любая помощь будет принята с благодарностью.
DataController.getIndex org.springframework.security.authentication.UsernamePasswordAuthenticationToken@ca25360: Principal: org.springframework.security.core.userdetails.User@36ebcb: Username: user; Password: [PROTECTED]; Enabled: true; AccountNonExpired: true; credentialsNonExpired: true; AccountNonLocked: true; Granted Authorities: ROLE_USER; Credentials: [PROTECTED]; Authenticated: true; Details: null; Granted Authorities: ROLE_USER
Expected :CLIENT_ERROR
Actual :SUCCESSFUL
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@AutoConfigureMockMvc
public class DataControllerTest {
@LocalServerPort
private int port;
@Autowired
private MockMvc mockMvc;
@Autowired
private WebApplicationContext webApplicationContext;
@Before
public void before() {
this.mockMvc = MockMvcBuilders.webAppContextSetup(this.webApplicationContext)
.apply(springSecurity())
.build();
}
@Test
@WithMockUser(roles = {"ADMIN"}, setupBefore = TestExecutionEvent.TEST_METHOD)
public void getRequest() throws Exception {
System.out.println("!!!" + SecurityContextHolder.getContext().getAuthentication());
this.mockMvc.perform(get("http://localhost:" + port)).andDo(print())
.andExpect(status().is2xxSuccessful())
.andExpect(content().string("HELLO!"));
}
@Test
@WithMockUser(setupBefore = TestExecutionEvent.TEST_METHOD)
public void getRequestWithoutAuth() throws Exception {
System.out.println("!!!" + SecurityContextHolder.getContext().getAuthentication());
this.mockMvc.perform(get("http://localhost:" + port)).andDo(print())
.andExpect(status().is4xxClientError());
}
}
My SecurityConfig:
@EnableWebSecurity
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
super.configure(auth);
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.cors().disable().csrf().disable()
.exceptionHandling()
.and()
.formLogin().disable()
.authorizeRequests()
.antMatchers("/").hasRole("ADMIN")
.anyRequest().authenticated()
.and()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
}
}