


SpringMVC Learning Series (9) Explication détaillée du code pour implémenter la vérification des autorisations basée sur les annotations
La gestion des autorisations est requise pour la plupart des systèmes afin de déterminer le contenu que les différents utilisateurs peuvent voir. Alors, comment implémenter la vérification des autorisations dans Spring MVC ? Bien entendu, nous pouvons continuer à utiliser le filtre dans la servlet pour y parvenir. Mais avec l'aide de l'intercepteur d'action de Spring MVC, nous pouvons implémenter une vérification des autorisations basée sur les annotations.
SpringMVC Learning Series (9) Explication détaillée du code pour implémenter la vérification des autorisations basée sur les annotations. Présentez d'abord l'intercepteur d'action :
HandlerInterceptor est l'interface d'intercepteur fournie par Spring MVC pour nous permettre d'implémenter notre propre logique de traitement. Le contenu de HandlerInterceptor est le suivant :
public interface HandlerInterceptor { boolean preHandle( HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception; void postHandle( HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception; void afterCompletion( HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception; }
Vous pouvez voir que l'interface dispose de 3 méthodes, leurs significations sont les suivantes :
preHandle : exécuté avant d'exécuter la logique de traitement dans l'action, il renvoie boolean, ici si nous retournons true, nous continuerons à exécuter postHandle et afterCompletion, si nous renvoyons false, nous interromprons l'exécution.
postHandle : exécuté avant de revenir à la vue après avoir exécuté la logique dans l'action.
afterCompletion : exécuté après le retour de l'action à la vue.
L'adaptateur HandlerInterceptorAdapter est l'implémentation par défaut de Spring MVC de HandlerInterceptor afin de faciliter notre utilisation de HandlerInterceptor. Les trois méthodes à l'intérieur n'effectuent aucun traitement. La méthode preHandle renvoie directement true, de sorte que nous n'avons besoin d'en implémenter que trois après. hériter de HandlerInterceptorAdapter. Dans la méthode, nous n'avons besoin que de la méthode dont nous avons besoin, contrairement à l'héritage de HandlerInterceptor, qui doit être implémenté indépendamment du fait que trois méthodes soient nécessaires.
Bien sûr, avec l'aide de HandlerInterceptor, nous pouvons implémenter de nombreuses autres fonctions, telles que la journalisation, l'analyse du temps de traitement des demandes, etc., et la vérification des autorisations n'est que l'une d'entre elles.
SpringMVC Learning Series (9) Explication détaillée du code pour implémenter la vérification des autorisations basée sur les annotations. Complétons la fonction de vérification des autorisations d'annotation étape par étape.
Ajoutez d'abord un contrôleur de compte et une action de connexion et une vue pour simuler le passage à la page de connexion lorsqu'il n'y a pas d'autorisation. Le contenu est le suivant :
Dans le com.demo.web.controllers. package AccountController.java:
package com.demo.web.controllers;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod; @Controller @RequestMapping(value = "/account")public class AccountController { @RequestMapping(value="/login", method = {RequestMethod.GET}) public String login(){ return "login"; } }
Affichez login.jsp sous le dossier vues :
nbsp;html PUBLIC "-//W3C//DTD HTML 4.0SpringMVC Learning Series (9) Explication détaillée du code pour implémenter la vérification des autorisations basée sur les annotations Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><meta><title>Insert title here</title> 这里是登录界面
Créez un nouveau package com.demo.web.auth, ajoutez l'annotation personnalisée AuthPassport, le contenu est le suivant :
package com.demo.web.auth;import java.lang.annotation.Documented;import java.lang.annotation.ElementType;import java.lang.annotation.Inherited;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target; @Documented @Inherited @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME)public @interface AuthPassport { boolean validate() default true; }
Ajoutez votre propre implémentation d'intercepteur dont AuthInterceptor hérite HandlerInterceptorAdapter, le contenu est le suivant :
package com.demo.web.auth;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.web.method.HandlerMethod;import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;public class AuthInterceptor extends HandlerInterceptorAdapter { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { if(handler.getClass().isAssignableFrom(HandlerMethod.class)){ AuthPassport authPassport = ((HandlerMethod) handler).getMethodAnnotation(AuthPassport.class); //没有声明需要权限,或者声明不验证权限 if(authPassport == null || authPassport.validate() == false) return true; else{ //在这里实现自己的权限验证逻辑 if(false)//如果验证成功返回true(这里直接写false来模拟验证失败的处理) return true; else//如果验证失败 { //返回到登录界面 response.sendRedirect("account/login"); return false; } } } else return true; } }
Ajoutez le contenu suivant au springservlet-config.xml du projet de configuration :
<interceptors> <!-- 国际化操作拦截器 如果采用基于(请求/Session/Cookie)则必需配置 --> <bean learning series explication d du code pour impl la v des autorisations bas sur les annotations8n.localechangeinterceptor></bean> <!-- 如果不定义 mvc:mapping path 将拦截所有的URL请求 --> <bean></bean></interceptors>
Dans ce De cette manière, le traitement AuthInterceptor sera appelé lorsque chaque méthode d'action est exécutée. Lorsque l'action est jugée avoir l'annotation AuthPassport que nous avons définie, la logique de vérification des autorisations à l'intérieur sera exécutée.
Exécutez le projet :
Vous pouvez voir que la méthode d'indexation de HelloworldController que nous avons définie dans springservlet-config.xml est exécutée.
<!-- 如果当前请求为“/”时,则转发到“/helloworld/index" --><view-controller></view-controller>
下面我们在HelloworldController的index方法上加上自定义注解AuthPassport:
@AuthPassport @RequestMapping(value={"/index","/hello"})public ModelAndView index(){ ModelAndView modelAndView = new ModelAndView(); modelAndView.addObject("message", "Hello World!"); modelAndView.setViewName("index"); return modelAndView; }
重新运行项目:
可以看到正确执行了权限判断逻辑,这样我们只需要在我们在需要权限验证的action上加上这个注解就可以实现权限控制功能了。
注解式权限验证的内容到此结束。
以上就是SpringMVC学习系列(9) 之 实现注解式权限验证的代码详解的内容,更多相关内容请关注PHP中文网(www.php.cn)!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

SpringBoot et SpringMVC sont tous deux des frameworks couramment utilisés dans le développement Java, mais il existe des différences évidentes entre eux. Cet article explorera les fonctionnalités et les utilisations de ces deux frameworks et comparera leurs différences. Tout d’abord, découvrons SpringBoot. SpringBoot a été développé par l'équipe Pivotal pour simplifier la création et le déploiement d'applications basées sur le framework Spring. Il fournit un moyen rapide et léger de créer des fichiers exécutables autonomes.

Quelle est la différence entre SpringBoot et SpringMVC ? SpringBoot et SpringMVC sont deux frameworks de développement Java très populaires pour la création d'applications Web. Bien qu’ils soient souvent utilisés séparément, les différences entre eux sont évidentes. Tout d’abord, SpringBoot peut être considéré comme une extension ou une version améliorée du framework Spring. Il est conçu pour simplifier le processus d'initialisation et de configuration des applications Spring afin d'aider les développeurs

SpringBoot et SpringMVC sont deux frameworks couramment utilisés dans le développement Java. Ils sont tous deux fournis par le framework Spring, mais ils présentent certaines différences dans leurs fonctions et leur utilisation. Cet article présentera respectivement les caractéristiques et les différences de SpringBoot et SpringMVC. 1. Caractéristiques de SpringBoot : Configuration simplifiée : SpringBoot simplifie considérablement le processus de configuration du projet grâce au principe de convention sur la configuration. Il peut configurer automatiquement les paramètres requis par le projet et les développeurs

Le rôle de l'intercepteur L'intercepteur de SpringMVC est similaire au filtre dans le développement de servlets, qui est utilisé pour pré-traiter et post-traiter le processeur. Les intercepteurs sont connectés en une chaîne dans un certain ordre, et cette chaîne est appelée chaîne d'intercepteurs (InterceptorChain). Lors de l'accès à une méthode ou à un champ intercepté, les intercepteurs de la chaîne d'intercepteurs seront appelés dans l'ordre dans lequel ils ont été précédemment définis. Les intercepteurs sont également la mise en œuvre spécifique des idées AOP. La différence entre les intercepteurs et les filtres : Filtre (Filter) Le domaine d'utilisation de l'intercepteur (Intercepter) fait partie de la spécification du servlet et peut être utilisé par n'importe quel projet JavaWeb.

Cet article explique principalement l'ensemble du processus de traitement des requêtes SpringMVC du point de vue de la lecture et du débogage du code source, et explique la liaison des paramètres et le traitement des valeurs de retour. Je pense qu'après avoir lu ceci, combiné avec vos propres informations de débogage, vous aurez une compréhension plus approfondie du processus de traitement des requêtes de SpringMVC.

Les différences entre springboot et springmvc sont les suivantes : 1. Différentes significations ; 2. Différentes configurations ; 3. Différentes dépendances ; 4. Différentes périodes de développement 6. Différentes façons d'implémenter la fonction d'empaquetage JAR ; Fonction fournie ; 8. Différentes fonctions ; 9. Différents supports de communauté et de documentation ;

Avec le développement d’Internet, les services Web deviennent de plus en plus courants. En tant qu'interface de programmation d'applications, JavaAPI lance constamment de nouvelles versions pour s'adapter aux différents scénarios d'application. En tant que framework open source populaire, SpringMVC peut nous aider à créer facilement des applications Web. Cet article explique en détail comment utiliser SpringMVC pour le traitement des services Web dans le développement JavaAPI, y compris la configuration de SpringMVC, l'écriture de contrôleurs et l'utilisation de

La différence entre spring et springmvc : 1. Positionnement et fonctions ; 2. Fonctions de base 3. Champs d'application ; Introduction détaillée : 1. Positionnement et fonctions. Spring est un cadre de développement d'applications complet qui fournit l'injection de dépendances, la programmation orientée aspect, la gestion des transactions et d'autres fonctions. Il est conçu pour simplifier le développement d'applications au niveau de l'entreprise, et Spring MVC est le meilleur. Framework Spring. Un module qu'il contient est utilisé pour le développement d'applications Web et implémente le modèle MVC 2. Fonctions de base, etc.
