Ich entwickle einen RESTful Web-Service und hatte Login-Funktion. Ich wollte Token Sicherheit und den Zugang fügen, damit ich ein UserDetailsService
hinzugefügt, wie unten zu sehen:Spring Sicherheit loadByUsername Benutzername Feld ist leer
@Component
public class CustomLoginAuthenticationProvider implements UserDetailsService {
@Autowired
private BusinessUserService businessUserService;
@Override
public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException {
if(email == null || email.isEmpty() || !email.contains("@")) {
System.out.println("ERROR - THIS IS THE USERNAME:" + email);
throw new UsernameNotFoundException(email);
}
//... More below, but it doesn't matter. Exception thrown every time
}
jedoch der E-Mail-String ist leer. Ich kann nicht verstehen, warum, weil es mir schwer fällt zu verstehen, wann genau diese Methode aufgerufen wird und welcher Wert als Parameter für diese Methode gesendet wird, da dies ein REST-Backend ist, das JSON sendet. Hier sind meine WebSecurityConfigurerAdapter
Setup:
@Configuration
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
public class CustomWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {
@Bean
public CustomLoginAuthenticationProvider customLoginAuthenticationProvider() {
return new CustomLoginAuthenticationProvider();
}
@Bean
public BCryptPasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/css/**", "/js/**", "/images/**", "/fonts/**",
"/videos/**", "/", "/register", "/login", "/about",
"/contact", "/test")
.permitAll()
.and()
.authorizeRequests()
.anyRequest()
.authenticated()
.and()
.exceptionHandling()
.authenticationEntryPoint(new LoginUrlAuthenticationEntryPoint("/"))
.and()
.formLogin()
.loginPage("/login")
.loginProcessingUrl("/login")
.usernameParameter("email")
.passwordParameter("password")
.and()
.logout()
.logoutSuccessUrl("/")
.permitAll()
.and()
.csrf()
.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
.and()
.addFilterAfter(new CsrfTokenFilter(), CsrfFilter.class);
}
}
ich angeben, dass eine E-Mail an die Methode gesendet werden soll, wenn ich .usernameParameter("email")
verwenden, so bin ich nicht wirklich sicher, warum es nicht die E-Mail-Parameter bevölkert. Ich verwende AngularJS im Frontend und sende die Zugangsdaten mit JSON zum Backend.
können Sie Ihr Anmeldeformular hier eingeben? –