JAX-WS webservice und @rolesAllowed
Ist es möglich @RolesAllowed
Anmerkung auf einer JAX-WS webservice und wenn ja, wie?
Ich habe einen webservice auf glassfish 3.1.1 Verwendung der Basic-Authentifizierung, die jedoch Einschränkungen ausgedrückt @RolesAllowed
werden ignoriert. Die Rolle, die Informationen sollten verfügbar sein, wie kann ich darauf zugreifen, wie diese:
@Resource
WebServiceContext wsContext;
if (wsContext.isUserInRole("READ"))
log.info("Role: READ");
Bekomme ich die erwartete Rolle, die aber immer noch alle Methoden sind zugänglich, auch wenn @RolesAllowed
ist eingestellt, um unterschiedliche Rolle. @DenyAll
ist nicht so gut funktioniert.
Wenn diese Anmerkungen werden nicht unterstützt, ist es möglich, um deployment-Deskriptoren zu verwalten, den Zugriff auf webservice-Methoden, basierend auf Benutzer-Rollen?
Bearbeiten:
Diese Teil der JAVA EE 6 tutorial beschreibt die Verwendung des @RolesAllowed
annotation. Es liest
Für Java-EE-Komponenten, Sie Sicherheit definieren Rollen über das @DeclareRoles und @RolesAllowed Metadaten Anmerkungen.
Web services sind nicht aufgeführt, da Java EE-Komponenten im ersten Teil des Tutorials, so wie es aussieht die Sicherheit von Anmerkungen werden nicht unterstützt.
Edit2
Folgende Izan ' s post, ich gab diese einem anderen versuchen. Hier ist was ich getan habe:
@Webservice
@DeclareRoles(value = {"READ", "UPDATE", "DELETE"})
public class ServiceImpl implements Service {
@Override
@WebMethod(operationName = "helloWorld")
@RolesAllowed({"NONE"})
public String helloWorld() throws Exception {
return "Hello World!";
}
}
Verwendung dieser Art von setup, jeder kann die Methode zuzugreifen, egal, welche Rollen festgelegt sind. Der Benutzer authentifiziert (können sehen, dass in der Revision.log), aber keine Genehmigung erfolgt. Wie oben gesagt, ich kann auf die Rolle von WebServiceContext
(ich hab ja eigentlich Handbuch Autorisierung mit dieser info).
Hinzufügen @Stateless
Anmerkungen, lassen Sie mich die security-Annotationen. So @permitAll
funktioniert wie erwartet. Aber mit den Rollen immer noch nicht funktioniert, da der Benutzer nicht authentifiziert jetzt. Sie zeigen sich als ANONYMOUS
im audit-log und der Zugriff wird Ihnen verweigert.
Meine web.xml
sieht wie folgt aus:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<display-name>OneMore</display-name>
<security-constraint>
<display-name>WebServiceSecurity</display-name>
<web-resource-collection>
<web-resource-name>Authorized users only</web-resource-name>
<url-pattern>/service</url-pattern>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>READ</role-name>
<role-name>UPDATE</role-name>
<role-name>DELETE</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
</login-config>
<security-role>
<role-name>READ</role-name>
</security-role>
<security-role>
<role-name>UPDATE</role-name>
</security-role>
<security-role>
<role-name>DELETE</role-name>
</security-role>
</web-app>
Glassfish-web.xml
nur maps Rolle, Namen, Gruppennamen, wie diese:
<security-role-mapping>
<role-name>READ</role-name>
<group-name>READ</group-name>
</security-role-mapping>
Edit 3
Dank Izan und unzählige versuche später habe ich es endlich funktioniert.
Wie gesagt, der wichtigste Punkt war die Umstellung von einer einfachen web service zu einer EJB-web-service durch das hinzufügen @Stateless
annotation. Dies ermöglicht die Verwendung der Sicherheit Anmerkungen.
Diese änderung erforderlich, ändern Sie die deployment-Deskriptoren als gut. Während der ursprüngliche web service benötigt eine glassfish-web.xml
für den Aufbau der Rollen, eine glassfish-ejb-jar.xml
erforderlich ist danach.
InformationsquelleAutor TPete | 2012-01-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vielleicht ist das eine ziemlich dumme Frage, aber sind deine EJBs webservices? Wie bereits in Sicherheit-Anmerkungen und-Autorisierung in GlassFish und Java EE 5 SDK
Benutze ich diese Anmerkungen bei der bottom-up WS von stateless EJBs und Sie arbeiten wie ein Charme in JBoss.
BEARBEITEN 1 @TPete
Ich ' ll fügen Sie einige code, um Ihnen zu zeigen, mehr oder weniger, was ich Tue.
Als Schnittstelle
WebContext, EndpointConfig und SecurityDomain sind JBoss-Anmerkung, aber ich nehme an, es ist etwas ähnliches für GlassFish oder einen gleichwertigen Weg, es zu tun. Die Sicherheits-Domäne enthalten, die in einem deployment-descriptor für jboss -, und definiert in der login-config.xml aus der Konfigurations-Dateien des JBoss.
EDIT 2 @TPete
Ich nehme an, müssen Sie einige EJB-deployment-Deskriptoren von Glasfischen, eine sun-ejb-jar.xml Datei-Paket in Ihr OHR. Wieder, aus dem gleichen Artikel, wie geschrieben, in der Antwort, es ist ein Mit den Deployment-Deskriptoren Kapitel, dass Staaten
Da Sie bei der Definition einer EJB-web-service-endpoint, ich denke, Sie sollten diesem Deskriptor in Ihr OHR. Werfen Sie einen Blick an diesem Artikel, er beschreibt sehr gut den Prozess, den Sie Folgen 🙂
Ich denke, posten Sie es als Kommentar wäre am besten geeignet, obwohl, bis Sie haben 50 rep, nicht möglich
Ich denke nicht, aber dies ist mein erstes Java EE Projekt und ich bin nicht so vertraut mit der Terminologie. Vielleicht postest ein Beispiel mag verdeutlichen das Problem. Ich benutze nur die
@Webservice
Anmerkung jetzt. Ich habe versucht, zu kombinieren es mit@Stateless
aber ich war nicht in der Lage, den Zugriff auf die web-service über Https hinterher.Danke für die info! Ich habe auch so gedacht, denn es ist nicht wirklich eine Antwort, aber als Sie sagte, ich konnte nicht. Ich habe erweitert die Antwort, aber ich weiß nicht, ob ich getan haben sollte es in einem Kommentar auch...
Die Erweiterung um eine Antwort ist definitiv der Weg zu gehen. Sieht aus wie es gelöst es für die auch offen.
InformationsquelleAutor igracia
Die ursprüngliche Frage ist alt, aber ich bin noch einen Kommentar hinterlässt, gerade bei jemanden wie mich, der stolpert über Sie. Ab EJB 3.1, EJBs werden können, verpackt in einem KRIEG, den Modul, aber wenn es um die Sicherung, EJB-deployment-Deskriptoren, die benutzt werden müssen. Was ist nicht klar, in der spec ist, dass EJBs können nicht deklariert werden, da Servlets in web.xml sonst ist die app nicht mehr gestartet werden.
Hier einen ausgezeichneten Artikel über die Verpackung EJBs im KRIEG-Module und die Unterschiede mit Verpackung in die EJB-JAR-Module:
http://pic.dhe.ibm.com/infocenter/wasinfo/v8r0/index.jsp?topic=%2Fcom.ibm.websphere.nd.multiplatform.doc%2Finfo%2Fae%2Fae%2Fcejb_ejbinwar.html
InformationsquelleAutor Abhijit Sarkar