2015-05-27 5 views
5

Ich versuche, über diesen articleFrühling Sicherheit Aufruf nicht meine benutzerdefinierten Authentifizierungsfilter, wenn JUnit-Tests laufen

Das Problem, das ich bin vor benutzerdefinierten staatenlos Authentifizierung mit Spring Security zu implementieren ist, dass meine benutzerdefinierten Filter werden nicht aufgerufen werden durch den Rahmen, auch wenn mein SecurityConfig wie im vorherigen Link fast gleich aussieht (etwas einfacher):

@Configuration 
@EnableWebMvcSecurity 
@EnableGlobalMethodSecurity(prePostEnabled = true) 
public class SecurityConfig extends WebSecurityConfigurerAdapter { 

    @Autowired 
    @Qualifier("appAuthenticationProvider") 
    private AuthenticationProvider authenticationProvider; 

    @Autowired 
    @Qualifier("appAuthenticationFilter") 
    private AppAuthenticationFilter appAuthenticationFilter; 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http 
     .csrf().disable(). 
     sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) 
     .and() 
     .authorizeRequests().anyRequest().authenticated() 
     .and() 
     .anonymous().disable() 
     .exceptionHandling().authenticationEntryPoint(unauthorizedEntryPoint()); 

     http.addFilterBefore(appAuthenticationFilter, BasicAuthenticationFilter.class); 
    } 

    @Bean 
    public AuthenticationEntryPoint unauthorizedEntryPoint() { 
     return (request, response, authException) -> response.sendError(HttpServletResponse.SC_UNAUTHORIZED); 
    } 
} 

ich nicht den Code für authenticationProvider und appAuthenticationFilter wie die Post ehemalige funktioniert gut (ich kann einloggen mit/login Endpunkt) und letztere implementiert GenericFilterBean und wird nicht einmal aufgerufen.

Jede Hilfe wäre sehr willkommen!

Antwort

4

Ok, fand ich die Lösung, nachdem ich, dass die Filter bemerkt ausgeführt wurden, wenn der Frühling Boot-App bereitstellen, und sie wurden nicht nur dazu aufgerufen, wenn die Tests ausgeführt werden. Dann fand ich diesen Beitrag:

https://spring.io/blog/2014/05/23/preview-spring-security-test-web-security

Ich habe meinen mock MVC zu konfigurieren Filter zu verwenden. So endlich meine Testklasse für die Authentifizierung sieht wie folgt aus:

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringApplicationConfiguration(classes = GasApplication.class) 
@WebAppConfiguration 
public class LoginControllerTest { 

    @Autowired 
    private WebApplicationContext context; 

    @Autowired 
    @Qualifier("appAuthenticationFilter") 
    private Filter appAuthenticationFilter; 

    private MockMvc mockMvc; 

    @Before 
    public void init() throws Exception { 
     this.mockMvc = MockMvcBuilders.webAppContextSetup(context) 
       .addFilter(appAuthenticationFilter, "/resource") 
       .build(); 
    } 

    // Tests here... 
} 
1

Um nicht autowire und richten Sie den Filter durch die Hände wie in der vorherigen Antwort, können Sie SecurityMockMvcConfigurers.springSecurity():

MockMvcBuilders 
.webAppContextSetup(context) 
.apply(SecurityMockMvcConfigurers.springSecurity()) 
.build(); 
Verwandte Themen