2017-01-11 3 views
0

В этой документации Spring Security MVC Test описано, как тестировать защищенные ресурсы с помощью Spring Security. Я выполнил все шаги, но доступ к защищенному ressource по-прежнему возвращает код ошибки 401 (несанкционированный).Весенний тест безопасности возвращается 401 (неавторизованный)

Вот мой тестовый класс

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration 
@WebAppConfiguration 
@SpringBootTest 
@TestPropertySource(locations = "classpath:test.properties") 
public class UserControllerTest { 
    @Autowired 
    private WebApplicationContext context; 

    private MockMvc mockMvc; 

    @Before 
    public void setup() throws Exception { 
     this.mockMvc = MockMvcBuilders.webAppContextSetup(context) 
      .defaultRequest(
        get("/api/users/1") 
          .with(user("[email protected]").password("test")) 
          .with(httpBasic("sc68", "adminpass")) 
      ) 
      .apply(springSecurity()) 
      .build(); 
    } 

    @Test 
    public void testUnprotectedResource() throws Exception { 
     mockMvc.perform(get("/api/articles")) 
       .andExpect(status().isOk()); 
    } 

    @Test 
    public void testProtectedResource() throws Exception { 
     mockMvc.perform(get("/api/users/1")) 
       .andExpect(status().isOk()); 
    } 
} 

Мой ResourceServerConfiguration:

@Throws(Exception::class) 
    override fun configure(http: HttpSecurity) { 
     http.authorizeRequests() 
       .antMatchers("/api/users/register").permitAll() 
       .antMatchers("/api/articles").permitAll() 
       .anyRequest().authenticated().and() 
         .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and( ) 
      .csrf().disable() 
} 

Если вы хотите взглянуть на весь проект, который вы можете найти его here. Я уже пробовал разные тестовые ролики и все, описанные в учебнике, но я не могу найти решение, как получить аутентифицированного пользователя во время тестов.

ответ

0

Я не думаю, что у вас должны быть как user(), так и httpBasic(). user() предназначен для аутентификации на основе форм и создаст SecurityContext с именем UsernamePasswordAuthenticationToken. httpBasic создаст заголовок Authentication с кодировкой base64.

Конфигурация безопасности, похоже, отсутствует в конфигурации httpBasic(), мне кажется, что нет настроенного механизма безопасности, всего несколько совпадений. Вы можете увидеть пример here

+0

У меня есть базовая аутентификация в моем AuthorizationServerConfigurerAdapter. Из моего приложения Angular я могу получить свой AccessToken через этот URL-адрес: http: // localhost: 8081/oauth/token? Grant_type=password&client_id=sc68&[email protected]&password=test " – Deutro

Смежные вопросы