English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Bibliothèque de tags JSP de Spring Security

Spring Security fournit ses propres étiquettes pour les pages JSP. Ces étiquettes sont utilisées pour accéder aux informations de sécurité dans les JSP et appliquer des contraintes de sécurité.

Les étiquettes suivantes sont utilisées pour protéger la couche de présentation de l'application.

Étiquette d'autorisation Étiquette d'authentification Marqueur Accesscontrollist Étiquette Csrfinput Balise CsrfMetaTags

Étiquette d'autorisation

Cette étiquette est utilisée à des fins d'autorisation. Cette étiquette évalue et vérifie si la requête est autorisée.

Il utilise deux attributs access et URL Pour vérifier l'autorisation de la requête. Nous pouvons évaluer cette étiquette à partir du rôle de l'utilisateur.

Le contenu affiché à l'intérieur de cette étiquette ne sera visible que si les attributs sont satisfaisants. Par exemple.

<sec:authorize access="hasRole('ADMIN')">
Il affichera uniquement si l'utilisateur est administrateur
</sec:authorize>

Étiquette d'authentification

Cette étiquette est utilisée pour accéder à l'authentification stockée dans le contexte de sécurité. Si l'Authentication est une instance de l'objet UserDetails, elle peut être utilisée pour obtenir les détails de l'utilisateur actuel. Par exemple.

<sec:authentication property="principal.username">

Marqueur Accesscontrollist

Ce marqueur est utilisé conjointement avec le module ACL de Spring Security. Il vérifie la liste des permissions nécessaires pour le domaine spécifié. Il ne s'exécute que si l'utilisateur actuel possède toutes les permissions. Par exemple.

<sec:accesscontrollist hasPermission="1,2"domainObject="${someObject}">
 si l'utilisateur possède toutes les permissions représentées par les valeurs "1ou2sur l'objet donné.
</sec:accesscontrollist>

Balise CsrfInput

Cette balise est utilisée pour créer un jeton CSRF pour un formulaire HTML. Pour l'utiliser, assurez-vous que la protection CSRF est activée. Nous devons placer cette balise   à l'intérieur des balises pour créer un jeton CSRF. Par exemple.

<form method="post" action="/some/action">
                <sec:csrfInput />
                Nom:<br />
                <input type="text" name="username" />
                ...
        </form>

Balise CsrfMetaTags

Elle insère une balise meta contenant le jeton CSRF, les champs du formulaire, le nom de l'en-tête et la valeur du jeton CSRF. Ces valeurs sont utiles pour définir le jeton CSRF dans le JavaScript de l'application.

Cette balise doit être placée à l'intérieur des balises HTML.

JAR du taglib Spring Security

Pour implémenter l'un de ces balises, nous devons avoir le jar du taglib spring security dans notre application. Nous pouvons également l'ajouter avec la dépendance Maven suivante.

<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-taglibs</artifactId>
    <version>5.0.4.RELEASE</version>
</dependency>

Déclaration du taglib Spring Security

Dans une page JSP, nous pouvons utiliser les déclarations suivantes pour utiliser le taglib.

<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>

Maintenant, regardons un exemple de mise en œuvre de ces balises dans un projet Maven Spring Security.

Nous utilisons STS (Spring Tools Suite) pour créer le projet. Voir l'exemple.

Créer le projet





Cliquez Terminé > bouton, qui créera un projet Maven comme celui-ci:



Configuration de Spring Security

Pour configurer Spring Security dans une application Spring MVC, placez les quatre fichiers suivants com.w3dans codeboxdossier.

AppConfig.java

package com.w3codebox;
import org.springframework.context.annotation.Bean;  
import org.springframework.context.annotation.ComponentScan;  
import org.springframework.context.annotation.Configuration;  
import org.springframework.web.servlet.config.annotation.EnableWebMvc;  
import org.springframework.web.servlet.view.InternalResourceViewResolver;  
import org.springframework.web.servlet.view.JstlView;  
  
@EnableWebMvc  
@Configuration  
@ComponentScan({ "com.w3codebox.controller.*" ))  
public class AppConfig {  
    @Bean  
    public InternalResourceViewResolver viewResolver() {  
        InternalResourceViewResolver viewResolver  
                          = new InternalResourceViewResolver();  
        viewResolver.setViewClass(JstlView.class);  
        viewResolver.setPrefix("/WEB-INF/views/");  
        viewResolver.setSuffix(".jsp");  
        return viewResolver;  
    }  
}

AppConfig est utilisé pour définir le suffixe de position de la vue des fichiers de vue.

//MvcWebApplicationInitializer.java

package com.w3codebox;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;  
public class MvcWebApplicationInitializer extends  
        AbstractAnnotationConfigDispatcherServletInitializer {  
    @Override  
    protected Class<?>[] getRootConfigClasses() {  
        return new Class[]{WebSecurityConfig.class};  
    }  
    @Override  
    protected Class<?>[] getServletConfigClasses() {  
        // TOdo Auto-generated method stub  
        return null;  
    }  
    @Override  
    protected String[] getServletMappings() {  
        return new String[]{"}/"};  
    }  
}

该类用于初始化servlet调度程序。

//SecurityWebApplicationInitializer.java

package com.w3codebox;
import org.springframework.security.web.context.*;  
public class SecurityWebApplicationInitializer  
    extends AbstractSecurityWebApplicationInitializer {  
  
}

再创建一个用于创建用户并在用户可访问性上应用身份验证和授权的类。

//WebSecurityConfig.java

