Custom Spring Condition导致java.lang.NoSuchMethodException:<init>()异常

时间:2017-11-07 21:31:30

标签: spring spring-boot spring-security

我只是试图覆盖WebSecurityConfiguration的默认行为,并且必须根据定义的属性编写我自己的条件来启动bean。 我在自定义条件类中定义了没有arg构造函数。无论如何,当我启动应用程序时,我得到java.lang.NoSuchMethodException

这是我的代码的外观:

@Configuration
@ConditionalOnClass(WebSecurityConfigurerAdapter.class)
@Slf4j
public class WebSecurityConfiguration {

    class DefaultSecurityCondition implements Condition {

        public DefaultSecurityCondition(){}

        @Override
        public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {

            if (context.getEnvironment().getProperty("property.server.authorised-clients") == null &&
                    context.getEnvironment().getProperty("property.server.authorised-thumbprints") == null) {
                return true;
            }
            return false;
        }
    }    


    @Configuration
    @Conditional(DefaultSecurityCondition.class)
    @EnableWebSecurity
    public class DefaultAuthorisationConfiguration extends WebSecurityConfigurerAdapter {
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http.authorizeRequests().antMatchers("/").permitAll()
                    .and().httpBasic().disable().authorizeRequests()
                    .and().csrf().disable();
        }
    }
    }

但是,当我尝试启动我的应用时,我会遇到异常。

  

java.lang.NoSuchMethodException:   com.test.WebSecurityConfiguration $ DefaultSecurityCondition。()

我做错了什么?

1 个答案:

答案 0 :(得分:1)

当它是内部类时,DefaultSecurityCondition必须声明为static。当它不是static时,如果没有其外部类的实例,则无法创建实例。