SOAP-Endpunkt per Eclipse-Wizard erstellt, wie nun mit Auth schützen?

EyesKiller

Mitglied
Servus,
ich möchte ein Webservice implementieren damit die Clients per SOAP mit Webservice kommunizieren kann. Ich habe die Tut befolgt:
SOAP web service example in java using eclipse | Java tutorial for beginners
SOAP funktioniert einwandfrei (getestet mit SoapUI). Nun möchte ich den SOAP-Endpunkt mit Authentifizierung schützen, d.h. die WebService ist nur für registrierte User verfügbar.

Tja... ich habe leider keine Dokumentation gefunden in Zusammenhang mit Eclipse-Projekt (vor allem wenn das Projekt so erstellt wurde wie in erwähnten Tut beschrieben). :(

Also... wo soll ich was konfigurieren/implementieren nachdem ich die Schritte wie Tut erledigt habe? Ich habe auch mit Axis2 rumprobiert. Leider vergeblich.

Mein Ziel:
SOAP nur per Auth in SOAP-Header (Auf Server mit JDBCRealm, DB auf Server ist bereits vorhanden). Als Webserver steht Tomcat6 zur Verfügung.

cu Floh
 
Zuletzt bearbeitet:

EyesKiller

Mitglied
Hi Nochmal hier ne Update weil ich zumindest die Ansatz hier posten sollte was ich danach versucht habe (jetzt ohne Axis2). Ich habe soweit ich aus folgender URL verstanden habe versucht.
Web Service Authentication using Java
(Hoffe hier verlinken ist ok, oder? Ansonsten kann ich gern wegmachen falls nicht erwünscht.)

Aktuell habe ich folgende Dateien:

Datei SayHello.java
Java:
package org.erfurth.floh.xmasmanager;

import javax.jws.WebMethod;
import javax.jws.WebService;

@WebService
public interface SayHello {
	@WebMethod
	public String talk(String name);
}

Datei SayHelloImpl.java
Java:
package org.erfurth.floh.xmasmanager;

import java.util.Map;
import java.util.List;

import javax.annotation.Resource;
import javax.xml.ws.WebServiceContext;
import javax.xml.ws.handler.MessageContext;

public class SayHelloImpl implements SayHello {
	@Resource
	WebServiceContext wsctx;
	
	@Override
	public String talk(String name)
	{
		MessageContext mctx = wsctx.getMessageContext();
		
		Map http_headers = (Map) mctx.get(MessageContext.HTTP_REQUEST_HEADERS);
		List<String> userList = (List) http_headers.get("Username");
		List<String> passList = (List) http_headers.get("Password");
		
		String username = "";
		String password = "";
		
		if(userList != null)
		{
			username = userList.get(0);
		}
		
		if(passList != null)
		{
			password = passList.get(0);
		}
		
		if (username.equals("floh")
				&& password.equals("asdfqwer"))
			return "Hi " + name;
		else
			return "Go away!";
	}
}

Findet ihr vielleicht nen Anfängerfehler?
Ich bin auch nicht sicher welche Klasse ich auswählen soll wenn ich Web Service erstellen möchte:
1. Rechtsklick auf Projekt
2. New... -> Other... -> Web Service -> Web Service
3. Alle Parameter in der Dialog unverändert
a. Service Implementation welche soll ich denn nehmen? SayHello.Class (d.h. Interface) oder die Implementierung SayHelloImpl.Class?
b. die Obere Schieberegler habe ich auf "Start Service" eingestellt
4. Auf Finish angeklickt und Tomcat6 neugestartet.
5. WebServiceaufruf mit SoapUI (nachdem ich wsdl-Datei heruntergeladen und geöffnet habe)
=> NullPointerException in der Zeile 17 von SayHelloImpl.java:
Code:
MessageContext mctx = wsctx.getMessageContext();
Dort ist die Variable wsctx=NULL => nicht gut!

Datei SayHello.wsdl wurde nach Schritt 4. (siehe oben) von Eclipse automatisch erstellt.
[XML]<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions targetNamespace="http://xmasmanager.floh.erfurth.org" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://xmasmanager.floh.erfurth.org" xmlns:intf="http://xmasmanager.floh.erfurth.org" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<!--WSDL created by Apache Axis version: 1.4
Built on Apr 22, 2006 (06:55:48 PDT)-->
<wsdl:types>
<schema elementFormDefault="qualified" targetNamespace="http://xmasmanager.floh.erfurth.org" xmlns="http://www.w3.org/2001/XMLSchema">
<element name="talk">
<complexType>
<sequence>
<element name="name" type="xsd:string"/>
</sequence>
</complexType>
</element>
<element name="talkResponse">
<complexType>
<sequence>
<element name="talkReturn" type="xsd:string"/>
</sequence>
</complexType>
</element>
</schema>
</wsdl:types>

<wsdl:message name="talkResponse">

<wsdl:part element="impl:talkResponse" name="parameters">

</wsdl:part>

</wsdl:message>

<wsdl:message name="talkRequest">

<wsdl:part element="impl:talk" name="parameters">

</wsdl:part>

</wsdl:message>

<wsdl:portType name="SayHelloImpl">

<wsdl:eek:peration name="talk">

<wsdl:input message="impl:talkRequest" name="talkRequest">

</wsdl:input>

<wsdl:eek:utput message="impl:talkResponse" name="talkResponse">

</wsdl:eek:utput>

</wsdl:eek:peration>

</wsdl:portType>

<wsdl:binding name="SayHelloImplSoapBinding" type="impl:SayHelloImpl">

<wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>

<wsdl:eek:peration name="talk">

<wsdlsoap:eek:peration soapAction=""/>

<wsdl:input name="talkRequest">

<wsdlsoap:body use="literal"/>

</wsdl:input>

<wsdl:eek:utput name="talkResponse">

<wsdlsoap:body use="literal"/>

</wsdl:eek:utput>

</wsdl:eek:peration>

</wsdl:binding>

<wsdl:service name="SayHelloImplService">

<wsdl:port binding="impl:SayHelloImplSoapBinding" name="SayHelloImpl">

<wsdlsoap:address location="http://localhost:8080/XMasManager/services/SayHelloImpl"/>

</wsdl:port>

</wsdl:service>

</wsdl:definitions>[/XML]

Hm... hoffe jemand kann mir da ein wenig helfen. Ich mach mal Schluss für heute, außer jemand postet. ;)
cu Floh
 
