0

このスクリプトを実行して、Grails/CXF クライアントで Web サービスを保護しようとすると、

secureServiceFactory で「null オブジェクトでメソッド getInInterceptors() を呼び出せません」

secureServiceFactoryをの場所に設定する必要がありますか?

何か案は:

コード :

class BootStrap {

def secureServiceFactory

def init = { servletContext ->

    Map<String, Object> inProps = [:]
    inProps.put(WSHandlerConstants.ACTION, WSHandlerConstants.USERNAME_TOKEN);
    inProps.put(WSHandlerConstants.PASSWORD_TYPE, WSConstants.PW_TEXT);
    Map<QName, Validator> validatorMap = new HashMap<QName, Validator>();
    validatorMap.put(WSSecurityEngine.USERNAME_TOKEN, new UsernameTokenValidator() {

        @Override
        protected void verifyPlaintextPassword(org.apache.ws.security.message.token.UsernameToken usernameToken, org.apache.ws.security.handler.RequestData data)
            throws org.apache.ws.security.WSSecurityException {
            if(data.username == "wsuser" && usernameToken.password == "secret") {
      println "username and password are correct!"
  } else {
      println "username and password are NOT correct..."
                throw new WSSecurityException("user and/or password mismatch")
            }
        }
    });
    inProps.put(WSS4JInInterceptor.VALIDATOR_MAP, validatorMap);
    secureServiceFactory.getInInterceptors().add(new WSS4JInInterceptor(inProps))
}
4

1 に答える 1

0

これが完全な回答かどうかはわかりませんが、同じエラーが表示され、cxf プラグインが、公開されたサービスの名前と一致するサービス ファクトリを接続することを意図していることを理解しています。grails run-appアプリケーションを使用して grails-cxf プラグインを実行すると、箱から出してすぐに動作することを確認しました。ただし、grails warプロジェクトで実行すると、tc サーバー [vfabric-tc-server-developer-2.9.4.RELEASE] tomcat 7 [tomcat-7.0.47.A.RELEASE] にデプロイすると、このエラーが発生するという war が作成されます。

プラグインの作成者が他の参考文献 [ http://www.christianoestreich.com/2012/04/grails-cxf-interceptor-injection/ ]で指摘しているように、すぐに使用できることにも注意してください。あなたが変更test('org.apache.ws.security:wss4j:1.6.7')しない限り、tは機能compile('org.apache.ws.security:wss4j:1.6.7') し、私はそれを機能させることができなかったことに注意しますcompile('org.apache.ws.security:wss4j:1.6.9')

残念ながら、これを超えた後、戦争を展開するときに次のエラーが発生しgrails run-appます。

22-Aug-2014 11:46:05.062 SEVERE [tomcat-http--1] org.apache.catalina.core.StandardWrapperValve.invoke Allocate exception for servlet CxfServlet
 org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'cxf' is defined
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:641)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1159)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:282)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:273)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200)
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:979)
    at org.apache.cxf.transport.servlet.CXFServlet.loadBus(CXFServlet.java:75)

私はそれを見ていきますが、おそらくこの戦争は実際に展開することを意図したものではなく、プラグイン自体の開発のみを目的としています. ただし、その場合でも、TC で作業する方がよいでしょう。なぜなら、自分のプロジェクトで自信を持ってコードを活用できるからです。

于 2014-08-22T18:30:08.493 に答える