sobota, 12 lutego 2011

Łączenie z zabezpieczonym WebService z klienta Javy

... a dokładniej łączenie z WebService opartą na EJB przy pomocy loginu i hasła. Jeśli chcemy wykorzystać certyfikaty cała procedura będzie wyglądała całkiem podobnie.

  1. Aplikacja: Nasza usługa powinna mieć annotacje @WebContext z authMethod="BASIC"
@WebService
@Stateless
@WebContext(contextRoot = "ws", authMethod = "BASIC")
public class MyService implements IMyService {

    @Resource
    private SessionContext ctx;
   
    public void foo() {
         String userLogin = ctx.getCallerPrincipal().getName();
         // dostep do loginu
    }
}



   2.  Aplikacja: META-INF/jboss.xml powinien zawierać definicję security domain, wykorzystane zostanie jaas
java:/jaas/MySecurityDomain 

  3.  Serwer: conf/login-config.xml powinien zawierać definicję security domain. W tym wypadku jest to najprostsze z możliwych logowanie przy pomocy user.properties i roles.properties

  
    
    
  


w login-config

  4.  Serwer: w conf powinny znajdować się pliki user.properties i roles.properties, kolejno:
username1=password1
username2=password2

username1=administrator
username2=operator 


Voila! Tyle po stronie serwera. Po stronie aplikacji klienckiej musimy dodać credentiale przed połączeniem się z usługą sieciową. Zakładam, że klient usługi został wygenerowany przez wsimport (albo jakoś tak) JBossa. Robi się to tak:

        import javax.xml.ws.BindingProvider;
        //....
        MyServiceService port = new  MyServiceService();
        IMyService myService = port.getMyServicePort();
        Map requestContext = ((BindingProvider)myService).getRequestContext();
        requestContext.put(BindingProvider.USERNAME_PROPERTY, "username1");
        requestContext.put(BindingProvider.PASSWORD_PROPERTY, "password1");
        myService.foo(); // autoryzowana metoda



Brak komentarzy:

Prześlij komentarz