2017-11-07 4 views
1

WebSecurityConfiguration의 기본 동작을 재정의하려는 중이고 정의 된 속성을 기반으로 빈을 초기화하기 위해 자체 조건을 작성해야했습니다. 사용자 정의 조건 클래스 내에 arg 생성자가 정의되지 않았습니다. 그것과 상관없이, 나는 앱을 회전시킬 때 java.lang.NoSuchMethodException을 얻는다.사용자 정의 스프링 조건으로 인해 java.lang.NoSuchMethodException이 발생 함 : <init>() 예외

이 내 코드는 모습입니다 : 내 응용 프로그램을 시작하려고하면

@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() 내가 잘못하고있는 중이 야 무엇

?

+0

메시지에 줄 번호가 포함되어 있습니까? 또한 클래스의 가시성이 "public"대신 "package-private"인 것처럼 보이므로 패키지 외부의 클래스가 클래스에 액세스 할 수 없게 될 수 있습니다. – Pytry

+0

내부 클래스를 public으로 변경해도 수정되지 않았습니다. 그러나,'DefaultSecurityCondition'을 내부 클래스가 아닌 별도의 클래스로 생성하면 의도 한대로 잘 동작합니다. –

답변

1

내부 클래스 인 경우 DefaultSecurityConditionstatic으로 선언해야합니다. static이 아닌 경우 외부 클래스의 인스턴스가 없어도 인스턴스를 작성할 수 없습니다.

+0

감사합니다. Andy. 잘 작동합니다! –