我试图在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服务器后)
从异常< 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 身份验证提供程序?