2016-10-24 3 views
2

У меня есть SOAP-функция с Spring WS. Я пытаюсь добавить базовый http auth. Я использую эту конфигурацию веб-службу:Обычная проверка подлинности не работает в Spring-Boot WS Soap service

@EnableWs 
@Configuration 
public class WebServiceConfig extends WsConfigurerAdapter { 

@Bean 
public ServletRegistrationBean messageDispatcherServlet(ApplicationContext applicationContext) { 
    MessageDispatcherServlet servlet = new MessageDispatcherServlet(); 
    servlet.setApplicationContext(applicationContext); 
    return new ServletRegistrationBean(servlet); 
} 

@Bean(name = "cards") 
public Wsdl11Definition wsdlDefinition() { 
    SimpleWsdl11Definition wsdl11Definition = new SimpleWsdl11Definition(); 
    wsdl11Definition.setWsdl(new ClassPathResource("cards.wsdl")); 
    return wsdl11Definition; 
} 
} 

и эту конфигурацию пружинной безопасности:

@Configuration 
@EnableWebSecurity 
public class WebSecurityConfig extends WebSecurityConfigurerAdapter { 

@Override 
protected void configure(HttpSecurity http) throws Exception { 
    http.csrf().disable() 
     .authorizeRequests().anyRequest().authenticated() 
     .and().httpBasic() 
     .and().authorizeRequests().antMatchers("*.wsdl").permitAll(); 
} 

@Autowired 
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { 
    auth 
      .inMemoryAuthentication() 
      .withUser("user").password("password").roles("USER"); 
} 

, но когда я бег весну-загрузку и отправку запросов на обслуживание, он возвращает ответы даже без аутентификации , Что я настроил неправильно?

UPD: Кроме того, если я бегу весна-ботинок со следующими изменениями в конфигурации:

//@EnableWs 
@Configuration 
public class WebServiceConfig extends WsConfigurerAdapter { 

//@Bean 
//public ServletRegistrationBean messageDispatcherServlet(ApplicationContext applicationContext) { 
// MessageDispatcherServlet servlet = new MessageDispatcherServlet(); 
// servlet.setApplicationContext(applicationContext); 
// return new ServletRegistrationBean(servlet); 
//} 

@Bean(name = "cards") 
public Wsdl11Definition wsdlDefinition() { 
    SimpleWsdl11Definition wsdl11Definition = new SimpleWsdl11Definition(); 
    wsdl11Definition.setWsdl(new ClassPathResource("cards.wsdl")); 
    return wsdl11Definition; 
} 
} 

работает нормально (требует авторизацию для запросов), но изменения отображения URL в [/ услуги/*], не желаемое отображение для меня. Извините, я новичок с весной.

+1

Как это макет службы? Как вы это используете ... Также ваша настройка безопасности неверна, так как ваш '* .wsdl' будет переопределен предыдущим утверждением, что вам нужна безопасность для всего. (вопросы заказа). –

+0

Я имею в виду, что это мыльный сервис, как в [этом примере] (https://spring.io/guides/gs/producing-web-service/). – ipatina

+1

Также не работает, что вы тестируете (как вы тестируете) и как загружаются вещи. Вы только сбрасываете какую-то конфигурацию и ожидаете помощи, но в вашем вопросе слишком мало информации. –

ответ

1

попробовать,

, как @denium отметил заказ вопросы

@Override 
protected void configure(HttpSecurity http) throws Exception { 
    http.csrf().disable() 
     .antMatchers("*.wsdl").permitAll() 
     .anyRequest().authenticated().hasRole("USER") 
     .and().httpBasic(); 

} 
1

Я только проходит с той же проблемой, и есть мое решение. Разрешение в вашем коде применяется к уже прошедшим проверку пользователям, вам нужно добавить URL-адрес в список игнорирования с помощью метода configure (WebSecurity web). И Алсу Я думаю, что фильтрация «* .wsdl» не прийти, я использовал «/**/*.wsdl»

Существует мой рабочий класс WebSecurityConfig

public class WebSecurityConfig extends WebSecurityConfigurerAdapter { 

//Enforce basic auth 
@Override 
protected void configure(HttpSecurity http) throws Exception { 
    http.csrf().disable() 
     .httpBasic() 
     .and().authorizeRequests().anyRequest().authenticated(); 
} 

//Ignore basic auth for WSDL URL 
@Override 
public void configure(WebSecurity web) throws Exception { 
    web.ignoring().antMatchers("/**/*.wsdl"); 
} 

@Autowired 
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { 
    //TODO - do parametru 
    auth.inMemoryAuthentication().withUser("user").password("password").roles("USER"); 
} 
0

просто скопировать вставить этот код ваш класс «WebServiceConfig»

@Bean 
    public SimplePasswordValidationCallbackHandler securityCallbackHandler() { 
       SimplePasswordValidationCallbackHandler callbackHandler = new SimplePasswordValidationCallbackHandler(); 
       Properties users = new Properties(); 
       users.setProperty("AAA", "BBB"); 
       callbackHandler.setUsers(users); 
       return callbackHandler; 
      } 

      @Bean 
      public Wss4jSecurityInterceptor securityInterceptor() { 
       Wss4jSecurityInterceptor securityInterceptor = new Wss4jSecurityInterceptor(); 
       securityInterceptor.setValidationActions("UsernameToken"); 
       securityInterceptor.setSecurementMustUnderstand(true); 
       securityInterceptor.setSecurementUsername("setusername"); 
       securityInterceptor.setSecurementPassword("setpassword"); 
       securityInterceptor.setValidationCallbackHandler(securityCallbackHandler()); 
       return securityInterceptor; 
      } 

      @Override 
      public void addInterceptors(List interceptors) { 
       interceptors.add(securityInterceptor()); 
      } 
Смежные вопросы