SpringSecurity-1(认证和授权+SpringSecurity入门案例+自定义认证+数据库认证)

SpringSecurity

    • [1 初识权限管理](#1 初识权限管理)
        • [1.1 权限管理的概念](#1.1 权限管理的概念)
        • [1.2 权限管理的三个对象](#1.2 权限管理的三个对象)
        • [1.3 什么是SpringSecurity](#1.3 什么是SpringSecurity)
    • [2 SpringSecurity第一个入门程序](#2 SpringSecurity第一个入门程序)
        • [2.1 SpringSecurity需要的依赖](#2.1 SpringSecurity需要的依赖)
        • [2.2 创建web工程](#2.2 创建web工程)
          • [2.2.1 使用maven构建web项目](#2.2.1 使用maven构建web项目)
          • [2.2.2 配置web.xml](#2.2.2 配置web.xml)
          • [2.2.3 创建springSecurity.xml](#2.2.3 创建springSecurity.xml)
          • [2.2.4 加载springSecurity.xml配置文件](#2.2.4 加载springSecurity.xml配置文件)

目标模块:

  1. 初识认证和授权
  2. 案例入门
  3. 理解SpringSecurity过滤器
  4. 使用自定义认证页面
  5. 使用数据库完成认证

1 初识权限管理

1.1 权限管理的概念

权限管理,一般指根据系统设置的安全规则或者安全策略,用户可以访问而且只能访问自己被授权的资源。权限管理几乎出现在任何系统里面,前提是需要有用户和密码认证的系统。

在权限管理的概念中,有两个非常重要的名词:

认证:通过用户名和密码成功登陆系统后,让系统得到当前用户的角色身份。

如何理解认证?用户认证就是判断一个用户的身份是否合法的过程,用户去访问系统资源时系统要求验证用户的身份信息,身份合法方可继续访问,不合法则拒绝访问。常见的用户身份认证方式有:用户名密码登录,二维码登录,手机短信登录,指纹认证等方式。

授权:系统根据当前用户的角色,给其授予对应可以操作的权限资源。

如何理解授权?拿微信来举例子,微信登录成功后用户即可使用微信的功能,比如,发红包、发朋友圈、添加好友等。其中有一个功能:微信运动。只有你授权运行微信运动功能的运行,你每天才可以看见你的步数。如果不授权你是看不到的。

1.2 权限管理的三个对象

用户:主要包含用户名,密码和当前用户的角色信息,可实现认证操作。

角色:主要包含角色名称,角色描述和当前角色拥有的权限信息,可实现授权操作。

权限:权限也可以称为菜单,主要包含当前权限名称,url地址等信息,可实现动态展示菜单。

注:这三个对象中,用户与角色是多对多的关系,角色与权限是多对多的关系,用户与权限没有直接关系,二者是通过角色来建立关联关系的。

1.3 什么是SpringSecurity

SpringSecurity是spring采用AOP思想,基于servlet过滤器实现的安全框架。它提供了完善的认证机制和方法级的授权功能。是一款非常优秀的权限管理框架。

2 SpringSecurity第一个入门程序

2.1 SpringSecurity需要的依赖

SpringSecurity主要jar包功能介绍:

  • spring-security-core.jar核心包,任何SpringSecurity功能都需要此包。
  • spring-security-web.jar web工程必备,包含过滤器和相关的Web安全基础结构代码。spring-security-config.jar用于解析xml配置文件,用到SpringSecurity的xml配置文件的就要用到此包。
  • spring-security-taglibs.jarSpringSecurity提供的动态标签库,jsp页面可以用。
xml 复制代码
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-taglibs</artifactId>
<version>${spring.security.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>${spring.security.version}</version>
</dependency>由于和web工程集成,我们在项目中可以不用引入core和web的依赖。因为spring工程有spring-core包,springmvc有spring-web包。可以依赖传递过来。
2.2 创建web工程
2.2.1 使用maven构建web项目

构建过程省略,然后引入相关的依赖。

xml 复制代码
<properties>
  <spring.version>5.1.6.RELEASE</spring.version>
  <spring.security.version>5.1.6.RELEASE</spring.security.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>

<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.26</version>
</dependency>

<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-taglibs</artifactId>
<version>${spring.security.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>${spring.security.version}</version>
</dependency>
</dependencies>
2.2.2 配置web.xml
xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
         http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
  <display-name>Archetype Created Web Application</display-name>
 <!-- <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>-->
  <!--委派过滤器-->
  <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>
</web-app>
2.2.3 创建springSecurity.xml
xml 复制代码
<?xmlversion="1.0"encoding="UTF-8"?>
<beansxmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:security="http://www.springframework.org/schema/security"
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">
<!--
auto-config:true开启spring-security的自动配置
use-expressions="true"允许使用spring表达式
-->
<security:http auto-config="true"use-expressions="true">
<!--
intercept-url:拦截的请求资源/**所有的请求全部拦截
access:访问资源所需要的角色
-->
<security:intercept-urlpattern="/**"access="hasAnyRole('ROLE_ADMIN','ROLE_USER')"></security:intercept-url>
</security:http>
<!--配置认证管理器-->
<security:authentication-manager>
<!--配置认证提供者-->
<security:authentication-provider>
<!--配置认证服务-->
<security:user-service>
<!--
配置认证者
name用户名
password密码
authorities权限资源
-->
<security:username="user"password="{noop}user"authorities="ROLE_USER"></security:user>
<security:username="admin"password="{noop}admin"authorities="ROLE_ADMIN"></security:user>
</security:user-service>
</security:authentication-provider>
</security:authentication-manager>
</beans>
2.2.4 加载springSecurity.xml配置文件
xml 复制代码
<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>

整个web.xml文件最后目录如下:

到这里,我们第一个springSecurity案例搭建完毕。启动tomcat,查看效果:

这个登录页面是谁写的?我们查看网页源代码看看:

我们再去看看控制台发生了什么:

我们发现加载了很多过滤器。

最后,我们在这个登录页面上输入用户名user,密码user,点击Signin,好了,总算再次看到首页了!

相关推荐
守护者1707 分钟前
JAVA学习-练习试用Java实现“一个词频统计工具 :读取文本文件,统计并输出每个单词的频率”
java·学习
bing_15818 分钟前
Spring Boot 中ConditionalOnClass、ConditionalOnMissingBean 注解详解
java·spring boot·后端
ergdfhgerty20 分钟前
斐讯N1部署Armbian与CasaOS实现远程存储管理
java·docker
勤奋的知更鸟33 分钟前
Java性能测试工具列举
java·开发语言·测试工具
三目君37 分钟前
SpringMVC异步处理Servlet
java·spring·servlet·tomcat·mvc
用户05956611920937 分钟前
Java 基础篇必背综合知识点总结包含新技术应用及实操指南
java·后端
fie888937 分钟前
Spring MVC扩展与SSM框架整合
java·spring·mvc
不太可爱的叶某人1 小时前
【学习笔记】深入理解Java虚拟机学习笔记——第3章 垃圾收集器与内存分配策略
java·笔记·学习
YuTaoShao1 小时前
Java八股文——JVM「类加载篇」
java·开发语言·jvm
爱玩电脑的L1 小时前
javaee初阶-多线程
java·开发语言·jvm