2017-06-21 5 views
0

ich einen Frühling Boot-Integrationstest wie dieses:Frühling Losing Sicherheitskontext während Testing

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) 
@ActiveProfiles("Test") 
@RunWith(SpringRunner.class) 
public class HelloControllerIT { 
    @Autowired 
    protected TestRestTemplate template; 

    @Test 
    public void test1() throws Exception { 
     HttpEntity request = //buildJson; 
     ResponseEntity response = template.exchange("/put", HttpMethod.PUT, request, Object.class); 
     assertThat(response.getStatusCode()).isEqualTo(HttpStatus.CREATED); 
    } 
} 

Wenn die Vorlage die Anfrage sendet, gibt es einen Punkt in meinem Code, der wie folgt aussieht:

SecurityContext context = SecurityContextHolder.getContext(); 
Authentication authentication = context.getAuthentication(); 

So sieht der Kontext aus: enter image description here

Ich muss den Sicherheitskontext festlegen, so dass es nicht anonym ist. Ich kann es wie folgt tun:

SecurityContext context = SecurityContextHolder.createEmptyContext(); 
context.setAuthentication(authResult); 
SecurityContextHolder.setContext(context); 

Aber wenn ich versuche, dass ich noch bekommen AnonymousUser vor template.exchange zu tun. Ich habe es versucht:

template.withBasicAuth("User","pass"); 

Es funktioniert immer noch nicht. Wie stelle ich den Sicherheitskontext TestRestTemplate ein?

+0

Sie benötigen wahrscheinlich die '@ EnableWebSecurity'- und' @ WithMockUser'-Annotationen. – ngreen

Antwort

0

Ich fand es heraus. Sie müssen eine Klasse erstellen, die WebSecurityConfigurerAdapter implementiert und dann den Kontext dort festlegen. So konnten Sie jede Art von Verspottung vermeiden, an der ich interessiert war, um dies zu einem ETE-Integrationstest zu machen. Hier ist die Klasse

public class TestSecurityConfig extends WebSecurityConfigurerAdapter { 
    @Override 
    public void configure(HttpSecurity http) throws Exception { 
     http.csrf().disable().authorizeRequests().anyRequest().permitAll().and().securityContext().securityContextRepository(new TestSecurityContextRepository()); 
    } 
} 
Verwandte Themen