Java 使用UserDetailsService的Spring安全身份验证
我对Spring安全认证有一些问题。 在我的应用程序中,无论什么地方,一切都很好(CRUD操作很好),但登录尝试失败 这是我的代码(我在下面用注释标记,其中userDAO为null,这是身份验证失败的原因): 我标记了我在哪里得到NPE,我不知道如何解决这个问题。整个配置都是基于Java的,您可以在这里查看更多详细信息 EDIT:getUsers()在控制器中以这种方式调用:Java 使用UserDetailsService的Spring安全身份验证,java,spring,spring-security,Java,Spring,Spring Security,我对Spring安全认证有一些问题。 在我的应用程序中,无论什么地方,一切都很好(CRUD操作很好),但登录尝试失败 这是我的代码(我在下面用注释标记,其中userDAO为null,这是身份验证失败的原因): 我标记了我在哪里得到NPE,我不知道如何解决这个问题。整个配置都是基于Java的,您可以在这里查看更多详细信息 EDIT:getUsers()在控制器中以这种方式调用: @Controller public class LoginController { @Autowired
@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;
}
一致
auth.userDetailsService(userService) 这是不正确的部分:
UserServiceImpl userService = new UserServiceImpl();
当您自己实例化该服务时,其自动关联依赖项将始终为null
。您必须让Spring容器实例化它(已通过使用@service
标记服务来完成),然后将其注入到您的安全配置类中,如下所示:
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private UserDetailsService userService;
}
Bohuslav的这段代码解决了这个问题
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private UserService userService;
}
也失踪
@ComponentScan("com.gi")
以前
public class SecurityConfig extends WebSecurityConfigurerAdapter {
缺乏这一点导致
Error:(24, 13) java: 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
当我试图按照您的方式修复它时,它显示了错误:(24,13)类org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder中的java:method userdetails服务无法应用于给定的类型;必需:T found:com.gi.service.UserService原因:推断类型不符合上限推断:com.gi.service.UserService上限:org.springframework.security.core.userdetails。UserDetailsService@d__k您可以通过以下三种方式之一进行修复:1)将服务自动连接为private UserDetails服务userService,2)让您的UserService接口扩展UserDetailsService接口,然后让您的实现类只实现UserService,或者3)在配置类中将UserService强制转换为UserDetailsService尝试了两种方法并得到:`没有类型为[com.gi.service.UserService]的合格bean】为依赖项找到:至少需要1个符合此依赖项autowire候选项条件的bean。`您可以随时在github上查看我的代码以获得更广泛的视角
@ComponentScan("com.gi")
public class SecurityConfig extends WebSecurityConfigurerAdapter {
Error:(24, 13) java: 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