首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WS-Security不使用CXF -端点地址

WS-Security不使用CXF -端点地址
EN

Stack Overflow用户
提问于 2011-10-23 05:49:12
回答 1查看 871关注 0票数 0

我试图在使用apache版本2.2.12编写的web服务中添加基于UsernameToken的安全性。

一旦我在weblogic中部署了我的应用程序,我将获得两个URL,我可以从其中访问WSDL。

  1. http://localhst:8080/myapp/services/MyService?wsdl
  2. http://localhost:8080/myapp/MyService?wsdl

我正在尝试使用soapUI客户机来使用webservice,问题是如果我使用第二个URL,一切都很好,我的ejb被正确注入等等,但是WSS4JInterceptor根本没有被调用。

如果我将soapUI中的URL更改为使用第一个URL,那么就会调用Interceptor,但是我的服务不会被注入,而且作为服务对象,我将获得NULL。

我已经在我的春季配置文件中配置了WSS4JInterceptor。我需要在每个请求之前调用这个拦截器,这样我就可以从请求头验证用户令牌。

这是我的beans.xml

代码语言:javascript
复制
<bean id="wss4jInConfiguration" class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor">
<property name="properties">
<map>
   <entry key="action" value="UsernameToken Timestamp"/>
   <entry key="passwordType" value="PasswordText" />
   <entry>
      <key>
         <value>passwordCallbackRef</value>
      </key>
         <ref bean="passwordCallback"/>
   </entry>
</map>
</property>
</bean>

<bean id="passwordCallback" class="my.interceptors.callbacks.handlers.PasswordCallbackHandler"/>

<jaxws:endpoint id="myservice" implementor="my.sample.application.MyServiceImpl"
address="/MyService">
   <jaxws:ininterceptors>
       <ref bean="wss4jInConfiguration" />
   </jaxws:ininterceptors>
</jaxws:endpoint>

这是我的web.xml

代码语言:javascript
复制
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>
  <context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
    classpath:WEB-INF/beans.xml
</param-value>
  </context-param>

  <listener>
      <listener-class>org.springframework.web.context.ContextLoaderListener
      </listener-class>
  </listener>

  <servlet>
      <servlet-name>CXFServlet</servlet-name>
      <display-name>CXF Servlet</display-name>
      <servlet-class>org.apache.cxf.transport.servlet.CXFServlet
      </servlet-class>
      <load-on-startup>1</load-on-startup> 
   </servlet>

   <servlet-mapping>
        <servlet-name>CXFServlet</servlet-name>
        <url-pattern>/services/*</url-pattern>
   </servlet-mapping>
</web-app>

我目前无法访问我的WSDL,但是下面的标记如下所示。

代码语言:javascript
复制
<soap:address location="http://localhost:8080/MyServiceSoapPort" />

任何指针我做错了什么。

注意:我的服务运行良好,不需要回调URL而不使用/ services /

EN

回答 1

Stack Overflow用户

发布于 2011-10-31 23:45:27

我的猜测是,Web服务实际上部署了两次,一次是由beans.xml文件中配置的CXF部署的,一次是由Weblogic作为JavaEE5Web服务部署的。CXF不执行注入(我假设您使用的是@EJB),而且Weblogic对您的WS-安全性配置一无所知。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7864591

复制
相关文章

相似问题

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