package com.w3codebox;
import org.springframework.context.annotation.*;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;  
import org.springframework.security.config.annotation.web.configuration.*;  
import org.springframework.security.core.userdetails.*;
import org.springframework.security.core.userdetails.User.UserBuilder;  
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
@EnableWebSecurity  
@ComponentScan("com.w3codebox)  
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {  
  
@Bean  
public UserDetailsService userDetailsService() {
    // s'assurer que les mots de passe sont correctement codés
     UserBuilder users = User.withDefaultPasswordEncoder();
     InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
     manager.createUser(users.username("mohan").password("1mohan23").roles("USER").build());
     manager.createUser(users.username("admin").password("admin123").roles("ADMIN").build());
     return manager;
    } 
  
@Override  
protected void configure(HttpSecurity http) throws Exception {  
      
      http.authorizeRequests().
      antMatchers("/index","/").permitAll()
      .antMatchers("/admin","/user()).authenticated()
      .and()
      .formLogin()
      .and()
      .logout()
      .logoutRequestMatcher(new AntPathRequestMatcher("/logout"));
        
}  
}

Contrôleur

Maintenant, créez un contrôleur pour gérer les requêtes et fournir des réponses.

//HomeController.java

package com.w3codebox.controller;
import org.springframework.stereotype.Controller;  
import org.springframework.web.bind.annotation.RequestMapping;  
import org.springframework.web.bind.annotation.RequestMethod;
@Controller  
public class HomeController {  
    @RequestMapping(value="/", method=RequestMethod.GET)  
    public String index() {  
        return "index";  
    }  
    @RequestMapping(value="/user", method=RequestMethod.GET)  
    public String user() {  
       return "admin";
    }  
    @RequestMapping(value="/admin", method=RequestMethod.GET)  
    public String admin() {  
          
        return "admin";  
    }
}
 

Vue

Créez un fichier de vue (jsp) afin d'afficher les sorties aux utilisateurs. Nous avons déjà créé trois fichiers JSP, veuillez consulter le texte ci-dessous.

//index.jsp

<html>  
<head>  
<title>Page d'accueil</title>  
</head>  
<body>  
<a href="user">User</a> <a href="admin">Admin</a> <br> <br>
Bienvenue à la w3codebox!  
</body>  
</html>
 

//user.jsp

<html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
<title>Page d'accueil</title>  
</head>  
<body>  
Bienvenue à la page utilisateur!  
</body>  
</html>
 

//admin.jsp

Dans la page de gestion,nous utilisons l'étiquette authorize,qui n'est évaluée que si le rôle donné est satisfait.

<%@ taglib uri="http://www.springframework.org/security/tags" prefix="security" %><html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>Page d'accueil</title>  
</head>  
<body>  
Bienvenue à la page admin!
<a href="logout">logout</a> <br><br>
<security:authorize access="hasRole('ADMIN')">
Bonjour ADMIN
</security:authorize>
<security:csrfInput/>
</body>  
</html>
 

Dépendances du projet

Notre projet contient les dépendances nécessaires pour construire l'application.

//pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.w3codebox</groupId>
  <artifactId>springtaglibrary</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  <properties>  
    <maven.compiler.target>1.8</maven.compiler.target>  
    <maven.compiler.source>1.8</maven.compiler.source>  
</properties>  
<dependencies>  
  <dependency>  
            <groupId>org.springframework</groupId>  
            <artifactId>spring-webmvc</artifactId>  
            <version>5.0.2.RELEASE</version>  
        </dependency>  
        <dependency>  
        <groupId>org.springframework.security</groupId>  
        <artifactId>spring-security-web</artifactId>  
        <version>5.0.0.RELEASE</version>  
    </dependency>  
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-core</artifactId>
    <version>5.0.4.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-taglibs -->
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-taglibs</artifactId>
    <version>5.0.4.RELEASE</version>
</dependency>
    <!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-config -->
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-config</artifactId>
    <version>5.0.4.RELEASE</version>
</dependency>
        <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->  
<dependency>  
    <groupId>javax.servlet</groupId>  
    <artifactId>javax.servlet-api</artifactId>  
    <version>3.1.0</version>  
    <scope>provided</scope>  
</dependency>  
<dependency>  
    <groupId>javax.servlet</groupId>  
    <artifactId>jstl</artifactId>  
    <version>1.2</version>  
</dependency>  
<!-- https://mvnrepository.com/artifact/org.springframework/spring-framework-bom -->
</dependencies>  
  <build>  
    <plugins>  
        <plugin>  
            <groupId>org.apache.maven.plugins</groupId>  
            <artifactId>maven-war-plugin</artifactId>  
            <version>2.6</version>  
            <configuration>  
                <failOnMissingWebXml>false</failOnMissingWebXml>  
            </configuration>  
        </plugin>  
    </plugins>  
</build>  
</project>
 

Après avoir ajouté tous ces fichiers, notre projet apparaît ainsi:


Exécuter l'application

Cliquez avec le bouton droit sur le projet, puis sélectionnez  Exécution sur le serveurIl affiche le sorti suivant au navigateur.



En fournissant dans   AppSecurityConfig Cliquez sur l'utilisateur et connectez-vous avec les informations d'identification définies dans le fichier.



Après la connexion réussie, il affichera la page de gestion suivante. Notez ici que, car l'utilisateur connecté a le rôle USER, le contenu entre les balises authorize n'est pas affiché.



Déconnexion, connectez-vous maintenant avec les informations d'identification de l'administrateur en tant qu'admin.



Après avoir connecté avec le compte admin, veuillez consulter cette étiquette authorize pour l'évaluation et afficher les sorties suivantes.