/ / Zapobiegaj uwierzytelnianiuCredentialsNotFoundException podczas testowania jednostkowego - wiosną, testowaniem jednostkowym, bezpieczeństwem sprężynowym

Zapobiegaj AuthenticationCredentialsNotFoundException podczas testowania jednostkowego - wiosna, testowanie jednostkowe, bezpieczeństwo sprężynowe

Jak zapobiec rzucaniu Spring Security AuthenticationCredentialsNotFoundException w moich testach jednostkowych? Chciałbym, aby użytkownik nie był uwierzytelniany ani anonimowo uwierzytelniany.

Próbowałem zrobić to tak:

    SecurityContext ctx = SecurityContextHolder.createEmptyContext();
SecurityContextHolder.setContext(ctx);
//  ctx.setAuthentication();

ale nie wiem skąd wziąć ten anonimowy obiekt uwierzytelniania.

Odpowiedzi:

4 dla odpowiedzi № 1

Twój przykład kodu jest bardzo niespecyficzny. Zakładam, że używasz podstawowej konfiguracji wziętej z Strona rozpoczynająca program Spring Security

Aby anonimowo uwierzytelnić użytkownika, musisz umieścić anonimowego użytkownika w kontekście bezpieczeństwa:

SecurityContext ctx = SecurityContextHolder.createEmptyContext();
SecurityContextHolder.setContext(ctx);
ctx.setAuthentication(new UsernamePasswordAuthenticationToken("anonymous", "", Arrays.asList(new SimpleGrantedAuthority("ROLE_ANONYMOUS"))));

W przeciwnym razie usuń wszystkie mapowania zabezpieczeń lub adnotacje z odpowiednich adresów URL. Widzieć:

Jak uzyskać zezwolenieW Spring Security nie wolno zgłaszać wyjątku AuthenticationCredentialsNotFoundException w obiekcie @Controller?