2015-12-23 1 views
2

J'ai développé un service web de base Restful dans eclipse en utilisant maven. J'utilise tomcat 7.0 comme serveur, le SE 1.7 et le jersey comme source JAX-RS, mais je n'utilise pas JPA. J'ai une DB MySQL et je me connecte à la DB avec Connector J fourni par MySQL. J'ai une table d'employé et une table de département dans ma base de données et les classes modèles appropriées pour ces tables. Mon service Web fournit uniquement des méthodes get qui renvoient les informations sur les employés et les départements au format JSON.Authentification et autorisation sur un webservice reposant simple

Cela fonctionne parfaitement bien, mais maintenant je veux que le client se connecte avant d'avoir accès aux méthodes webservice.

Le client n'est pas défini sur jet, mais il doit s'agir d'un site Web sur mon serveur Tomcat qui utilise javascript et JQuery pour interagir avec le service Web.

Maintenant, je veux ajouter un service d'authentification et d'autorisation à mon service web. Cela devrait vérifier si l'utilisateur est connecté et a les autorisations pour demander un employé ou un service défini. Par exemple, un de mes get-méthodes est:

@GET 
@Path("/employee/{id}") 
@Produces(MediaType.APPLICATION_JSON) 
public Employee getEmployee(@PathParam("id") long id) { 
    return EmployeeDBService.getDefinedEmployee(id); 
} 

et maintenant il est appelé par le client avec serverURL/myresource/employé/10 mais l'utilisateur connecté dans le client n'a pas l'autorisation de demander l'employé avec l'id 10.

Je veux également ajouter une fonctionnalité qui déconnecte le client après être resté un moment inactif.

J'ai déjà recherché un bon tutoriel et une bonne technologie pour implémenter le service d'authentification et d'autorisation au webservice. Mais je n'ai pas vraiment eu de succès, parce que:

  • Je suis novice en matière de développement de services Web Java reposants.
  • Et je n'ai trouvé que des exemples qui sont implémentés dans un service web SOAP et ne lisent jamais quelque chose à propos d'une déconnexion automatique après un certain temps inactif.

Est-ce que quelqu'un de vous connaît les bons liens/exemples/technologies comment résoudre mon problème?

S'il y a une question, je vais y répondre. Merci pour votre aide et votre temps!

+1

Demander des ressources hors site est hors sujet. Je m'en tiendrai à demander comment atteindre ce que vous devez atteindre et ne pas demander de liens/outils/code. Et sachez que ce n'est pas un sujet facile, si vous cherchez des réponses faciles - il n'y en a pas. La sécurité est bien sûr une partie standard de la pile technologique, puisque c'est Jersey, il a un bon manuel d'utilisation avec un bon chapitre sur la sécurité. https://jersey.java.net/documentation/latest/security.html. Mais ce chapitre suppose que vous connaissez les tenants et aboutissants de la sécurité JavaEE.(edit: désolé, vous avez mentionné Jersey) – Gimby

+0

"Et sachez que ce n'est pas un sujet facile, si vous cherchez des réponses faciles - il n'y en a pas.La sécurité est bien sûr une partie standard de la pile technologique" Exactement c'est mon problème. J'apprends comment développer un webservice reposant depuis quelques jours, mais je n'ai trouvé aucune source qui combine les connaissances dont j'ai vraiment besoin pour résoudre le problème donné. Tout cela fait partie d'un projet que je dois remettre dans environ 2 mois, et je ne veux pas tout faire la semaine dernière ... Mais ma recherche d'une très bonne source n'a toujours pas réussi . J'ai seulement appris Java il y a un an ...... Mais merci pour votre aide. –

Répondre

1

Comme commenté, le security chapter in the Jersey documentation vous montrera comment intégrer le mécanisme d'authentification dans vos API REST: Cette partie de l'authentification va seulement vérifier si l'utilisateur est connecté et qui il est.

l'utilisateur connecté dans le client n'a pas l'autorisation de demander employé avec l'id 10

JAX/RS ne sait rien au sujet de votre modèle de données et leurs privilèges. Mais il vous donnera son identifiant. Vous devez implémenter la logique par vous-même. Probablement ce sera la première ligne de chacune de vos méthodes REST.

+0

Cela signifie, par ex. que je me connecte à ma base de données où j'ai enregistré les noms d'utilisateur, mots de passe et leurs persmissions et vérifier avant de retracer quelque chose si l'utilisateur connecté, je sais, a la permission de cet appel? –

+0

Exactement. Ou: Le SecurityContext peut également vous indiquer quels sont les rôles de l'utilisateur (SecurityContext.isUserInRole). Si le nombre d'employés est faible, vous pouvez utiliser un rôle pour chaque employé. –

+0

Ok, merci pour votre aide Emmanuel Keller, je pense que cela devrait m'aider. –