English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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
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>
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">
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>
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>
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.
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>
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.
Haga clic Completado >botón, que creará un proyecto Maven como el siguiente:
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")); } }
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"; } }
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>
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í:
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.