首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何向grails cxf web服务添加安全性(用户名、密码)

如何向grails cxf web服务添加安全性(用户名、密码)
EN

Stack Overflow用户
提问于 2014-11-06 21:22:57
回答 1查看 779关注 0票数 0

我创建了两个grails项目,一个用于服务器端cxf web服务,另一个用于cxf客户端调用web服务。

一切都很好。

我可以从客户端代码调用web服务并获得结果。

现在我想增加安全性,那么对服务器和客户端grails代码的更改是什么?

正如Christian Oestreich在他的帖子中所说的那样,我尝试应用安全性。

http://www.christianoestreich.com/2012/04/grails-cxf-interceptor-injection/ (Grails Cxf拦截器注入2.4.x-2.5.x)

应用安全性的客户端代码如下所示

代码语言:javascript
复制
    ExampleService exampleService = new ExampleService()
    def port = exampleService.exampleServicePort
    Map ctx = ((BindingProvider)port).getRequestContext();
    ctx.put("ws-security.username", "pankaj");
    ctx.put("ws-security.password", "pankaj");
    println ".......... " + port.sayHello("pankaj")

但我得到的错误如下

代码语言:javascript
复制
Error |
2014-11-06 18:33:15,411 [http-bio-8088-exec-4] ERROR errors.GrailsExceptionResolver  - SoapFault occurred when processing request: [GET] /WSDLDemoClient/wsdldemo/index
An error was discovered processing the <wsse:Security> header.. Stacktrace follows:
Message: An error was discovered processing the <wsse:Security> header.
Line | Method
->>   75 | unmarshalFault         in org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor
EN

回答 1

Stack Overflow用户

发布于 2014-11-11 13:21:27

不要使用上面提到的客户端代码,而是使用以下代码来使其工作。

代码语言:javascript
复制
    Map<String, Object> req_ctx = ((BindingProvider)hello).getRequestContext();
    req_ctx.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, WS_URL);

    Map<String, List<String>> headers = new HashMap<String, List<String>>();
    headers.put("Username", Collections.singletonList("pankaj"));
    headers.put("Password", Collections.singletonList("pankaj"));
    req_ctx.put(MessageContext.HTTP_REQUEST_HEADERS, headers);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26780611

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档