Spring Security入门教程:利用Spring Security实现安全控制

在现今这个数码大展拳脚的时代,安全问题无疑是咱们这些搞软件开发的人需要谨慎应对的一块烫手山芋,无论是那些大型企业应用,还是那种小打小闹的个人项目,对我们宝贵的数据和服务的保护都显得尤为关键。

试想一下,若是没有咱这神奇的Spring Security保驾护航,那我们的每一个接口岂不成为了互联网世界里的羔羊,任由他人肆意挑战?这种情况想想就让人心惊胆战啊!因此,我们会想到在接口被调用时,能不能让咱的后端猜出是哪个家伙在捣鬼呢?这样就能有效防止别人胡乱开关我们的接口了。除了这个痛点之外,还有个问题就是如何判断是哪位用户触发的操作呢?这可真是给咱们带来了不小的困扰。这时,Spring Security横空出世,成了解决这些难题的救星。

作为Spring大家族中的一员猛将,Spring Security为我们提供了一整套周全且灵活多变的安全防御体系,让应用的安全防线固若金汤。本文中,我们就一起来探讨如何运用Spring Security来保卫我们的应用吧。从Spring Security的基础概念讲起,逐步介绍如何搭建出扎实的横向跨越式的Spring Security应用;接着深入讲解配置Spring Security的细节,以满足咱们接口防御和数据防护的各种需求。

文章目录

    • 搭建Spring Security环境
      • 第一步,创建spring boot应用
      • 第二步,引入spring security的依赖
      • 第三步,配置自定义的用户名和密码

搭建Spring Security环境

第一步,创建spring boot应用

	    <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>

我们首先创建一个springboot的应用,我们引入了一个web包这样的话,我们就可以通过HTTP的方式调用我们的接口。

里面我们可以给他新建一个实体类和一个接口类。用来验证我们的最基础的接口。

User实体类

public class User {private String name;private Integer age;public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}
}

BasicController接口类

package com.masiyi.springsecuritydemo.demos.web;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;@Controller
public class BasicController {// http://127.0.0.1:8080/hello?name=lisi@RequestMapping("/hello")@ResponseBodypublic String hello(@RequestParam(name = "name", defaultValue = "unknown user") String name) {return "Hello " + name;}// http://127.0.0.1:8080/user@RequestMapping("/user")@ResponseBodypublic User user() {User user = new User();user.setName("theonefx");user.setAge(666);return user;}}

这个时候我们可以看到,我们只要在浏览器上输入这个地址。就可以返回我们服务里面的内容。那么这就有一个问题,就是说如果我们把这个服务发布在互联网上面,那不是谁都可以调用。所以他就没有一个安全防护的一个环节。

在这里插入图片描述

第二步,引入spring security的依赖

        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency>

我们在项目的pom文件中引入上面的maven代码,记得一定要刷新maven,并且重新启动项目。这样的话,相当于我们的系统就自动引入Spring security的jar包。引入了之后我们就可以直接使用。

可以看到自从引入了这个jar包之后,我们的启动的控制台就会多了一些额外的输出。我们可以看到里面有一个默认生成的密码。我们把它复制下来。

0b34de66-bec1-4a00-aea6-f2cc34e35b28

在这里插入图片描述

现在我们现在在浏览器上输入刚刚一样的内容。