Zuletzt bearbeitet:

EyesKiller

Mitglied
Gelöst mit Rampart&Axis2. Folgende 2 URLs haben mir weitergeholfen:
1. Web Services with Eclipse, Tomcat, Axis, Rampart | Kuba Krzemien
2. Open Source Security: UsernameToken processing changes in WSS4J 1.6

Zu URL 1 ist die eigentliche direkte Antwort auf meine Frage. Allerdings ist die neueste Version von WSS4J (ab 1.6) nicht abwärtskompatible (siehe URL 2)

Zu beachten ist, daß man ab Version 1.6.x von WSS4J nicht mehr mit der Funktion getPasswort() prüft, sondern man muß mit setPasswort() die erwartete Passwort setzen.

D.h. statt:
Java:
	public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
		for(int i = 0; i < callbacks.length; i++) {
			WSPasswordCallback pwcb = (WSPasswordCallback)callbacks[i];
			if(pwcb.getIdentifier().equals("test") && pwcb.getPassword().equals("pass")) { //<= Falsch!
				return;
			} else {
				throw new UnsupportedCallbackException(callbacks[i], "Incorrect login/password");
			}
		}
	}
Muß man ab 1.6.x wie folgt implementieren:
Java:
	public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
		for(int i = 0; i < callbacks.length; i++) {
			WSPasswordCallback pwcb = (WSPasswordCallback)callbacks[i];
			if(pwcb.getIdentifier().equals("test")) {
				pwcb.setPassword("pass"); // <= Richtig
				return;
			} else {
				throw new UnsupportedCallbackException(callbacks[i], "Incorrect login/password");
			}
		}
	}
cu Floh
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Behörden Soap service konsumieren SOA 4
M problem mit großem SOAP Response SOA 3
pkm Struktur einer SOAP-Anwendung SOA 28
N SOAP-Nachrichten verschlüsseln | jax-ws SOA 0
S Soap Request absenden - Anfängerfrage SOA 0
I SOAP Webservice Methoden und Parameter auslesen SOA 3
D [SOAP] wsdl & maven & java 1.8 SOA 6
P SOAP Webservice mit HTTP Basic Authentifizierung SOA 1
M Kann man das Protokoll eines REST (Jersey) bzw. SOAP Web Services manipulieren? SOA 5
G SOAP Response "faken" SOA 8
D SOAP Webservice (SAP) SOA 3
K Flex-Ablöse - Was mit den SOAP-Services tun? SOA 5
G Soap, http SOA 3
A Soap with Attachments - Unmarshalling Error SOA 4
K Axis2 SOAP Logging via Client SOA 2
E mit Apache SOAP verschachtelte XML-Tags generieren SOA 2
F XML per SOAP übermitteln SOA 2
H SOAP und Synonym-Wortschatz Leipzig SOA 4
V SOAP over JMS - wie funktionierts? SOA 3
C Undefinierte Zeichenketten in SOAP Nachricht SOA 4
E Lesen der kompletten SOAP als WebService Provider/Server SOA 4
R SOAP Nachrichtenaustausch zwischen Axis2-WSs SOA 5
R Webservice aufrufen mit SOAP Style.DOCUMENT ? SOA 5
I SOAP WSDL und UDDI SOA 12
G --> SOAP zwischen Intranet und Internet SOA 3
K Mappen von Objektmethoden bei SOAP SOA 7
C Bei JAX-WS Endpunkt ändern SOA 2
N wie exportiert man Jersey Projekt mit Eclipse. SOA 0
J JAX-WS, Eclipse und seltsame, aber wiederkehrende Fehler SOA 2
T Verwendung von Eclipse Projekten im Axis2 Webservice SOA 8
R AXIS2 u. Eclipse (Galileo) Fehler bei Serverstart SOA 2
G Deploy Apache CXF WebService mit Eclipse SOA 2
F Tutorial zu WebService mit JBoss, Eclipse und Jax-ws? SOA 3
L webservice frage (eclipse/wtp, wsdl) SOA 12

Ähnliche Java Themen

Neue Themen


Oben