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,好了,总算再次看到首页了!

相关推荐
一只特立独行的猪61138 分钟前
Java面试——集合篇
java·开发语言·面试
讓丄帝愛伱2 小时前
spring boot启动报错:so that it conforms to the canonical names requirements
java·spring boot·后端
weixin_586062022 小时前
Spring Boot 入门指南
java·spring boot·后端
一颗知足的心2 小时前
SpringCloud Alibaba五大组件之——Sentinel
spring·spring cloud·sentinel
Dola_Pan5 小时前
Linux文件IO(二)-文件操作使用详解
java·linux·服务器
wang_book5 小时前
Gitlab学习(007 gitlab项目操作)
java·运维·git·学习·spring·gitlab
蜗牛^^O^6 小时前
Docker和K8S
java·docker·kubernetes
从心归零6 小时前
sshj使用代理连接服务器
java·服务器·sshj
一个诺诺前行的后端程序员7 小时前
springcloud微服务实战<1>
spring·spring cloud·微服务
IT毕设梦工厂7 小时前
计算机毕业设计选题推荐-在线拍卖系统-Java/Python项目实战
java·spring boot·python·django·毕业设计·源码·课程设计