创建名称为“ projectingArgumentResolverBeanPostProcessor”的豆时出错

时间:2019-04-06 13:14:43

标签: java spring spring-boot websecurity

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

  

org.springframework.beans.factory.BeanCreationException:错误   创建名称为“ projectingArgumentResolverBeanPostProcessor”的bean   在类路径资源中定义   [org / springframework / data / web / config / ProjectingArgumentResolverRegistrar.class]:   Bean实例化之前的BeanPostProcessor失败;嵌套的   异常是org.springframework.beans.factory.BeanCreationException:   创建名称为“ metaDataSourceAdvisor”的bean时出错:无法解析   设置时引用bean'methodSecurityMetadataSource'   构造函数参数;嵌套异常为   org.springframework.beans.factory.BeanCreationException:错误   创建名称为“ methodSecurityMetadataSource”的bean,定义于   类路径资源   [org / springframework / security / config / annotation / method / configuration / GlobalMethodSecurityConfiguration.class]:   通过工厂方法实例化Bean失败;嵌套异常为   org.springframework.beans.BeanInstantiationException:失败   实例化   [org.springframework.security.access.method.MethodSecurityMetadataSource]:   工厂方法'methodSecurityMetadataSource'抛出异常;嵌套的   异常是java.lang.IllegalStateException:在组成中   所有全局方法配置,实际上没有注释支持   在激活   org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:510)   〜[spring-beans-5.1.5.RELEASE.jar:5.1.5.RELEASE]在   org.springframework.beans.factory.support.AbstractBeanFactory.lambda $ doGetBean $ 0(AbstractBeanFactory.java:320)   〜[spring-beans-5.1.5.RELEASE.jar:5.1.5.RELEASE]在   org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)   〜[spring-beans-5.1.5.RELEASE.jar:5.1.5.RELEASE]在   org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318)   〜[spring-beans-5.1.5.RELEASE.jar:5.1.5.RELEASE]在   org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:204)   〜[spring-beans-5.1.5.RELEASE.jar:5.1.5.RELEASE]在   org.springframework.context.support.PostProcessorRegistrationDelegate.registerBeanPostProcessors(PostProcessorRegistrationDelegate.java:240)   〜[spring-context-5.1.5.RELEASE.jar:5.1.5.RELEASE]在   org.springframework.context.support.AbstractApplicationContext.registerBeanPostProcessors(AbstractApplicationContext.java:721)   〜[spring-context-5.1.5.RELEASE.jar:5.1.5.RELEASE]在   org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:534)   〜[spring-context-5.1.5.RELEASE.jar:5.1.5.RELEASE]在   org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:142)   〜[spring-boot-2.1.3.RELEASE.jar:2.1.3.RELEASE]在   org.springframework.boot.SpringApplication.refresh(SpringApplication.java:775)   [spring-boot-2.1.3.RELEASE.jar:2.1.3.RELEASE]位于   org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397)   [spring-boot-2.1.3.RELEASE.jar:2.1.3.RELEASE]位于   org.springframework.boot.SpringApplication.run(SpringApplication.java:316)   [spring-boot-2.1.3.RELEASE.jar:2.1.3.RELEASE]位于   org.springframework.boot.SpringApplication.run(SpringApplication.java:1260)   [spring-boot-2.1.3.RELEASE.jar:2.1.3.RELEASE]位于   org.springframework.boot.SpringApplication.run(SpringApplication.java:1248)   [spring-boot-2.1.3.RELEASE.jar:2.1.3.RELEASE]位于   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”注释程序时,它会正确运行 我以前用过这个鳕鱼,它工作正常。

2 个答案:

答案 0 :(得分:1)

您遇到此问题是因为您没有正确注释。您应该这样添加它:@EnableGlobalMethodSecurity(prePostEnabled = true)

答案 1 :(得分:0)

您最近更新了春天吗?在以前的版本中,可以将null MethodSecurityMetadataSource设为空,但是现在他们添加了this check,如果您没有至少启用一种方法安全性元数据源,则它们会抛出您正在获取的异常( “在所有全局方法配置的组合中,实际上未激活任何注释支持”)。当我从春季5.0.7更新到5.1.5时,这发生在我身上。这是the issue讨论此更改的地方

要解决此问题,请在@EnableGlobalMethodSecurity批注属性中启用一个元数据源,或者,如果像我一样,您正在使用某种GlobalMethodSecurityConfiguration,请确保方法{{1} }返回非空