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

Spring Security XML示例

在本教程中,我们将使用MVC de Spring 框架实现 Spring Security。所有示例都是Spring MVC,并且是使用Maven项目创建的。

我们使用的是 Spring Security 5.0.0.RELEASE 版本,以下是maven依赖项,我们在所有示例中都使用了。

<dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-web</artifactId>
        <versión>5.0.0.RELEASE</versión>
</dependency>
<dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-core</artifactId>
        <versión>5.0.0.RELEASE</versión>
</dependency>
<dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-config</artifactId>
        <versión>5.0.0.RELEASE</versión>
</dependency>

要在Spring应用程序中实现Spring Security,我们可以使用XML或基于Java的配置对其进行配置。

我们来看一个示例,其中将使用XML来配置Spring Security。

创建Maven项目

像我们一样,点击 File 菜单找到 New→Maven Project 在以下屏幕截图中。

选择项目名称和位置

提供项目名称

提供项目名称,然后按照以下步骤选择打包类型为 war(网络存档)

完成该项目,它将为该项目创建一个空的目录结构,如下所示。

最初,它是空的。因此,让我们创建一个Spring MVC应用程序并与Spring Security集成。

这是我们的项目布局。它包含一个控制器,三个XML文件和两个JSP文件。

Código de seguridad de Spring Project fuente

我们的项目名称为 springsecurity ,其中包含以下源文件。

controlador

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 home() {
        return "home";
    }
    
    @RequestMapping(value="/admin", method=RequestMethod.GET)
    public String privateHome() {
        return "privatePage";
    }
}

Configuración de seguridad de Spring

spring-security.xml

<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="1234" authorities="hasRole(ROLE_ADMIN)" />
        </user-service>
      </authentication-provider>
    </authentication-manager>
</beans:beans>

Servlet调度程序

spring-servlet.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.w3codebox.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>

Web描述符

web.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">
        
        <!-- Spring Configuration -->
        <servlet>
            <servlet-name>spring</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>spring</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/spring-servlet.xml
                /WEB-INF/spring-security.xml
            </param-value>
        </context-param>
</web-app>

项目依赖项

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>springsecurity</artifactId>
  <versión>0.0.1-SNAPSHOT</versión>
  <paquete>war</paquete>   
<propiedades>
    <maven.compiler.target>1.8</maven.compiler.target>
    <maven.compiler.source>1.8</maven.compiler.source>
</propiedades>
<dependencies>
  <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <versión>5.0.2.RELEASE</versión>
        </dependency>
        <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-web</artifactId>
        <versión>5.0.0.RELEASE</versión>
    </dependency>
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-core</artifactId>
        <versión>5.0.0.RELEASE</versión>
    </dependency>
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-config</artifactId>
        <versión>5.0.0.RELEASE</versión>
    </dependency>
        
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <versión>3.1.0</versión>
    <scope>provided</scope>
</dependency>
</dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <versión>2.6</versión>
            <configuración>
                <failOnMissingWebXml>false</failOnMissingWebXml>
            </configuración>
        </plugin>
    </plugins>
</build>
</project>

Ver página

home.jsp

<html>
<head>
<meta content="text/html; charset=UTF-8">
<title>Home</title>
</head>
<body>
<h2>Bienvenido a w3codebox spring tutorial!</h2>
</body>
</html>

privatePage.jsp

home.jsp

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Admin</title>
</head>
<body>
Hello Admin
</body>
</html>

salida

Este ejemplo utiliza Apache Tomcat v9.0 ejecutándose. Después de ejecutarse, generará la siguiente salida al navegador.

Inicialmente, se presentará home.jsp página, que muestra la siguiente salida.

Si ingresamos/ admin Si se agrega Spring Security en la página de administración, el navegador generará la siguiente salida.

URL de solicitud: http: //localhost: 8080/springsecurity/admin

Ahora, aquí está la verdadera magia de protección de recursos proporcionada por Spring Security.

Este es el módulo proporcionado por Spring Security, que no hemos creado. También se verificará la entrada del usuario.

proporcionar credenciales incorrectas.

Si proporcionamos credenciales de inicio de sesión incorrectas, usará las que hemos spring-security.xml Se realiza la verificación de los nombres de usuario y contraseñas mencionados en el archivo.

Después de la verificación, si las credenciales de inicio de sesión no son correctas, se generará un mensaje de error.

En este ejemplo, hemos visto el módulo de inicio de sesión de Spring Security y cómo verifica la coincidencia del nombre de usuario y la contraseña proporcionados.

A continuación, implementaremos lógica adicional para el tema, por ejemplo: mostrar al usuario después de un inicio de sesión exitoso.