1
私は、スプリングセキュリティ認証を統合テストしたかったのです。ログインするだけです。しかし、テスト中に次のエラーが登場:スプリングセキュリティテスト中のヌル認証
java.lang.AssertionError: Authentication should not be null
マイカスタムUserDetailsServiceがちょうどdatabseからユーザーを取得し、私のカスタムUserDetailsにマッピングされます。私はここで間違って何をしていますか?これは私が持っているほかに何かある:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {Application.class})
@WebAppConfiguration
public class SecurityConfigTest {
@Autowired
private WebApplicationContext context;
private MockMvc mockMvc;
@Before
public void setUp() throws Exception {
mockMvc = MockMvcBuilders
.webAppContextSetup(context)
.apply(springSecurity())
.build();
}
@Test
public void shouldAuthenticate() throws Exception {
mockMvc
.perform(formLogin())
.andExpect(authenticated());
}
}
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
UserDetailsService userDetailsService;
@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception {
auth
.userDetailsService(userDetailsService)
.passwordEncoder(new BCryptPasswordEncoder());
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.httpBasic()
.and()
.authorizeRequests()
.antMatchers("/", "/login").permitAll()
.and()
.csrf().disable();
}
}
@Configuration
@EnableAutoConfiguration
@ComponentScan
public class Application extends SpringBootServletInitializer{
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
私はinMemoryAuthenticationを使って(ユーザー、パスワード...)、同じ問題を試しました。私はまた、SpringのセキュリティがそのログインPOST要求を自動的に処理していると考えました。そうでなければ、コントローラーはどのように見えますか? – HectorBarbossa
ありがとうございました!私はそれを整理した。私はformLogin.loginPage()でそれを指定しておくべきです。 – HectorBarbossa