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

SpringSecurity

    • 1 初识权限管理
        • 1.1 权限管理的概念
        • 1.2 权限管理的三个对象
        • 1.3 什么是SpringSecurity
    • 2 SpringSecurity第一个入门程序
        • 2.1 SpringSecurity需要的依赖
        • 2.2 创建web工程
          • 2.2.1 使用maven构建web项目
          • 2.2.2 配置web.xml
          • 2.2.3 创建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页面可以用。
<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项目

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

<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 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/javaeehttp://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
<?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配置文件
<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,好了,总算再次看到首页了!

请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/391033.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

50 选择结构

常见的选择结构有单分支选择结构、双分支选择结构、多分支选择结构及嵌套的分支结构&#xff0c;也可以构造跳转表来实现类似的逻辑。循环结构和异常处理结构中也可以实现带有 else 子句&#xff0c;可以看作特殊形式的选择结构。 所有的 Python 合法表达式都可以作为条件表达…

一篇文章让你搞懂原码,反码,补码!

目录 1.机器数和机器数真值 1.1机器数 1.2机器数的真值 2.原码&#xff0c;反码&#xff0c;补码的计算方法 2.1原码 2.2反码 2.3补码 3.为什么要使用反码和补码&#xff1f; 3.1原码不能让符号位参与运算的问题&#xff1a; 3.2为了解决原码作减法&#xff0c;引入…

SAP支出管理,企业成本控制的智能钥匙

在企业运营中&#xff0c;有效的支出管理是确保财务健康和提升竞争力的关键。SAP支出管理系统作为企业资源规划的核心组成部分&#xff0c;提供了一套全面的解决方案&#xff0c;帮助企业实现成本控制、风险管理和合规性监督。实现支出管理流程自动化&#xff0c;并主动管理更多…

python爬虫预备知识三-序列化和反序列化

序列化和反序列化 序列化是为了将内存中的数据保存在磁盘上或者用于传输&#xff0c;实现程序状态的保存和共享。反序列化反之。 序列化后的变量再被反序列化回来之后&#xff0c;两者之间已经没有任何关系。 序列化后的文件是在不同程序或者说不同语言之间传递数据的关键方…

分享5款.NET开源免费的Redis客户端组件库

前言 今天大姚给大家分享5款.NET开源、免费的Redis客户端组件库&#xff0c;希望可以帮助到有需要的同学。 StackExchange.Redis StackExchange.Redis是一个基于.NET的高性能Redis客户端&#xff0c;提供了完整的Redis数据库功能支持&#xff0c;并且具有多节点支持、异步编…

[Git][分支管理][上]详细讲解

目录 1.理解分支2.创建分支3.切换分支4.合并分支5.删除分支 1.理解分支 感性理解&#xff1a;分支可以理解为平行宇宙&#xff0c;但是在用户需要的时候&#xff0c;可以将两个平行宇宙合并&#xff0c;此时两个平行宇宙的效果将会"叠加"理性理解&#xff1a;每次提…

TCP 和 UDP 之间的区别?

从 连接&#xff0c;可靠性&#xff0c;传输方式等方面&#xff1a; TCP 是面向连接的协议&#xff0c;在发送数据的时候需要先通过 TCP 的三次握手&#xff0c;而 UDP 是无连接的协议&#xff0c;可以直接传输数据TCP 通过超时重传&#xff0c;流量控制和拥塞控制等方法保障了…

使用JWT的SpringSecurity实现前后端分离

1. SpringSecurity完成前后端完全分离 分析&#xff1a; 前后端分离&#xff1a;响应的数据必须为JSON数据&#xff0c;之前响应的是网页 需要修改的代码有&#xff1a; 登录成功需要返回json数据登录失败需要返回json数据权限不足时返回json数据未登录访问资源返回json数据 1.…

二叉树的前序遍历 - 力扣(LeetCode)C语言

144. 二叉树的前序遍历 - 力扣&#xff08;LeetCode&#xff09;(点击前面链接即可查看题目) 一、题目 给你二叉树的根节点 root &#xff0c;返回它节点值的 前序 遍历。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,2,3]示例 2&#xff1a; …

文心智能体【MBTI速测小精灵】:趣味速测,精准解析你的性格密码!

