Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > jax-ws & ws-security


Автор: persten 17.11.2011, 11:02
делаю веб-сервис на jax-ws в netbeans:
привожу упрощенный сервис с одним методом:
MyTemplateService.java
Код

package ws;

import javax.jws.WebService;
import javax.jws.WebParam;

@WebService(serviceName = "MyTemplateService", portName="MyTemplateServicePort")
public class MyTemplateService {
    
    public String Start(@WebParam(name = "inParam") String inParam) {
        return "RESPONSE FROM WEB-SERVICE: " + inParam;
    }
}


сейчас заказчик поставил задачу сделать утентификацию при помощи заголовков в soap-сообщении:

<wsse:Security soap:mustUnderstand="1">
  <wsse:UsernameToken
    xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
    wsu:Id="UsernameToken-1">
        <wsse:Username>USERNAME</wsse:Username>
        <wsse:Password
        Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">PASSWORD</wsse:Password>
        <wsse:Nonce>ipFoznGlUEODSYQc9UeTLA==</wsse:Nonce>
        <wsu:Created>2011-11-01T08:11:01Z</wsu:Created>
  </wsse:UsernameToken>
</wsse:Security>

на клиенте веб-сервиса научился их добавлять при помощи реализации SOAPHandler и HandlerResolver:
AuthentificationHeaderHandler.java
Код

public class AuthentificationHeaderHandler implements SOAPHandler<SOAPMessageContext> {
    @Override
    public boolean handleMessage(SOAPMessageContext smc) {

        Boolean outboundProperty = (Boolean) smc.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
        
        // LOGIN AND PASSWORD ADD TO HEADER
        if (outboundProperty.booleanValue()) {

            //SOAPMessage message = smc.getMessage();

            try {

                SOAPEnvelope envelope = smc.getMessage().getSOAPPart().getEnvelope();
                SOAPHeader header = envelope.addHeader();

                SOAPElement authentification =
                        header.addChildElement("Authentification", "wsse");
                
                SOAPElement username =
                        authentification.addChildElement("Username", "wsse");
                username.addTextNode("TestUser");
                
                SOAPElement password =
                        authentification.addChildElement("Password", "wsse");
                password.addTextNode("TestPassword");
                
                SOAPElement security =
                        header.addChildElement("Security", "wsse", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd");

                SOAPElement usernameToken =
                        security.addChildElement("UsernameToken", "wsse");
                usernameToken.addAttribute(new QName("xmlns:wsu"), "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd");

                SOAPElement username =
                        usernameToken.addChildElement("Username", "wsse");
                username.addTextNode("TestUser");

                SOAPElement password =
                        usernameToken.addChildElement("Password", "wsse");
                password.setAttribute("Type", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText");
                password.addTextNode("TestPassword");
                
                
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return outboundProperty;

    }
}


AuthentificationHeaderHandlerResolver.java
Код

public class AuthentificationHeaderHandlerResolver implements HandlerResolver {
    
public List<Handler> getHandlerChain(PortInfo portInfo) {
      List<Handler> handlerChain = new ArrayList<Handler>();

      AuthentificationHeaderHandler hh = new AuthentificationHeaderHandler();

      handlerChain.add(hh);

      return handlerChain;
   }
}



Код

....
MyTemplateService_Service service = new MyTemplateService_Service();
AuthentificationHeaderHandlerResolver handlerResolver = new AuthentificationHeaderHandlerResolver();
service.setHandlerResolver(handlerResolver);
MyTemplateService port = service.getMyTemplateServicePort();
....



покопал в инете понял что это ws-security, понял что это можно реализовать с помощью Apache WSS4J 
скачал wss4j, но дальше никак не пойму что делать? 

помогите плиз - бьюсь не один день
какие конфиги создавать? как и что подключить к веб-сервису, чтобы обрабатывались и проверялись эти заголовки?
кстати может кто подскажет - что на клиенте сделать - может можно использовать что то попроще и вообще правильео ли я делаю, что сам добавляю это все в заголовки, а не через какую нибудь библиотеку????

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)