个性化阅读
专注于IT技术分析

Spring安全项目(XML配置)示例详细图解

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

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

<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.0.RELEASE</version>
</dependency>
<dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-config</artifactId>
        <version>5.0.0.RELEASE</version>
</dependency>

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

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

创建一个Maven项目

单击文件菜单, 找到New→Maven Project, 如下面的屏幕截图所示。

Spring Security XML示例1

选择项目名称和位置

Spring Security XML示例2

提供项目名称

提供项目名称并选择包装类型作为war(Web Archive), 如下所示。

Spring Security XML示例3

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

Spring Security XML示例4

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

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

Spring Security XML示例5

Spring安全项目源代码

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

控制者

HomeController.java

package com.srcmini.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";
	}
}

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.srcmini.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.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.srcmini</groupId>
  <artifactId>springsecurity</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.0.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-config</artifactId>
        <version>5.0.0.RELEASE</version>
    </dependency>
		
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>
</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>

查看页面

home.jsp

<html>
<head>
<meta content="text/html; charset=UTF-8">
<title>Home</title>
</head>
<body>
<h2>Welcome to srcmini 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>

输出

此示例使用Apache Tomcat v9.0执行。运行后, 它将向浏览器产生以下输出。

最初, 它将呈现显示以下输出的home.jsp页面。

Spring Security XML示例6

我们在管理页面中添加了spring安全性, 如果在浏览器中输入/ admin, 应用程序将产生以下输出。

要求网址:http:// localhost:8080 / springsecurity / admin

Spring Security XML示例7

现在, 这是Spring安全性提供的真正魔术, 可保护资源免遭未经身份验证的用户的侵害。

这是Spring Security提供的模块, 我们没有创建它。它还可以验证用户输入。

提供错误的凭证。

Spring Security XML示例8

如果我们提供了错误的登录凭据, 它将使用我们在spring-security.xml文件中提到的用户名和密码进行验证。

验证后, 如果登录凭据不正确, 则会引发错误消息。

Spring Security XML示例9

嗯, 在这个示例中, 我们已经看到了Spring Security的登录模块, 并且其验证方式与所提供的用户名和密码相对应。

在下一个主题中, 我们将实现进一步的逻辑, 例如:成功登录后呈现用户。

赞(0) 打赏
未经允许不得转载:srcmini » Spring安全项目(XML配置)示例详细图解
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者

微信扫一扫打赏