文章目录 一、文心智能体平台是什么&#xff1f;二、创建文心智能体智能体创建智能体调试分析智能体基础配置智能体高级配置智能体高级调试 三、文心智能体发布四、文心智能体体验总结 一、文心智能体平台是什么&#xff1f; AgentBuilder文心智能体平台是基于文心大模型的智能…

适用于 Android 的 6 大视频恢复软件榜单 – 恢复您的珍贵回忆!

失去珍贵的回忆可能是一种令人心碎的经历&#xff0c;尤其是在您的 Android 设备上拍摄视频时。无论是由于意外删除、格式化、系统崩溃还是任何其他不可预见的情况&#xff0c;丢失珍贵视频的想法都会造成巨大的痛苦。但不要担心&#xff01;在这篇博文中&#xff0c;我们将深入…

临床随机对照试验中的分层问题及其解决方法

在临床随机对照试验&#xff08;Randomized Controlled Trials, RCTs&#xff09;中&#xff0c;分层问题&#xff08;Stratification Issues&#xff09;是影响研究结果有效性的重要因素之一。RCTs是评估医疗干预效果的金标准&#xff0c;旨在通过随机分组和对照来消除干扰因素…

在亚马逊云科技AWS上利用ElasticSearch和RAG搭建个性化推荐系统

简介&#xff1a; 小李哥将继续每天介绍一个基于亚马逊云科技AWS云计算平台的全球前沿AI技术解决方案&#xff0c;帮助大家快速了解国际上最热门的云计算平台亚马逊云科技AWS AI最佳实践&#xff0c;并应用到自己的日常工作里。 本次介绍用当下热门的RAG和大语言模型&#xf…

[WUSTCTF2020]朴实无华1

打开题目 扫目录用dirsearch扫&#xff0c;为节省建议只扫常见的目录&#xff0c;配置是&#xff1a; ./dirsearch.py -e bak,zip,txt,tgz,php -u http:..... -s 3 -t 20 访问一下 根据提示&#xff0c;再访问一次 提示不在这&#xff0c;抓包看看 根据提示&#xff0c;改ge…

页面根据sse返回的流,逐句展示内容,达到gpt效果

之前的文章里&#xff0c;我写到了关于怎么获取sse中的流&#xff0c;但是缺少逐句展示的效果&#xff0c;这次来补齐。 比如这种&#xff0c;实现难点在于&#xff0c;当返回的markdown语法&#xff0c;不是完整的语句时&#xff0c;展示的代码块会错乱。 实现代码 app.vue …

P10477 题解

题目传送门 题目传送门&#xff08;洛谷&#xff09; Step1 理解题意 一共有 T T T 组数据有一个地铁&#xff0c;有一个中心车站&#xff08;即为根&#xff09;&#xff0c;有一个人从中心车站出发。对于每组数据&#xff0c;给定两个同样长度的01串 s 1 s_1 s1​ , s …

内网安全:多种横向移动方式

1.MMC20.Application远程执行命令 2.ShellWindows远程执行命令 3.ShellBrowserWindow远程执行命令 4.WinRM远程执行命令横向移动 5.使用系统漏洞ms17010横向移动 DCOM&#xff1a; DCOM&#xff08;分布式组件对象模型&#xff09;是微软的一系列概念和程序接口。它支持不同…

C语言--函数

1. 函数定义 语法&#xff1a; 类型标识符 函数名&#xff08;形式参数&#xff09; {函数体代码 } &#xff08;1&#xff09;类型标识符 --- 数据类型&#xff08;函数要带出的结果的类型&#xff09; 注&#xff1a;数组类型不能做函数返回结果的类型&#xff0c;如果函…

Tomcat 8.5 下载、安装、启动及各种问题

&#x1f970;&#x1f970;&#x1f970;来都来了&#xff0c;不妨点个关注叭&#xff01; &#x1f449;博客主页&#xff1a;欢迎各位大佬!&#x1f448; 本期内容主要介绍 Tomcat 8 的安装&#xff0c;以及可能会遇到的问题 文章目录 1. Tomcat 安装2. 可能会遇到的问题2.…

【vluhub】skywalking

SkyWalking是一个开源监控平台&#xff0c;用于从服务和云原生基础设施收集、分析、聚合和可视化数据 低版本存在sql注入漏洞 访问地址 http://192.168.203.12:8080/graphql burpsuite抓数据包 替换 {"query":"query queryLogs($condition: LogQueryConditi…