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

Schreibe einen Kommentar