2016-07-12 9 views
1

Я пытался написать интеграционный тест для нашего приложения Spring MVC. Для аутентификации мы используем oAuth2.Тест интеграции Java Spring MVC создает OAuth2 Principal

Весна в этом случае дает нам пример Principal, который мы используем, чтобы определить, какие объекты мы должны отправить обратно клиенту. В нашем контроллере мы имеем конечную точку:

@RequestMapping("/bookings") 
public @ResponseBody ResponseEntity<List<ThirdPartyBooking>> getBookings(Principal principal) { 
    OAuth2Authentication auth = (OAuth2Authentication) principal; 
    OAuth2AuthenticationDetails authDetails = (OAuthAuthenticationDetails) auth.getDetails(); 
    // Extract stuff from the details... 
} 

Теперь в нашем тесте я хочу, чтобы убедиться, что мы только отправлять заказы на проверку подлинности пользователя. Ниже код для теста можно найти:

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringApplicationConfiguration(classes = {ThirdPartyBookingServiceConfiguration.class}) 
@WebAppConfiguration 
@Component 
public abstract class RepositoryTestBase { 
    @Resource 
    private WebApplicationContext context; 
    private MockMvc mockMvc; 

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

    @Test 
    public void shouldOnlyReturnUserBookings() throws Exception { 
     MockHttpServletResponse result = mockMvc.perform(MockMvcRequestBuilders.get("/bookings").principal(???)).andReturn().getResponse(); 
     // Validate the response 
    } 
} 

Как бы вставить OAuth2Authentication в ????

ответ

1

Я использую RequestPostProcessor для проверки подлинности. Просто добавьте окурок маркер запросу:

@Component 
public class OAuthHelper { 

    @Autowired 
    AuthorizationServerTokenServices tokenservice; 

    public RequestPostProcessor addBearerToken(final String username, String... authorities) 
    { 
     return mockRequest -> { 
      OAuth2Request oauth2Request = new OAuth2Request(null, "client-id", 
         null, true, null, null, null, null, null); 
      Authentication userauth = new TestingAuthenticationToken(username, null, authorities); 
      OAuth2Authentication oauth2auth = new OAuth2Authentication(oauth2Request, userauth); 
      OAuth2AccessToken token = tokenservice.createAccessToken(oauth2auth); 

      mockRequest.addHeader("Authorization", "Bearer " + token.getValue()); 
      return mockRequest; 
     }; 
    } 
} 

и использовать его в тестах:

accessToken = authHelper.addBearerToken(TEST_USER, TEST_ROLE); 
    mockMvc.perform(get("/cats").with(accessToken)) 
+0

Это было не совсем то, что я искал. Это очень помогло. Благодаря! – irundaia