当前位置: 首页 > 知识库问答 >
问题:

在身份验证提供者中使用自动安装错误

江雅懿
2023-03-14

我试图在authenticationProvider中使用自动连线对象,但出现错误。如果不在类中使用服务对象,就不会有问题,但我当然需要服务对象。

定制身份验证提供者类:

@Component
public class CustomAuthenticationProvider implements AuthenticationProvider {
@Autowired
private Service service;

@Override
public Authentication authenticate(Authentication authentication) throws AuthenticationException {

    String name = authentication.getName();
    String password = authentication.getCredentials().toString();

    if (service.LoginCorrect(name, password)) {

        // use the credentials
        // and authenticate against the third-party system
        List<GrantedAuthority> grantedAuths = new ArrayList<>();
        grantedAuths.add(new SimpleGrantedAuthority(service.getPerson(name).getRole().role()));
        return new UsernamePasswordAuthenticationToken(
                name, password, grantedAuths);
    } else {
        return null;
    }

}

@Override
public boolean supports(Class<?> authentication) {
    return authentication.equals(UsernamePasswordAuthenticationToken.class);
}}

使用自定义提供程序的类:

@Configuration
@EnableWebSecurity
@ComponentScan("view.controller")
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

@Autowired
private CustomAuthenticationProvider authenticationProvider;

@Override
protected void configure(HttpSecurity http) throws Exception {

    http
            .authorizeRequests()
            .antMatchers("/register/**").permitAll()
            .anyRequest().authenticated()
            .and()
            .formLogin()
            .loginPage("/login").permitAll();
}

@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
    auth.authenticationProvider(authenticationProvider);
}}

豆的创造:

@Configuration
class ApplicationConfig extends WebMvcConfigurerAdapter {

@Bean(destroyMethod = "close")
public Service service() {
    return new Service("JPADatabase");
}
}

安全性的初始化:

public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{ApplicationConfig.class, WebSecurityConfig.class};
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{DispatcherServletConfig.class};
    }

    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }

}

错误消息:

警告:在上下文初始化过程中遇到异常-取消刷新尝试:org.springframework.beans.factory.UnsatisfiedDependencyException:创建名为“webSecurityConfig”的bean时出错:通过字段“身份验证提供者”表示的不满足的依赖;嵌套异常是org.springframework.beans.factory.BeanCreationException:创建文件中定义的名称为“定制身份验证提供者”的bean时出错[D:\用户\neut\Documents\NetBeansProjects\Project-ip-vincentneut\spring-mvc-kopie\Target\r0621919\WEB-INF\class\view\Control\CustomAuthenticationProvider.class]:bean实例化失败;嵌套异常是org.springframework.beans.BeanInstantiationException:实例化失败[view.controller.CustomAuthenticationProvider]:构造函数抛出异常;嵌套异常是java.lang.RuntimeException:无法编译的源代码-找不到符号符号:类自动配置位置:类view.controller.CustomAuthenticationProvider严重:上下文初始化失败org.springframework.beans.factory.UnsatisfiedDependencyException:创建名为“webSecurityConfig”的bean时出错:通过字段“身份验证提供者”表示的不满足的依赖;嵌套异常是org.springframework.beans.factory.BeanCreationException:创建bean时出错在文件[D:\User\neut\Documents\NetBeansProjects\ectect-ip-vincentneut\spring-mvc-kopie\Target\r0621919\WEB-INF\class\view\Controler\CustomAuthenticationProvider.class]中定义了名称“CustAuthenticationProvider”:bean实例化失败;嵌套异常org.springframework.beans.BeanInstantiationException:实例化失败[view.controller.CustomAuthenticationProvider]:构造函数抛出异常;嵌套异常java.lang.RuntimeException:无法编译的源代码-找不到符号符号:类自动安装位置:类view.controller.CustomAuthenticationProvider

编辑:它只在第一次运行时工作。(重新启动我的glassfish服务器后)

共有1个答案

薄兴昌
2023-03-14

从异常< code > Java . lang . runtime exception:Uncompilable source code 中可以清楚地看出,此错误是netbeans特有的。我猜netbeans使用了两种不同来源的“类文件”数据,这样它就可以解析构建中的所有符号,而运行时类路径和编辑器使用的是不同的东西。

如果您使用的是maven/gradle,请尝试使用它而不是您的IDE构建和运行。或者尝试清理netbean缓存。

 类似资料:
  • 问题内容: 我的Web应用程序有多个身份验证管理器(一个用于API,一个用于WEB访问)。该api应该仅具有基本的身份验证服务- 通过spring安全标记进行配置,如下所示: 我无法内联身份验证提供程序,因为我希望它可以被子bean配置覆盖。 我的问题是我无法在security:authentication-provider元素上定义别名/ id以在身份验证管理器中引用它。有一个简单的解决方法吗?

  • 我在调试身份验证问题时遇到了这个代码片段: 我在调试和摆弄用户凭证时注意到,如果第一个身份验证提供者(即< code > userdailsservice )无法对我的用户进行身份验证,那么就会远程调用我的LDAP服务器来尝试对我的用户进行身份验证。但是,如果第一个身份验证提供者成功地对我的用户进行了身份验证,则不会调用第二个身份验证提供者。 我的问题是,列出这些身份验证提供者的工作方式是否使得如

  • 我正在尝试创建一个委托身份验证提供程序来执行逻辑,然后根据一些任意逻辑决定选择哪个身份验证提供程序;为了这个例子,如果用户名以前缀开头。 我当前的SecurityConfig将一次尝试一个身份验证提供程序: 根据用户名,我想选择是否要使用try a provider,这样,如果用户名不是以特定前缀(“ldap”、“custom”、“ad”等)开头,它们就不会被调用...),所以: 我似乎无法以这种

  • 我正在Spring Security中实现CustomAuthenticationProvider。我已经创建了实现AuthenticationProvider的CustomAuthenticationProvider类。但是,当我在我的SecurityConfiguration类中定义这个CustomAuthenticationProvider并自动连接它时,应用程序抛出以下错误: 我已经在我的

  • 我正在使用React并尝试处理用户的密码更改。我正在发送一个如下的POST请求: ...我得到一个401错误:“未提供身份验证凭据”。 然而,如果我通过邮递员发送完全相同的请求,那么效果很好。 我也在同一个应用程序中执行GET请求以获取用户数据,它也可以毫无问题地工作: 可能是什么问题。。。?

  • 我想为Spring Security配置L 我配置spring-security.xml指出m 如何设置为 Spring,使用我的自定义类而不是他的 deafaul LDAP 身份验证提供程序?