2015-04-18 3 views
0

Im suivi et en utilisant l'exemple de code de Custom Authenticator and Login Module et UserAdapter de Java SQL Adapter.Mobilefirst 7.0 la protection d'un adaptateur Java échoue avec l'authentificateur personnalisé

Je veux obtenir la liste des utilisateurs après l'authentification.

Ma configuration du fichier authenticationConfig.xml

<realms> 
    <realm loginModule="CustomLoginModule" name="CustomAuthenticatorRealm"> 
     <className>com.mypackage.MyCustomAuthenticator</className> 
    </realm> 
</realms> 

<loginModules> 
    <loginModule name="CustomLoginModule"> 
     <className>com.mypackage.MyCustomLoginModule</className> 
    </loginModule> 
</loginModules> 

Ma configuration de l'adaptateur Java, fichier UserAdapterResource.java

@GET 
@Produces("application/json") 
@OAuthSecurity(scope="CustomAuthenticatorRealm") 
public Response getAllUsers() throws SQLException{ 
    JSONArray results = new JSONArray(); 
    Connection con = ds.getConnection(); 
    PreparedStatement getAllUsers = con.prepareStatement("SELECT * FROM users"); 
    ResultSet data = getAllUsers.executeQuery(); 

    while(data.next()){ 
     JSONObject item = new JSONObject(); 
     item.put("userId", data.getString("userId")); 
     item.put("firstName", data.getString("firstName")); 
     item.put("lastName", data.getString("lastName")); 
     item.put("password", data.getString("password")); 

     results.add(item); 
    } 

    getAllUsers.close(); 
    con.close(); 

    return Response.ok(results).build(); 
} 

Mais quand j'invoque la procédure ci-dessus sur côté client, il revenir encore une réponse sans authentification exiger, alors qu'il doit montrer un module de connexion

+0

Ajoutez la réponse d'erreur. Ajoutez l'implémentation de l'adaptateur. –

+0

Aucune erreur, il retourne toujours un respone avec des données de SQL, avec l'authentification out – BraveWolf

+0

Je ne vois nulle part dans l'application où il serait attendu pour un formulaire de connexion à apparaître si vous cliquez sur ajouter des utilisateurs. –

Répondre

1

De votre code, vous avez seulement un gestionnaire de défi pour le CustomAuthenticatorRealm domaine. Pourquoi ne pas mettre à jour votre adaptateur et le protéger avec ce même domaine au lieu d'utiliser myRealm.

Mise à jour UserAdapterResource.java squelette

@Path("/") 
public class UserAdapterResource { 
    // ... 

    @POST 
    @OAuthSecurity(scope="CustomAuthenticatorRealm") 
    public Response createUser(@FormParam("userId") String userId, 
           @FormParam("firstName") String firstName, 
           @FormParam("lastName") String lastName, 
           @FormParam("password") String password) 
             throws SQLException{ 
     // ... 
    } 

    @GET 
    @Produces("application/json") 
    @Path("/{userId}") 
    public Response getUser(@PathParam("userId") String userId) throws SQLException{ 
     // ... 
    } 

    @GET 
    @Produces("application/json") 
    @OAuthSecurity(scope="CustomAuthenticatorRealm") 
    public Response getAllUsers() throws SQLException{ 
     // ... 
    } 

    // it's a good practice to protect this operation 
    @PUT 
    @Path("/{userId}") 
    @OAuthSecurity(scope="CustomAuthenticatorRealm") 
    public Response updateUser(@PathParam("userId") String userId, 
           @FormParam("firstName") String firstName, 
           @FormParam("lastName") String lastName, 
           @FormParam("password") String password) 
             throws SQLException{ 
     // ... 

    } 

    // it's a good practice to protect this operation 
    @DELETE 
    @Path("/{userId}") 
    @OAuthSecurity(scope="CustomAuthenticatorRealm") 
    public Response deleteUser(@PathParam("userId") String userId) throws SQLException { 
     // ... 
    } 

} 

Avec ces changements, lorsque l'application se lance, il affichera le formulaire de connexion pour authentifier avant d'afficher la liste des utilisateurs.

MISE À JOUR:

Java protection adaptateur utilise OAuth et que le serveur MobileFirst émet un jeton pour l'authentification. Ce jeton a une durée de vie avec une expiration. La déconnexion d'un domaine n'affecte pas le jeton. Une façon d'implémenter cela en fonction de vos besoins est de diminuer le TTL (durée de vie) de votre jeton à quelque chose comme 10 ou 15 secondes (ou ce que vous voulez). Vous pouvez le faire en définissant l'attribut expirationInSeconds dans votre module de connexion à authenticationConfig.xml.

authenticationConfig.xml

<!-- token will expire 10 seconds after being issued --> 
    <loginModule name="CustomLoginModule" expirationInSeconds="10"> 
     <className>com.mypackage.MyCustomLoginModule</className> 
    </loginModule> 

Si 10 secondes se sont écoulées depuis l'application connecté au serveur via une invocation de l'adaptateur ou toute autre méthode, l'utilisateur devra réauthentifier.

+0

J'ai fait exactement votre réponse, mais il montre toujours la liste des utilisateurs, au lieu de montrer le formulaire de connexion. Mon code mis à jour https://www.dropbox.com/s/9g6tjitw49zr74h/LoginModule2.rar?dl=1 – BraveWolf

+0

Je vais jeter un oeil à ce numéro –

+1

@ BraveWolf, nous ne sommes pas ici pour soutenir vos études.C'est une communauté et nous répondrons quand nous le pourrons et pas avant. –