2017-09-13 2 views
0

Je rencontre des problèmes lors de la configuration de mon service REST sécurisé. Je voulais créer un service de connexion/déconnexion simple et le désordre.@RolesAllowed n'a aucun effet sur mon service RESTful

Je suivais ce tutoriel. J'ai sauté la partie avec le formulaire de connexion et codé en dur le nom d'utilisateur et mot de passe dans le service. (login()) http://www.blog.btbw.pl/java/wildfly-9-login-form-simple-example/

Tout a bien fonctionné jusqu'à ce que je voulais utiliser l'annotation @RolesAllowed. J'ai donc créé une nouvelle méthode (adminInfo()) avec cette annotation. Mais je suis arrivé à la conclusion que l'annotation ne faisait aucune différence. J'ai réussi à l'appeler avec succès sans être connecté avec le rôle "ADMIN". Peut-être que l'un de vous, les gens intelligents à l'extérieur, sait ce que j'ai fait de mal et est capable de m'aider. Désolé pour ma mauvaise grammaire, je n'ai pas l'habitude d'écrire beaucoup en anglais.

Merci.

Ce sont mes fichiers:

J'utilise un service simple qui ressemble à ceci:

@Context 
private HttpServletRequest request; 

@GET 
@Path("/hello") 
public Response hello() { 
    return Response.ok().entity("Hello, World!").build(); 
} 

@GET 
@Path("/logout") 
@RolesAllowed("ADMIN") 
public Response adminInfo() { 
    return Response.ok().entity("hello " + request.getUserPrincipal().getName()).build(); 
} 

@POST 
@Path("/login") 
public Response login() { 
    try { 
     request.login("admin", "admin"); 
     return Response.ok().entity("login successful").build(); 

    } catch (Exception e) { 
     return Response.status(Status.BAD_REQUEST).entity("login failed").build(); 
    } 
} 

@GET 
@Path("/logout") 
@RolesAllowed("ADMIN") 
public Response logout() { 
    try { 
     request.logout(); 
     return Response.ok().entity("logout successful").build(); 

    } catch (Exception e) { 
     return Response.status(Status.BAD_REQUEST).entity("logout failed").build(); 
    } 
} 

Mon jboss-web.xml ressemble à ceci:

<jboss-web> 
    <context-root>/</context-root> 
    <security-domain>jaas-realm</security-domain> 
</jboss-web> 

Et mon web.xml ressemble à ce qui suit:

<web-app> 
    <security-constraint> 
     <web-resource-collection> 
      <web-resource-name>Authentication</web-resource-name> 
      <url-pattern>/*</url-pattern> 
      <http-method>GET</http-method> 
      <http-method>POST</http-method> 
     </web-resource-collection> 
     <auth-constraint> 
      <role-name>ADMIN</role-name> 
     </auth-constraint> 
    </security-constraint> 

    <login-config> 
     <auth-method>BASIC</auth-method> 
     <realm-name>jaas-realm</realm-name> 
    </login-config> 

    <security-role> 
     <role-name>ADMIN</role-name> 
    </security-role> 
</web-app> 

Mon wildfly standalone.xml est configuré comme ceci:

<security-domain name="jaas-realm" cache-type="default"> 
    <authentication> 
     <login-module name="login-module" code="Database" flag="required"> 
      <module-option name="dsJndiName" value="java:/datasource"/> 
      <module-option name="principalsQuery" value="select password from users where username=?"/> 
      <module-option name="rolesQuery" value="select rolename, 'Roles' from roles where username=?"/> 
      <module-option name="hashAlgorithm" value="SHA-256"/> 
      <module-option name="hashEncoding" value="base64"/> 
      <module-option name="unauthenticatedIdentity" value="guest"/> 
     </login-module> 
    </authentication> 
</security-domain> 

Répondre

1

Je l'ai fait finalement travailler. J'ai dû ajouter l'annotation @Stateless à mon service. Merci à un poste qui a été fait il y a 5 ans: JAX-WS webservice and @rolesAllowed

je n'étais pas en mesure de trouver la solution sur Google, mais 5 minutes sur Stackoverflow était tout ce que je avais besoin :)

1

Vous avez défini deux ressources avec la même voie que @Path ("/ fermeture de session"). Une ressource est identifiée de manière unique par son PATH. S'il vous plaît avoir des chemins différents et essayer

+0

Merci, je fait une copypasta stupide. Je l'ai changé mais ça ne marche toujours pas. –