Comment créer mon propre filtre avec Spring MVC?
J'utilise Spring MVC (4.0.1) comme un backend pour le reste des services et angularjs comme le frontend.
chaque demande de mon serveur backend a un http en-tête avec un id de session
Je peux lire cet en-tête dans mon serveur backend avec le code suivant:
@Autowired
protected HttpServletRequest request;
String xHeader=request.getHeader("X-Auth-Token"); //returns the sessionID from the header
Maintenant j'appelle cette méthode getPermission(xHeader)
il uniquement retourner true ou false. Si l'utilisateur existe dans ma DB, il return true else false!
Je veux maintenant créer un filtre avec ce comportement, qui vérifie à chaque demande, si l'utilisateur d'avoir la permission d'accéder à mon contrôleurs! Mais si la méthode renvoie false, elle doit renvoyer une erreur 401 et de ne pas atteindre mes contrôleur de!
Comment puis-je faire cela et de créer mon propre filtre? Je n'utilise que Java Config et pas de XML.
Je pense que je dois ajouter le filtre:
public class WebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Filter[] getServletFilters() {
MyOwnFilter=new MyOwnFilter();
return new Filter[] {MyOwnFilter};
}
}
- Pourquoi ne pas utiliser le Printemps de Sécurité à la place?
- Je n'ai pas d'activité wie printemps de sécurité et il n'est pas facile avec java config. Ou pouvez-vous me donner un exemple simple comment je peux utiliser le printemps de sécurité à mettre en œuvre le comportement dans mon premier post ?
- parce que l'ensemble de la
OAuth
approche est un énorme exagéré pour une simple séance de filtre. Aussi, le Printemps en manque un à l'exemple de point sur ce. - Printemps de sécurité qui ne sont pas nécessairement les moyens d'authentification OAuth, vous pouvez faire de l'Authentification Basique, par exemple.
- Je sais que le Printemps de sécurité a un peu d'une courbe d'apprentissage, mais si vous êtes sérieux java backend developer, c'est une très bonne technologie et de savoir, principalement parce que la sécurité n'est pas facile, je sais beaucoup de choses sur elle et préfère les laisser à d'autres. Si vous n'avez pas le temps d'apprendre le Printemps de sécurité, je voudrais aller avec le filtre approche par Avinash ci-dessous
- caisse a accepté de répondre ici, et la section des commentaires a un repo git stackoverflow.com/questions/28242604/...
Vous devez vous connecter pour publier un commentaire.
Alternative aux Filtres, vous pouvez utiliser
HandlerInterceptor
.Puis ajouter l'intercepteur à votre webmvc config.
Is it possible to create my own Annotation for this Interceptor ?
?Controllers
?Ci-dessous est le filtre à effectuer la logique que vous avez mentionné
Et vous avez obtenu ce droit, le printemps config devrait être la suite.
Printemps peut l'utilisation de filtres, mais ils vous recommandons d'utiliser leur version de filtres, connu comme un intercepteur
http://viralpatel.net/blogs/spring-mvc-interceptor-example/
Il y a une course rapide à travers de la façon dont ils travaillent. Ils sont presque identiques pour les filtres, mais conçu pour fonctionner à l'intérieur de la Spring MVC cycle de vie.
Je suppose que vous essayez de mettre en œuvre une sorte de Protocole de sécurité qui est basé sur jwt jeton.
De nos jours il existe plusieurs façons de le faire, mais voici mon préféré:
Ici est de savoir comment le filtre ressemble:
Assez simple, il s'agit de l'utilisateur contrôleur également où vous pouvez trouver de la méthode de connexion:
Bien sûr, nous avons où vous pouvez voir le filtre bean:
Dernier mais non le moins, il est un exemple de contrôleur:
Ici est un lien vers GitHub tous, grâce à nielsutrecht pour le grand travail que j'ai utilisé ce projet comme base de départ et il fonctionne parfaitement.
Vous pouvez également l'appliquer à l'aide d'un aspect avec une coupe transverse (pointcut) qui vise une certaine annotation. J'ai écrit une bibliothèque qui vous permet d'utiliser des annotations qui effectuent des vérifications d'autorisation basé sur un JWT jeton.
Vous pouvez trouver le projet avec l'ensemble de la documentation sur: https://github.com/nille85/jwt-aspect. J'ai utilisé cette méthode plusieurs fois afin d'obtenir un REPOS Backend qui est consommée par une single page application.
J'ai également documentée sur mon blog comment vous pouvez l'utiliser dans un Spring MVC de l'Application: http://www.nille.be/security/creating-authorization-server-using-jwts/
Ce qui suit est un extrait de l'exemple de projet sur https://github.com/nille85/auth-server
L'exemple en-dessous contient une méthode protégée getClient. L'annotation @Autoriser que l'aspect utilise vérifie si la valeur de la "aud jwt réclamation" correspond à la clientId paramètre qui est annoté avec @ClaimValue. Si elle correspond, la méthode peut être entré. Sinon une exception est levée.
L'Aspect lui-même peut être configuré comme:
La PayloadService ce qui est nécessaire peut par exemple être mis en œuvre comme:
Vous pouvez créer et configurer votre propre filtre en procédant comme suit.
1) Créer votre classe par la mise en œuvre de l'interface de filtre et de redéfinir ses méthodes.
2) Maintenant configurer votre filtre dans web.xml
3) Maintenant fournir l'url de la cartographie du filtre.
4) Maintenant, redémarrez votre serveur et vérifiez que toutes les demande web viennent en premier à l'MyFilter, puis passez à l'respectives contrôleur.
J'espère qu'il sera nécessaire de répondre.
Votre approche semble correct.
Une fois que j'ai utilisé quelque chose de semblable à la suivante (Supprimé la plupart des lignes et gardé les choses simples).
Aussi vous avez besoin d'un filtre personnalisé ressemble à ci-dessous.
Espère que cette aide.
En outre, vous pouvez utiliser
FilterRegistrationBean
si vous le Printemps de Démarrage. Il fait la même chose (je crois) quiFilterRegistration.Dynamic
n'.