java - 创建名称为 'projectingArgumentResolverBeanPostProcessor' 的 bean 时出错

标签 java spring spring-boot websecurity

我正在我的项目中设置网络安全,但我看到一个错误。 这是错误

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'projectingArgumentResolverBeanPostProcessor' defined in class path resource [org/springframework/data/web/config/ProjectingArgumentResolverRegistrar.class]: BeanPostProcessor before instantiation of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'metaDataSourceAdvisor': Cannot resolve reference to bean 'methodSecurityMetadataSource' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'methodSecurityMetadataSource' defined in class path resource [org/springframework/security/config/annotation/method/configuration/GlobalMethodSecurityConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.security.access.method.MethodSecurityMetadataSource]: Factory method 'methodSecurityMetadataSource' threw exception; nested exception is java.lang.IllegalStateException: In the composition of all global method configuration, no annotation support was actually activated at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:510) ~[spring-beans-5.1.5.RELEASE.jar:5.1.5.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320) ~[spring-beans-5.1.5.RELEASE.jar:5.1.5.RELEASE] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.1.5.RELEASE.jar:5.1.5.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318) ~[spring-beans-5.1.5.RELEASE.jar:5.1.5.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:204) ~[spring-beans-5.1.5.RELEASE.jar:5.1.5.RELEASE] at org.springframework.context.support.PostProcessorRegistrationDelegate.registerBeanPostProcessors(PostProcessorRegistrationDelegate.java:240) ~[spring-context-5.1.5.RELEASE.jar:5.1.5.RELEASE] at org.springframework.context.support.AbstractApplicationContext.registerBeanPostProcessors(AbstractApplicationContext.java:721) ~[spring-context-5.1.5.RELEASE.jar:5.1.5.RELEASE] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:534) ~[spring-context-5.1.5.RELEASE.jar:5.1.5.RELEASE] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:142) ~[spring-boot-2.1.3.RELEASE.jar:2.1.3.RELEASE] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:775) [spring-boot-2.1.3.RELEASE.jar:2.1.3.RELEASE] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) [spring-boot-2.1.3.RELEASE.jar:2.1.3.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:316) [spring-boot-2.1.3.RELEASE.jar:2.1.3.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1260) [spring-boot-2.1.3.RELEASE.jar:2.1.3.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1248) [spring-boot-2.1.3.RELEASE.jar:2.1.3.RELEASE] at com.supermarket.SupermarketApplication.main(SupermarketApplication.java:19) [classes/:na]

我的鳕鱼是:

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter{
    @Autowired
    private Environment env;
    @Autowired
    private UserSecurityService usersecurityservice;
    private BCryptPasswordEncoder passwordencoder(){
        return SecurityUtility.passwordEncoder();
    }
    private static final String[]PUBLIC_MATCHES = {
            "/css/**",
            "/js/**",
            "/img/**",
            "/signUp",
            "/",
            "/newUser",
            "/forgetPassword",
            "/login",
            "/fonts/**",
            "/bookshelf/**",
            "/bookDetail/**",
            "/hours",
            "/faq",
            "/searchByCategory",
            "/searchBook"

    };
@Override
protected void configure(HttpSecurity   http)throws Exception{
    http
    .authorizeRequests().
    /*antMatchers("/**").*/
    antMatchers(PUBLIC_MATCHES).
    permitAll().anyRequest().authenticated();

http
    .csrf().disable().cors().disable()
    .formLogin().failureUrl("/login?error")
    .defaultSuccessUrl("/")
    .successForwardUrl("/login")
    .and()
    .logout().logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
    .logoutSuccessUrl("/?logout").deleteCookies("remember-me").permitAll()
    .and()
    .rememberMe();

}
@Autowired
public void configureGlobal (AuthenticationManagerBuilder auth) throws Exception{
    auth.userDetailsService(usersecurityservice).passwordEncoder(passwordencoder());
}

} userSecurity 类是:

@Service
public class UserSecurityService implements UserDetailsService {

    @Autowired()
    private UserRepository userRepository;

public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
    // TODO Auto-generated method stub
    try{

    }catch(Exception ex){
        System.out.println("Error acoured hear:");
    }
    User user=userRepository.findByUsername(username);
    if(null==user){
        throw new UsernameNotFoundException("Username not found");
    }
    return user;
}

当我删除“@EnableGlobalMethodSecurity”注释时程序正确运行 我以前用过这个鳕鱼,它工作正常。

最佳答案

你最近更新了spring吗?在以前的版本中,可以使用 null MethodSecurityMetadataSource,但现在他们添加了 this check如果您没有启用至少一种方法安全元数据源,它们会抛出您收到的异常(“在所有全局方法配置的组合中,实际上没有激活注释支持”)。当我从 spring 5.0.7 更新到 5.1.5 时,就发生了这种情况。这是the issue讨论此更改的地方

要修复此问题,请启用 @EnableGlobalMethodSecurity 注释属性中的元数据源之一,或者,如果像我一样,您正在使用某种 GlobalMethodSecurityConfiguration,请执行确保方法 customMethodSecurityMetadataSource 返回 not-null

关于java - 创建名称为 'projectingArgumentResolverBeanPostProcessor' 的 bean 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55549415/

相关文章:

java - Spring Boot 应用程序未在 Tomcat 中配置的端口号上启动

java - Java中的分布式数据结构

spring-boot - JPA CriteriaSepcification IN 子句

java - @Repository 和 @Autowired 在 Spring Boot Dao 和 Service Layer 中如何工作?

java - 方法实现的切入点

java - StaxEventItemWriter - 文件不可写问题

java - Spring Azure AD - 身份验证后获取用户的地址

java - 破解已实现方法的返回类型的最佳方法?

java - Spring Batch ItemReader使用PostgreSQL函数游标错误

java - @DeclareRoles 如何定义特定角色中的用户?