Ich habe einige Probleme mit Spring-Sicherheitsauthentifizierung. Überall in meiner Anwendung funktioniert alles super (CRUD-Operationen funktionieren gut), aber der Anmeldeversuch schlägt fehl.Spring Security-Authentifizierung mit UserDetailsService
Hier ist mein Code (I mit Kommentaren unten markiert, wo userDAO null ist, die Ursache der fehlgeschlagenen Authentifizierung):
@Service
public class UserServiceImpl implements UserService, UserDetailsService {
@Autowired
UserDAO userDAO;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
User user = userDAO.getUserByUsername(username); //userDAO == null Causing NPE
if (user == null)
throw new UsernameNotFoundException("Oops!");
List<SimpleGrantedAuthority> authorities = Arrays.asList(new SimpleGrantedAuthority(user.getRole()));
return new org.springframework.security.core.userdetails
.User(user.getLogin(), user.getPassword(), authorities);
}
@Override
public List<User> getUsers() {
return userDAO.getUsers();//userDAO !=null
}
//rest of code skipped
Meine SecurityConfig sieht aus wie dieses
@Configuration
@EnableWebMvcSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
UserServiceImpl userService = new UserServiceImpl();
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userService);
}
//rest of code skipped
ich, wo ich NPE markiert bekommen und ich habe keine Ahnung, wie ich das lösen kann. Whole-Konfiguration ist JavaBased und Sie können es hier draußen, um weitere Informationen Besuche HERE
EDIT: GetUsers() wird auf diese Weise in Controller aufgerufen:
@Controller
public class LoginController {
@Autowired
UserService userService;
@RequestMapping(value = "/dashboard")
public ModelAndView userDashboard(){
ModelAndView modelAndView = new ModelAndView("Dashboard");
List<User> userList = userService.getUsers();
modelAndView.addObject("users", userList);
return modelAndView;
}
Und in diesem Fall (beim Aufruf userService.getUsers()) userDAO ist nicht null
versucht, es zu beheben wie Bohuslav Burghardt vorgeschlagen und ich habe
method userDetailsService in class org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder cannot be applied to given types;
required: T
found: com.gi.service.UserService
reason: inferred type does not conform to upper bound(s)
inferred: com.gi.service.UserService
upper bound(s): org.springframework.security.core.userdetails.UserDetailsService
in Zeile auth.userDetailsService (userService);
Als ich versuchte, es zu beheben Ihren Weg zeigte Fehler: (24, 13) java: Methode userDetailsService in Klasse org.springframework.security.config.annotation. authentication.builders.AuthenticationManagerBuilder kann nicht auf bestimmte Typen angewendet werden; erforderlich: T gefunden: com.gi.service.UserService Grund: gefolgert Typ nicht entspricht obere Grenze (n) gefolgert: com.gi.service.UserService obere Grenze (n): org.springframework.security .core.benutzerdetails.UserDetailsService – dklos
@d__k Sie können es auf eine von drei Arten beheben: 1) Autowire den Dienst als private UserDetailsService userService, 2) Ihre UserService-Schnittstelle erweitern Sie die UserDetailsService-Schnittstelle und dann implementieren Ihre Implementierungsklassen einfach UserService oder 3) Cast UserService zu UserDetailsService in der Konfigurationsklasse –
Erprobt beide Möglichkeiten und bekam: ' Keine qualifizierende Bean des Typs [com.gi.service.UserService] für die Abhängigkeit gefunden: erwartet mindestens 1 Bean, die als Autowire-Kandidat für diese Abhängigkeit qualifiziert. – dklos