- 什么是spring Security
Spring Security是一个能够为基于Spring的企业应用系统提供描述性安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC(依赖注入,也称控制反转)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作。
简单来说spring Security就是spring为我们提供的一个权限框架,是spring家族的一员.目前最新版本的Spring Security为5.2.2,不过本教程使用的是稳定版的3.2.3版本。
2. Spring Security的入门案例
第一步:使用Idea创建一个maven项目
点击Finish后,项目已经创建完成,此时的项目结构如下:
第二步:导入spring Security相关jar包
在pom.xml导入spring Security的maven依赖,pom.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>spring_security</groupId>
<artifactId>spring_security_test</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>spring_security_test Maven Webapp</name>
<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>
<!-- 下面这两个就是使用Spring Security框架必须的jar包配置,这里使用的是3.2.3版本-->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>3.2.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>3.2.3.RELEASE</version>
</dependency>
<!--spring Security也是spring家族的一员,所以同样需要导入spring框架的核心jar包-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>3.2.8.RELEASE</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>spring_security_test</finalName>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<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>
第三步:创建项目的资源文件夹,在资源文件夹中编写spring Security的配置文件
这里可以随意取个名字,不过规范一点这个文件夹的名字应该命名为resource
如上图,文件夹已经创建成功,但是现在还只是一个普通的文件夹,需要将它改成项目的资源文件夹,操作如下:
在这个文件夹上右键然后选择如图所示
当resource文件夹上有这个图标时,就表示已经成为了资源文件夹了
然后在resouece文件夹下创建一个名为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-3.0.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-3.2.xsd">
<http auto-config="true">
<!--访问前缀带有admin的路径都需要当前用户拥有ROLE_USER的权限-->
<intercept-url pattern="/admin**" access="ROLE_USER" />
</http>
<authentication-manager>
<authentication-provider>
<!--创建一个用户名为admin,登录密码为123456的账号,如果想要创建多个账号,可以在这里配置多个<user>标签-->
<user-service>
<user name="admin" password="123456" authorities="ROLE_USER" />
</user-service>
</authentication-provider>
</authentication-manager>
</beans:beans>
第四步:启用spring security
在WEB-INF文件夹下面找到web.xml,将文件内容修改为:
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>Archetype Created Web Application</display-name>
<!-- 加载spring bean -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-security.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 这里就是启用我们的spring security框架了-->
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy
</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<!--所有路径都会经过spring security框进行权限判断-->
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
第五步:在webapp文件夹下面创建一个admin.html页面
页面内容如下:
注意这里文件名中的前缀就是admin了,而我们在前面的spring security配置文件中已经进行拦截了,所以如果我们前面配置都没有问题的话,那么这个页面我们是不能直接访问了的
第六步:访问admin.html页面
启动项目,在浏览器上访问http://localhost:8080/admin.html
如果看到如下页面,就说明我们的spring security的入门案例已经配置成功了
这里因为我们访问的admin.html已经被spring security拦截了,然后spring security就会去检查我们有没有ROLE_USER的权限,我们现在都还没有登陆,所以肯定什么权限都没有,所以就跳转到了spring security准备的默认登陆页面,也就是上面的那个页面。
这时我们可以使用前面配置的账号进行登陆
登陆成功后就可以访问到admin.html页面了
来源:CSDN
作者:源码时代--lvlei
链接:https://blog.csdn.net/Trialknight/article/details/104797243