Spring Security es una forma poderosa de proporcionar autenticación y autorización a la aplicación Spring. Spring Security es una poderosa herramienta que proporciona la función de configuración de seguridad personalizada para el usuario. La configuración de seguridad en Spring se puede personalizar de dos maneras, como se indica a continuación:
- Configuración basada en XML
- Configuración Java.
Implementación: aquí crearemos una aplicación web Spring MVC y agregaremos una configuración basada en xml.
Prerrequisitos : Introducción a Spring
Pasos para crear una configuración basada en XML en Spring MVC
Paso 1: Cree un proyecto de aplicación web maven , estamos usando Eclipse IDE para crear este proyecto. Al crear un proyecto maven, seleccione el arquetipo para este proyecto como maven-archetype-webapp. Ingrese la identificación del grupo y la identificación del artefacto para su proyecto y haga clic en ‘ Finalizar ‘.
Paso 2: después de crear el proyecto, la estructura de su proyecto se vería así:
El archivo pom.xml define todas las dependencias necesarias para el proyecto. Asegúrese de agregar todas las dependencias mencionadas en este archivo para que su proyecto funcione correctamente.
Archivo: pom.xml
XML
<?xml version="1.0" encoding="UTF-8"?> <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.gfg</groupId> <artifactId>SpringSecurityXmlConfig</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <name>SpringSecurityXmlConfig Maven Webapp</name> <!-- FIXME change it to the project's website --> <url>http://www.example.com</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.7</maven.compiler.source> <maven.compiler.target>1.7</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.3.16</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-web --> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-web</artifactId> <version>5.6.2</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-core --> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-core</artifactId> <version>5.6.2</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.6.2</version> </dependency> <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> <scope>provided</scope> </dependency> </dependencies> <build> <finalName>SpringSecurityXmlConfig</finalName> <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) --> <plugins> <plugin> <artifactId>maven-clean-plugin</artifactId> <version>3.1.0</version> </plugin> <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging --> <plugin> <artifactId>maven-resources-plugin</artifactId> <version>3.0.2</version> </plugin> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.0</version> </plugin> <plugin> <artifactId>maven-surefire-plugin</artifactId> <version>2.22.1</version> </plugin> <plugin> <artifactId>maven-war-plugin</artifactId> <version>3.2.2</version> </plugin> <plugin> <artifactId>maven-install-plugin</artifactId> <version>2.5.2</version> </plugin> <plugin> <artifactId>maven-deploy-plugin</artifactId> <version>2.8.2</version> </plugin> </plugins> </pluginManagement> </build> </project>
El web.xml define el mapeo con diferentes URL y servlets para manejar las requests de esas URL. Spring DelegatingFilterProxy proporciona un enlace entre web.xml y el contexto de la aplicación.
Archivo: web.xml
XML
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE xml> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <servlet> <servlet-name>gfg</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>gfg</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <filter> <filter-name>springSecurityFilterChain</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> </filter> <filter-mapping> <filter-name>springSecurityFilterChain</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <context-param> <param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/gfg-servlet.xml /WEB-INF/spring-security.xml </param-value> </context-param> </web-app>
El archivo gfg-servlet.xml maneja todas las requests HTTP para las aplicaciones web. Las clases basadas en anotaciones habilitan las clases de anotaciones de primavera. El análisis de componentes localiza y asigna beans de acuerdo con la anotación definida. La configuración del bean ayuda a identificar y localizar archivos JSP en el proyecto.
Archivo: gfg-servlet.xml
XML
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <mvc:annotation-driven /> <context:component-scan base-package="com.gfg.controller"> </context:component-scan> <context:annotation-config></context:annotation-config> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/"></property> <property name="suffix" value=".jsp"></property> </bean> </beans>
Aquí es donde define la configuración para Spring Security, el bean http ayuda a interceptar todas las llamadas http mencionadas en el archivo, el servicio de usuario en el proveedor de autenticación en el administrador de autenticación crea un usuario para la aplicación con el nombre de usuario, contraseña y el rol de ese usuario.
XML
<?xml version="1.0" encoding="UTF-8"?> <beans:beans xmlns="http://www.springframework.org/schema/security" xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security.xsd"> <http auto-config="true"> <intercept-url pattern="/admin" access="hasRole('ROLE_ADMIN')" /> </http> <authentication-manager> <authentication-provider> <user-service> <user name="admin" password="{noop}pass" authorities="ROLE_ADMIN" /> </user-service> </authentication-provider> </authentication-manager> <beans:bean id ="passwordEncoder" class = "org.springframework.security.crypto.password.NoOpPasswordEncoder" factory-method = "getInstance"> </beans:bean> </beans:beans>
La clase WelcomeController en el paquete com.gfg.controller define las asignaciones para url, en este proyecto hemos definido dos métodos GET para dos URL. El método de bienvenida redirige a la página de vista de inicio y el método de administración lo hace para la página de vista de administración .
Archivo: WelcomeController.java
Java
// Java Program to Illustrate WelcomeController Class package com.gfg.controller; // Importing required classes import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; // Annotation @Controller // Class public class WelcomeController { // Method 1 @RequestMapping(value = "/", method = RequestMethod.GET) public String welcome() { return "welcome"; } // Method 2 @RequestMapping(value = "/admin", method = RequestMethod.GET) public String admin() { return "admin"; } }
Esta es la página admin.jsp en la carpeta de vistas.
HTML
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Admin</title> </head> <body> Welcome Admin <form action="<%=request.getContextPath()%>/appLogout" method="POST"> <input type="submit" value="Logout"/> <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/> </form> </body> </html>
Esta es la página welcome.jsp en la carpeta de vistas.
HTML
<html> <head> <meta content="text/html; charset=UTF-8"> <title>Home Page</title> </head> <body> <h2>Welcome to Spring Security using XML Configuration!</h2> </body> </html>
Paso 3: Después de crear todos los archivos de configuración y las clases, su proyecto se vería así:
Paso 4: ahora que hemos completado nuestro proyecto, es hora de ejecutarlo en un servidor Tomcat, simplemente inicie el servidor Tomcat y escriba http:localhost:8080/SpringSecurityXmlConfig/login .
Publicación traducida automáticamente
Artículo escrito por ashutosh44 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA