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

Biblioteca de etiquetas JSP de Spring Security

Spring Security proporciona sus propias etiquetas para páginas JSP. Estas etiquetas se utilizan para acceder a la información de seguridad en JSP y aplicar restricciones de seguridad.

Las siguientes etiquetas se utilizan para proteger la capa de vista de la aplicación.

Etiqueta de autorización Etiqueta de autenticación Etiqueta Accesscontrollist Etiqueta Csrfinput Etiqueta CsrfMetaTags

Etiqueta de autorización

Esta etiqueta se utiliza con fines de autorización. Esta etiqueta evalúa y verifica si la solicitud está autorizada.

Usa dos propiedades acceso Y URL Para verificar la autorización de la solicitud. Podemos evaluar esta etiqueta a través del rol del usuario.

El contenido dentro de esta etiqueta se mostrará solo si se cumple la propiedad. Por ejemplo.

<sec:authorize access="hasRole('ADMIN')">
Mostrará solo si el usuario es administrador
</sec:authorize>

Etiqueta de autenticación

Esta etiqueta se utiliza para acceder a la autenticación almacenada en el contexto de seguridad. Si la autenticación es una instancia del objeto UserDetails, se puede utilizar para obtener los detalles del usuario actual. Por ejemplo.

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

Etiqueta Accesscontrollist

Este marcador se utiliza junto con el módulo ACL de Spring Security. Verifica la lista de permisos necesarios para el dominio especificado. Solo se ejecuta si el usuario actual tiene todos los permisos. Por ejemplo.

<sec:accesscontrollist hasPermission="1,2" domainObject="${someObject}">
 si el usuario tiene todos los permisos representados por los valores "1" o "2" en el objeto dado.
</sec:accesscontrollist>

Etiqueta CsrfInput

Esta etiqueta se utiliza para crear un token CSRF para un formulario HTML. Para usarla, asegúrese de que la protección CSRF esté activada. Deberíamos poner esta etiqueta en   dentro de las etiquetas para crear el token CSRF. Por ejemplo.

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

Etiqueta CsrfMetaTags

Inserta una metaetiqueta que contiene el token CSRF, los campos del formulario, el nombre de la cabecera y el valor del token CSRF. Estos valores son útiles para establecer el token CSRF en JavaScript de la aplicación.

Este tag debe estar dentro de las etiquetas HTML.

JAR de Spring Security Taglib

Para implementar cualquier uno de estos tags, debemos tener el jar de spring security taglib en nuestra aplicación. También podemos agregarlo usando la siguiente dependencia Maven.

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

Declaración de Spring Security Taglib

En la página JSP, podemos usar la siguiente declaración para usar taglib.

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

Ahora, veamos un ejemplo de cómo implementar estos tags en un proyecto Maven de Spring Security.

Estamos usando STS (Spring Tools Suite) para crear el proyecto. Ver ejemplo.

Crear proyecto





Haga clic Completado >botón, que creará un proyecto Maven como el siguiente:



Configuración de Spring Security

Para configurar Spring Security en una aplicación Spring MVC, coloque los siguientes cuatro archivos en com.w3en codeboxcarpeta.

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 se utiliza para establecer el sufijo de la ubicación de los archivos de vista.

//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() {
    // asegurar que las contraseñas se codifiquen correctamente
     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"));
        
}  
}

Controlador

Ahora, cree un controlador para manejar solicitudes y emitir respuestas.

//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;
@Controlador  
public class ControladorPrincipal {  
    @RequestMapping(value="/", método=RequestMethod.GET)  
    public String índice() {  
        devolver "índice";  
    }  
    @RequestMapping(value="/usuario", método=RequestMethod.GET)  
    public String user() {  
       devolver "admin";
    }  
    @RequestMapping(value="/admin", método=RequestMethod.GET)  
    public String admin() {  
          
        devolver "admin";  
    }
}
 

Vista

Crear archivos de vista (jsp) para mostrar la salida al usuario. Hemos creado tres archivos JSP, consulte a continuación.

//index.jsp

<html>  
<cabecera>  
<título>Página Principal</título>  
</cabecera>  
<cuerpo>  
<a href="user">Usuario</a> <a href="admin">Admin</a> <br> <br>
¡Bienvenido a la w3caja de código!  
</body>  
</html>
 

//user.jsp

<html>  
<cabecera>  
<meta http-equiv="Contenido-Tipo" content="text/html; charset=UTF-8">  
<título>Página Principal</título>  
</cabecera>  
<cuerpo>  
¡Bienvenido a la página de usuario!  
</body>  
</html>
 

//admin.jsp

En la página de administración, hemos utilizado la etiqueta authorize, que solo se evalúa cuando se cumple el rol dado.

<%@ librería uri="http://www.springframework.org/security/etiquetas" prefijo="security" %><html>  
<cabecera>  
<meta http-equiv="Contenido-Tipo" content="text/html; charset=UTF-8"> 
<título>Página Principal</título>  
</cabecera>  
<cuerpo>  
¡Bienvenido a la página de administración!
<a href="logout">cerrar sesión</a> <br><br>
<autorizar:autorizar acceso="tieneRol('ADMIN')">
¡Hola ADMIN
</security:authorize>
<security:csrfInput/>
</body>  
</html>
 

Dependencias del proyecto

Nuestro proyecto contiene las dependencias necesarias para construir la aplicación.

//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>
 

Después de agregar todos estos archivos, nuestro proyecto se verá así:


Ejecutar aplicación

Haga clic con el botón derecho en el proyecto y seleccione  Ejecutándose en el servidorMuestra lo siguiente al navegador.



Al proporcionar en   AppSecurityConfig Haga clic en el usuario y inicie sesión con las credenciales configuradas en el archivo.



Después de iniciar sesión con éxito, se mostrará la siguiente página de administración como se muestra a continuación. Aquí, note que, debido al rol de usuario que ha iniciado sesión, no se muestra el contenido dentro de la etiqueta authorize.



Cerrar sesión, ahora inicie sesión con las credenciales de administrador como admin.



Después de iniciar sesión con el nombre de usuario admin, consulte la etiqueta authorize de esta vez para evaluar y mostrar la siguiente salida.