Spring Security入门教程(一)

  1. 什么是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项目

 

 

Spring Security入门教程(一)

Spring Security入门教程(一)

Spring Security入门教程(一)

Spring Security入门教程(一)

 

 

 

点击Finish后,项目已经创建完成,此时的项目结构如下:

Spring Security入门教程(一)

 

    第二步:导入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的配置文件

 

Spring Security入门教程(一)

 

Spring Security入门教程(一)

 

这里可以随意取个名字,不过规范一点这个文件夹的名字应该命名为resource

Spring Security入门教程(一)

Spring Security入门教程(一)

 

 

如上图,文件夹已经创建成功,但是现在还只是一个普通的文件夹,需要将它改成项目的资源文件夹,操作如下:

     在这个文件夹上右键然后选择如图所示

Spring Security入门教程(一)

 

当resource文件夹上有这个图标时,就表示已经成为了资源文件夹了

Spring Security入门教程(一)

 

然后在resouece文件夹下创建一个名为spring-security.xml文件

Spring Security入门教程(一)

 

文件内容如下:

    <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页面

Spring Security入门教程(一)

页面内容如下:

Spring Security入门教程(一)

 

注意这里文件名中的前缀就是admin了,而我们在前面的spring security配置文件中已经进行拦截了,所以如果我们前面配置都没有问题的话,那么这个页面我们是不能直接访问了的

第六步:访问admin.html页面

启动项目,在浏览器*问http://localhost:8080/admin.html

如果看到如下页面,就说明我们的spring security的入门案例已经配置成功了

Spring Security入门教程(一)

 

这里因为我们访问的admin.html已经被spring security拦截了,然后spring security就会去检查我们有没有ROLE_USER的权限,我们现在都还没有登陆,所以肯定什么权限都没有,所以就跳转到了spring security准备的默认登陆页面,也就是上面的那个页面。

Spring Security入门教程(一)

 

这时我们可以使用前面配置的账号进行登陆

Spring Security入门教程(一)

 

Spring Security入门教程(一)

登陆成功后就可以访问到admin.html页面了