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

news2024/11/16 10:47:36

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/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
<?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.coloradmin.cn/o/1975530.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【leetcode详解】寻找两个正序数组的中位数:最简单的【困难】题?

简评&#xff1a; 可以说&#xff0c;要做出来这道题&#xff0c;实际上是非常简单的 //这也是笔者目前唯一解出来的唯一一道【困难】题哈哈哈哈 思路解析&#xff1a; 将两个向量合并 class Solution { public:double findMedianSortedArrays(vector<int>& nums1…

c# MetroForm 和 IntPtr unsafe

一、NuGet安装框架 修改代码 效果&#xff1a; 结果&#xff1a; TopLevel与TopMost属性 frm.TopLevel false; //Form.TopLevel 获取或设置一个值&#xff0c;该值指示是否将窗体显示为顶级窗口。frm.TopMost false; //Form.TopMost 获取或设置一个值&#xff0c;指示该窗体…

嵌入式人工智能(43-基于树莓派4B的刷卡模块射频识别RFID-RC522)

1、RFID 射频识别&#xff08;RFID&#xff0c;Radio Frequency Identification&#xff09;是一种无线通信技术&#xff0c;用于自动识别和追踪标签上的信息。这项技术基于射频信号的传输和接收&#xff0c;通过将标签上的数据存储在特定的芯片中&#xff0c;实现物体的识别和…

上市公司绿色信息披露质量评分数据(2008-2023年)

数据来源&#xff1a;基础数据来源于上市公司年报/社会责任报告/环境报告以及ZJ会及统计局 时间跨度&#xff1a;2008-2023年 数据范围&#xff1a;企业及行业层面 数据指标&#xff1a; 按照是否货币化分类企业对于环境信息的披露:对于货币化的信息&#xff0c;定量和定性…

共襄恰青赛马节盛事 共享农业产业园成果

恰青赛马节是那曲一年一度的草原盛事&#xff0c;是藏北规模盛大的传统节日&#xff0c;承载着那曲悠久的文化底蕴&#xff0c;体现了藏北各族群众丰富的传统习俗&#xff0c;更是深受民众欢迎。今年的赛马节上&#xff0c;色尼区国家现代农业产业园紧抓机遇&#xff0c;设置农…

Android设备发送蓝牙文件到电脑笔记本失败解决

Android设备发送蓝牙文件到电脑笔记本失败解决 文章目录 Android设备发送蓝牙文件到电脑笔记本失败解决一、前言二、解决1、比较旧的电脑2、大部分新的电脑 三、其他1、发送蓝牙文件到Window电脑端小结2、可传输的蓝牙文件的文件类型 一、前言 普通手机之间蓝牙配对后&#xf…

软件测试开发

软件测试的职业发展 起点&#xff1a;功能测试 走管理 业务专家行业业务专家行业业务发展专家 走技术 测试开发资深测试开发测试架构师/全栈测试工程师 软件开发模型 瀑布模型 V模型和W模型 W模型和V模型都把软件的开发视为需求&#xff0c;设计&#xff0c;编码&#x…

SolarMarker 正在使用水坑攻击与伪造的 Chrome 浏览器更新进行攻击

在过去的三个月里&#xff0c;eSentire 的安全研究团队发现信息窃密恶意软件 SolarMarker 都没有发动攻击&#xff0c;却在最近忽然重返舞台。此前&#xff0c;SolarMarker 的运营者使用 SEO 投毒或者垃圾邮件来引诱受害者&#xff0c;受害者试图下载一些文档的免费模板&#x…

非对称加密:数据安全的双重保障

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

每日OJ_牛客HJ73 计算日期到天数转换

目录 牛客HJ73 计算日期到天数转换 解析代码 牛客HJ73 计算日期到天数转换 计算日期到天数转换_牛客题霸_牛客网 解析代码 用一个数组存放每月的累积天数输入的日期天数 当月的天数 当月之前的累积天数&#xff0c;如果包含二月&#xff0c;再去判断是否为闰年&#xff0c;…

听专家的,不如听国家的,网络安全究竟值不值得报?

