Cet article présente principalement l'exemple de code d'Express + Node.js pour implémenter l'intercepteur. L'éditeur pense que c'est plutôt bien, je vais donc le partager avec vous maintenant et le donner comme référence. Suivons l'éditeur et jetons un oeil.
Introduction
L'intercepteur ici correspond au filtre dans spring MVC, tout http Le code correspondant /resource n’est accessible qu’après le traitement de la demande par l’intercepteur.
Le scénario d'application le plus typique consiste à mettre en œuvre un contrôle d'accès, en donnant à différents utilisateurs/groupes d'utilisateurs différents droits d'accès aux pages et aux interfaces, et en autorisant uniquement l'accès aux pages et interfaces autorisées.
Scénario
app.post('/login', function(request, res, next){ // do something }); app.post('/getData',function(request, res, next){ // do something var data="some data"; res.send({"data":data}); });
Si aucun traitement n'est effectué, toute personne qui envoie la demande de publication de getData peut directement depuis Reading les données en arrière-plan ne nécessitent aucune connexion, il vous suffit de connaître l'interface.
correspond à chaque interface. Si un jugement d'autorisation est ajouté sous chaque interface, le code sera très répétitif, donc orienté aspect Vous pouvez ajouter un intercepteur avant chaque requête http, pour réaliser le. fonction de jugement de permission.
Mise en œuvre
// 所有用户可以访问index.html, error.html // admin可以访问admin.html, /getData // 登陆用户可以访问home.html app.all('/*', function(request, res, next){ // 思路: // 得到请求的url // 然后得到request的cookie,根据cookie得到当前登陆的用户 // 判断用户对应url的权限 var jsPattern=/\.js$/; var url=request.orignalUrl; if(jsPattern.test(url)){ // 公共部分,放行 next(); return; } if(url=='index.html'||url=='error.html'){ next(); return; } var cookie=JSON.stringify(req.cookies); if(access){ next(); } else{ res.redirect('error.html'); } });
Idées de mise en œuvre :
1. Demandez (ce qui précède suffit) et obtenez l'URL actuellement visitée
2 Obtenez l'utilisateur actuel en fonction du cookie
3. URL et l'utilisateur S'il est accessible
4 S'il peut appeler next();
S'il n'est pas accessible, renvoie erreur. message
Remarque
next(); a traité la demande, comme le précédent app.post( '/getData'), lorsque le traitement du code ici est terminé, il reviendra au next(); correspondant, donc la relation correspondante doit être bien gérée si nécessaire, return est nécessaire pour terminer la fonction en cours, sinon une erreur se produira.
Pour les parties publiques, telles que les plug-ins js, certaines images et les parties css, elles peuvent être publiées directement.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!