`

spring+xfire +wss4j实现

阅读更多

web.xml 配置

 

<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>
       /WEB-INF/applicationContext.xml,
   /WEB-INF/xfire-servlet.xml,
         classpath:org/codehaus/xfire/spring/xfire.xml
        </param-value>
 </context-param>

 

<servlet>
  <servlet-name>xfire</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <load-on-startup>11</load-on-startup>
 </servlet>

 <servlet-mapping>
  <servlet-name>xfire</servlet-name>
  <url-pattern>/services/*</url-pattern>
 </servlet-mapping>

 

xfire-servlet.xml 配置

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
 <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
  <property name="urlMap">
   <map>
    <entry key="/userServiceWSS4JUsernameToken">
     <ref bean="userServiceWSS4JUsernameToken" />
    </entry>
   </map>
  </property>
 </bean>

 <bean id="domInHandler" class="org.codehaus.xfire.util.dom.DOMInHandler" />

 <bean id="wss4jInHandlerUsernameToken" class="org.codehaus.xfire.security.wss4j.WSS4JInHandler">
  <property name="properties">
   <props>
    <prop key="action">UsernameToken</prop>
    <prop key="passwordCallbackClass">com.wine.ws.handler.PassWordHandler</prop>
   </props>
  </property>
 </bean>
 
 <bean id="baseWebService" class="org.codehaus.xfire.spring.remoting.XFireExporter" lazy-init="false" abstract="true">  
        <property name="serviceFactory">  
            <ref bean="xfire.serviceFactory"/>  
        </property>  
        <property name="xfire">  
            <ref bean="xfire"/>  
        </property>  
    </bean>  
   
    <bean id="userServiceWSS4JUsernameToken" parent="baseWebService">  
        <property name="serviceBean" ref="userWebService"/>  
        <property name="serviceClass" value="com.wine.service.IUserWebService"/>  
        <property name="name" value="userServiceWSS4JUsernameToken"></property>
        <property name="inHandlers">  
            <list>  
                <ref bean="domInHandler"/>  
                <ref bean="wss4jInHandlerUsernameToken"/>  
            </list>  
        </property>  
    </bean>  
</beans>

 

 

验证

public class PassWordHandler implements CallbackHandler {

 private static Map<String,String> users = new HashMap<String,String>();
 
 static {
  users.put(WSPropertiesReader.getUserName(), WSPropertiesReader.getPassword());
 }
 public void handle(Callback[] callbacks) throws IOException,
   UnsupportedCallbackException {
  WSPasswordCallback callback = (WSPasswordCallback) callbacks[0];
  String id = callback.getIdentifer();
  if(WSConstants.PASSWORD_TEXT.equals(callback.getPasswordType())){
   String validPW = users.get(id);
   if(validPW == null || !validPW.equalsIgnoreCase(callback.getPassword())){
    throw new WSSecurityException("password not match ......");
   }
  } else {
   callback.setPassword(users.get(id));
  }
 }
}

 

客户端实现

public class Test {
 private static XFireProxyFactory xFireProxyFactory=new XFireProxyFactory();
 public static void main(String[] args) throws Exception {
  Service service=new ObjectServiceFactory().create(IUserWebService.class);
  String url="http://localhost:8080/dc/services/userServiceWSS4JUsernameToken";
  IUserWebService userWebService=(IUserWebService) xFireProxyFactory.create(service,url);
  Client client=((XFireProxy) Proxy.getInvocationHandler(userWebService)).getClient();
  client.addOutHandler(new DOMOutHandler());
  Properties properties=new Properties();
  properties.setProperty(WSHandlerConstants.ACTION,WSHandlerConstants.USERNAME_TOKEN);
  properties.setProperty(WSHandlerConstants.PASSWORD_TYPE,WSConstants.PW_DIGEST);
  properties.setProperty(WSHandlerConstants.USER,"feng");
  properties.setProperty(WSHandlerConstants.PW_CALLBACK_CLASS,PassWordHandler.class.getName());
  client.addOutHandler(new WSS4JOutHandler(properties));
  System.out.println("xxxxxxxxxxxx"+userWebService.isValidSession("a"));
 }
}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics