2015-05-27 18 views
5

Tôi đang cố gắng để thực hiện xác thực tùy chỉnh stateless với Xuân An bằng cách làm theo này articlean ninh mùa xuân không gọi bộ lọc xác thực tùy chỉnh của tôi khi chạy thử nghiệm JUnit

Vấn đề tôi đang phải đối mặt là bộ lọc tùy chỉnh của tôi không được gọi bởi khuôn khổ, ngay cả khi SecurityConfig tôi trông gần giống như trong các liên kết trước đó (một chút đơn giản):

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

tôi không gửi mã cho authenticationProviderappAuthenticationFilter như cũ là làm việc tốt (tôi có thể đăng nhập bằng cách sử dụng/đăng nhập điểm cuối) và sau này chỉ thực hiện GenericFilterBean và thậm chí không được gọi.

Mọi trợ giúp sẽ được đánh giá cao!

Trả lời

4

Ok, tôi đã tìm thấy giải pháp sau khi tôi nhận thấy rằng các bộ lọc đã được thực hiện khi triển khai ứng dụng Khởi động mùa xuân và chúng không chỉ được gọi khi chạy thử nghiệm. Sau đó, tôi tìm thấy bài đăng này:

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

Tôi quên để cấu hình MVC giả của tôi để sử dụng bộ lọc. Vì vậy, cuối cùng lớp thử nghiệm của tôi cho xác thực trông như sau:

@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

Để không autowire và thiết lập bộ lọc của bạn bằng tay như trong câu trả lời trước đó, bạn có thể sử dụng SecurityMockMvcConfigurers.springSecurity():

MockMvcBuilders 
.webAppContextSetup(context) 
.apply(SecurityMockMvcConfigurers.springSecurity()) 
.build(); 
Các vấn đề liên quan