0
I私のSOAP WebサービスのSpringbootアプリケーションの次のJavaの設定があります。HttpSecurity SOAP Webサービス(Springboot)で動作しない
WebSecurityConfigurationに。
@Configuration
@EnableWebSecurity
public class AgreementWebSecurityConfiguration extends WebSecurityConfigurerAdapter {
@Value("${spring.application.name}")
private String applicationName;
private static final String ROLE = "agreement-service";
/**
* Defines which URL paths should be secured and which should not.
* Specifically, the "/agreementservice-<version>/**" path is configured to require authentication.
*
* @param httpSecurity allows configuring web based security for specific http requests
* @throws Exception if error is encountered when accessing the {code httpSecurity}
*/
@Override
protected void configure(final HttpSecurity httpSecurity) throws Exception {
final String pattern = "/"+applicationName+"/**";
httpSecurity.csrf().disable().authorizeRequests().antMatchers(pattern).hasRole(ROLE).and().httpBasic();
}
}
WebServiceConfiguration:
私のアプリケーションは、私はいずれかを認証したい、と述べたコンテキストパス/agreementservice-1.0.0
でのTomcatサーバーに配備されて
@EnableWs
@Configuration
public class AgreementWebServiceConfiguration extends WsConfigurerAdapter {
private static final String NAMESPACE_URI = "http://markets.sample.com/credit/schemas/agreement/messages";
private static final String URL_MAPPING = "/*";
private static final String PORT_TYPE_NAME = "AgreementResource";
private static final String LOCATION_URI = "/";
private static final String AGREEMENT_XSD_PATH = "agreement.xsd";
private static final String MASTER_AGREEMENT_XSD_PATH = "xsd/base/masterAgreement.xsd";
@Bean
public ServletRegistrationBean messageDispatcherServlet(final ApplicationContext applicationContext) {
final MessageDispatcherServlet servlet = new MessageDispatcherServlet();
servlet.setApplicationContext(applicationContext);
servlet.setTransformWsdlLocations(true);
return new ServletRegistrationBean(servlet, URL_MAPPING);
}
@Bean(name = "agreement")
public DefaultWsdl11Definition defaultWsdl11Definition(final XsdSchema agreementSchema) {
return getWsdl11Definition(agreementSchema);
}
@Bean
public XsdSchema agreementSchema() {
return new SimpleXsdSchema(new ClassPathResource(AGREEMENT_XSD_PATH));
}
@Bean
public XsdSchema masterAgreement() {
return new SimpleXsdSchema(new ClassPathResource(MASTER_AGREEMENT_XSD_PATH));
}
private DefaultWsdl11Definition getWsdl11Definition(final XsdSchema agreementSchema) {
final DefaultWsdl11Definition wsdl11Definition = new DefaultWsdl11Definition();
wsdl11Definition.setPortTypeName(PORT_TYPE_NAME);
wsdl11Definition.setLocationUri(LOCATION_URI);
wsdl11Definition.setTargetNamespace(NAMESPACE_URI);
wsdl11Definition.setSchema(agreementSchema);
return wsdl11Definition;
}
上記のURLへのアクセス。ただし、現在の設定では、URL内のすべてのリクエストが許可されます。たとえば、認証を求めるプロンプトを表示せずにアプリケーションWSDLにアクセスできました。SOAP UIを使用してWebサービスをテストする場合も同じです。 SOAP UIでAuthorizationを指定しなくても実行できました。
私にはコントローラーがありません。私たちのクライアントは、SOAP UIを通じてWebサービスにアクセスしています。認証はSOAP UIの[認証]タブでのみ提供されます。したがって、formLogin()の追加はオプションではありません。 – Jown