	http://localhost:8080/hello

在这里插入图片描述

就会发现我们已经无法直接请求到服务里面返回的内容了,而是直接给我们重定向了一个登录页面的地址。这个登录页面的地址是spring security自己生成的一个默认的登录页面。这个时候我们需要重新输入用户名和密码,用户名默认是user。然后密码默认是我们刚刚控制台复制好的密码。

请添加图片描述

这个时候我们就会发现他又给我们从定向到了hello那个页面这样的话和我们第一步直接访问这个url。所看到的结果是一样的,那么他做了什么事呢?就是在我们访问这个结果之前多了一个登录的页面,这样的话就可以把我们所有系统的接口全部给做一层防护。只有在我们输入用户和密码正确的时候,它才会继续给我们访问系统的接口。

第三步,配置自定义的用户名和密码

大家可以看到我们刚刚控制台生成的密码其实是一个随机的字符串,它是security默认生成的,所以现在我们可以给它配一个默认的用户名和密码。我们可以在配置文件中输入以下的配置给他配置自定义的用户名和密码。

spring.security.user.name=wangfugui
spring.security.user.password=123123

在这里插入图片描述

在这里插入图片描述

我们在用我们自定义的用户名和密码登录成功之后,就可以访问我们项目中的任意一个地址。

在这里插入图片描述

完成以上三步,我们就成功引入了springsecurity,并制定了我们自己的用户名和密码。不过你们有没有想过,在实际的项目中,我们真的会将用户名和密码写在配置文件中吗?这显然是不可能的。我们肯定是将这些信息存放在数据库当中,然后用户进行登录时,我们会依据他们提供的用户名和密码来与数据库中的匹配,如果匹配成功,那就让他们登录成功,并赋予他们访问系统接口的权限。

我们还可以为系统添加一个注册的功能。但这个时候,我们就会面临一个新问题。既然我们的每个接口都被spring security拦截了,那我们的注册接口岂不是也要被拦截掉?这就引出了一个新的问题。到时候我们下一节课会教大家如何在spring security中具体配置哪些接口应该被拦截,哪些应该放行,即那些不需要登录就能直接访问的接口。

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

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

相关文章

Java代码基础算法练习-求数据序列的最大值及最小值---2024.3.15

题目 任务描述&#xff1a;输入n个整数&#xff0c;求n个整数的最大值及最小值&#xff0c;并输出相应的位置序号。&#xff08;注&#xff1a;n<10&#xff0c; 位置序号从1开始计算&#xff0c;若存在多个相同值的情形&#xff0c;则输出第1个值的序号&#xff09; 任务要…

PTA题解 --- 求整数段和(C语言)

今天是PTA题库解法讲解的第二天&#xff0c;接下来讲解求整数段和&#xff0c;题目如下&#xff1a; 为了解决这个问题&#xff0c;你可以遵循以下的思路&#xff1a; 1. 读取输入的两个整数A和B。 2. 使用一个for循环&#xff0c;从A遍历到B。 3. 在循环中&#xff0c;打印当…

试卷上的水印如何去除?分享3种常用的方法!

在日常生活和工作中&#xff0c;我们经常会遇到一些带有水印的试卷或文档&#xff0c;这些水印不仅影响了我们的阅读体验&#xff0c;还可能对我们的工作和学习产生一定的困扰。那么&#xff0c;如何有效去除试卷上的水印呢&#xff1f;今天&#xff0c;就让我们一起来探讨这个…

渗透测试实战思路分析

免责声明&#xff1a;文章来源真实渗透测试&#xff0c;已获得授权&#xff0c;且关键信息已经打码处理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人…

Liunx下安装Redis(详细安装)

1、创建一个文件目录 mkdir /opt/redis2、进入安装目录 cd /opt/redis3、下载redis默认安装包 默认是3.0版本的 wget http://download.redis.io/releases/redis4、进行解压 tar -xzvf redis-3.0.7.tar.gz5、进入解压好的文件夹目录 cd redis-3.0.7 6、将redis重新安装到 …

Python面向对象构造函数:手把手教你如何玩转对象初始化

我们都知道&#xff0c;Python是一个面向对象的语言&#xff0c;这意味着我们可以用类来定义对象的属性和方法。而构造函数&#xff0c;就是当我们创建一个新的对象时&#xff0c;会自动调用的特殊方法。那么&#xff0c;如何玩转这个构造函数呢&#xff1f; 首先&#xff0c;…

JAVA基础—JVM内存结构基础需知

1.JVM内存结构 JVM内存结构分为5个区域&#xff1a;方法区&#xff0c;虚拟机栈&#xff0c;本地方法栈、堆、程序计数器。 1.方法区&#xff08;Method Area&#xff09;&#xff1a;用于存储类的结构信息、常量、静态变量、即使编译器编译后的代码等数据。方法区也是所有线…

【数据库】Oracle内存结构与参数调优

Oracle内存结构与参数调优 Oracle 内存结构概览oracle参数配置概览重要参数&#xff08;系统运行前配置&#xff09;:次要参数&#xff08;可在系统运行后再优化调整&#xff09;: Oracle数据库服务器参数如何调整OLTP内存分配操作系统核心参数配置Disabling ASMM&#xff08;禁…

React18 后台管理模板项目:现代、高效与灵活

&#x1f389; 给大家推荐一款React18TypescriptVitezustandAntdunocss且超级好用的中后台管理框架 项目地址 码云&#xff1a;https://gitee.com/nideweixiaonuannuande/xt-admin-react18github&#xff1a;https://github.com/1245488569/xt-admin-react18 演示地址 http…

2024年【安全员-A证】复审考试及安全员-A证模拟试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 安全员-A证复审考试参考答案及安全员-A证考试试题解析是安全生产模拟考试一点通题库老师及安全员-A证操作证已考过的学员汇总&#xff0c;相对有效帮助安全员-A证模拟试题学员顺利通过考试。 1、【多选题】《安全生产…

男生穿什么裤子最帅?目前最流行的男裤子款式分享

现在不少男生朋友都觉得裤子特别难选&#xff0c;尤其是市面上经常会有一些面料劣质、版型不正确的款式&#xff0c;导致大家选衣服就尤其容易踩雷。所以今天就来和大家分享一下哪些口碑较好的男装品牌值得推荐&#xff01; 男装裤子怎么选&#xff1f;市面上的品牌多得数不胜数…

layuiAdmin-通用型后台模板框架【广泛用于各类管理平台】

1. 主页 1.1 控制台 2. 组件 3. 页面 3.1 个人主页 3.2 通讯录 3.3 客户列表 3.4 商品列表 3.5 留言板 3.6 搜索结果 3.7 注册 3.8 登入 3.9 忘记密码 4. 应用 4.1 内容系统 4.1.1 文章列表 4.1.2 分类管理 4.1.3 评论管理 4.2 社区系统 4.2.1 帖子列表 4.2.2 回…

2024年【危险化学品经营单位安全管理人员】考试及危险化学品经营单位安全管理人员考试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 危险化学品经营单位安全管理人员考试根据新危险化学品经营单位安全管理人员考试大纲要求&#xff0c;安全生产模拟考试一点通将危险化学品经营单位安全管理人员模拟考试试题进行汇编&#xff0c;组成一套危险化学品经…

第二百零四回

文章目录 1 .概念介绍2. 使用方法3. 示例代码 我们在上一章回中介绍了自定义缓冲组件相关的内容&#xff0c;本章回中将介绍一个和它类似的组件&#xff1a;下拉刷新组件.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1 .概念介绍 我们在本章回介绍的下拉刷新组件叫Refres…

Java基础-复制

复制 前言引用拷贝浅拷贝深拷贝重写clone()方法序列化 前言 在编码中,我们可能会遇到需要将对象的属性复制到另一个对象中,这种情况叫做拷贝. 拷贝与Java内存结构有密切关系,拷贝有三种情况,引用拷贝,深拷贝和浅拷贝,下面来了解一下. 引用拷贝 引用拷贝会生成一个新的对象引…

15届蓝桥杯第二期模拟赛题单详细解析

文章目录 &#x1f9e1;&#x1f9e1;t1_求余&#x1f9e1;&#x1f9e1;思路代码 &#x1f9e1;&#x1f9e1;t2_灌水&#x1f9e1;&#x1f9e1;思路代码 &#x1f9e1;&#x1f9e1;t3_字符显示&#x1f9e1;&#x1f9e1;思路代码 &#x1f9e1;&#x1f9e1;t4_区间最大和…

携手共进办公网络安全

一、引言 在数字化时代的今天&#xff0c;办公网络安全问题已日益成为企业发展的重要课题。随着信息技术的快速发展&#xff0c;网络安全威胁也呈现出多样化、复杂化的趋势。这些危害可能源于网络本身的漏洞、人为因素或外部威胁&#xff0c;给企业的信息安全和正常运营带来严…

游戏组队新姿势!Xinstall一键拉起,好友秒速加入你的战队!

在如今的游戏世界中&#xff0c;与好友一起组队开黑已成为一种潮流。然而&#xff0c;繁琐的组队过程往往让玩家们望而却步。这时&#xff0c;你需要一款强大的辅助工具——Xinstall&#xff0c;它是一站式App全渠道统计服务商&#xff0c;专注于提供App传参安装、全渠道广告效…

springboot274基于web的电影院购票系统

电影院购票系统设计与实现 摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装电影院购票系统软件来发挥其高效…