2015-05-27 16 views
5

Ben karşılaştığım sorun benim özel filtre çağrılan olmamasıdır bu articleBahar güvenlik benim özel kimlik doğrulama filtresi aramayacağım

izleyerek Bahar Security ile özel vatansız doğrulattırmanın çalışıyorum Ben appAuthenticationFilterauthenticationProvider ve için kod göndermeyin

@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); 
    } 
} 

: my SecurityConfig neredeyse önceki linkte aynı (biraz daha basit) görünse bile çerçevesi ile eski çalışıyor (ben/giriş uç noktası kullanarak giriş yapabilirsiniz) ve ikincisi sadece GenericFilterBean uygular ve hatta çağrılmıyor.

Herhangi bir yardım çok takdir edilecektir!

cevap

4

Tamam, ben, ilkbahar önyükleme uygulamasını dağıtırken filtrelerin çalıştırıldığını fark ettiğimde ve yalnızca test çalıştırırken çağrılmadıklarını fark ettikten sonra, çözümü buldum.

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

Ben filtreleri kullanmak benim sahte MVC yapılandırmak için unuttum: Sonra bu yazı bulundu. şöyle Sonunda kimlik doğrulaması için benim test sınıfı arar:

@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

autowire değil etmek ve önceki yanıtta olduğu gibi elleriyle Filtrenizi ayarlamış olsun SecurityMockMvcConfigurers.springSecurity() kullanabilirsiniz:

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