考学选专业&#xff0c;或者跳槽选行业的&#xff0c;看这篇&#xff01; 如果你什么都不懂&#xff0c;家里也没有矿&#xff0c;那就紧跟国家大事和地方政策。 关于网络安全专业究竟是否值得报考? 要知道“二十大”、“十四五”等大会一直在提一个词叫做“数字中国建设”…

精通推荐算法19:特征交叉之DeepFM -- 异构模型Wide侧引入FM

1 引言 Wide & Deep的提出&#xff0c;使推荐模型同时具备记忆和泛化能力。通过融合低阶和高阶特征交叉&#xff0c;开启了推荐算法异构模型的风潮。后续越来越多的模型&#xff0c;在其基础上进一步优化&#xff0c;并取得了不错的效果。DeepFM就是其中一个很经典的模型&…

渗透测试--钓鱼网站实验

实验原理 使用工具 setoo1kit&#xff0c;构造钓鱼网站&#xff0c;钓鱼网站可以选择为比较知名的网站&#xff0c;例如学信网。被攻击者访问了钓鱼网站&#xff0c;输入自己的真实账号密码进行登录&#xff0c;账号密码会被 kali 收集 实验步骤 打开 kali 终端&#xff0c;输…

PyCharm中安装和使用FittenCode的AI插件助手

AI 逐步进入生活的方方面面&#xff0c;在编程开发中也不例外&#xff0c;下面简单记录一下 PyCharm IDE中安装和使用FittenCode插件AI助手的过程&#xff1b; 1&#xff0c;假设本地已经安装 PyCharm IDE, 如果还没有安装到如下地址进行下载2024年社区版&#xff1a; Thank …

短视频平台引流玩法

今天盘点了4大视频类的主流平台的精准引流触点&#xff0c;拿去用吧&#xff01;

Qt pdf文件转换操作

qt文件转换操作&#xff0c;包括word转为pdf&#xff1b;Excel转为pdf&#xff1b;PPT转为pdf&#xff1b;image转为pdf&#xff1b;pdf转为文本文件&#xff1b;pdf导出图片&#xff1b;接口如下所示&#xff1a; #pragma once #include <QObject> #include "file…

模拟实现strcat(字符串追加)

1.我们要知道stcat的作用是什么&#xff0c;字符串追加。 2.我们进行模仿&#xff0c;我们先将arr1不断&#xff0c;直到“\0”,我们加在后面。 //模拟实现strcat(字符串追加) char* my_strcat(char* arr1, const char* arr2) {assert(arr1 && arr2);char ret arr1;…

揭秘!格行随身WiFi:如何在‘内卷’市场中逆袭?如何重新定义市场新标准?随身WIFI哪个品牌网速快,续航时间长?随身WiFi热卖第一名

近年来&#xff0c;随身WiFi市场竞争激烈&#xff0c;部分商家为追求利润最大化&#xff0c;不惜采取偷工减料等不正当手段&#xff0c;导致产品质量参差不齐&#xff0c;消费者在使用过程中频繁遭遇信号不稳定、网络卡顿、电池不耐用等问题。这种“内卷”现象不仅损害了消费者…

Hive命令为表增加字段(内置数据库)

【实验目的】 1) 了解hive操作命令 2) 熟练操作hive数据库 【实验原理】 进入hive shell环境&#xff0c;确保hive中存在已经创建的表结构&#xff0c;然后可以通过alter命令对表的字段进行修改。 【实验环境】 本次环境是&#xff1a;centos6.5 Hadoop-2.4.1 jdk1.7.0_7…

【数据结构与算法】单链表、双链表和循环单链表中头指针未知的情况下能否删除某节点

在单链表、双链表和循环单链表中&#xff0c;若仅知道指针p指向某结点&#xff0c;不知道头指针&#xff0c;能否将结点p从相应的链表中删去&#xff1f;为什么&#xff1f;若可以&#xff0c;其时间复杂度各为多少&#xff1f; 单链表&#xff1a;不能 在单链表中&#xff0c…