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; 任务要…

深度学习训练结果记录---日志文件写入logger 【简洁明了】

目录 介绍举例1.引入头文件2.封装函数3.在程序入口调用4. 记录训练过程 介绍 在进行深度学习模型训练的过程中&#xff0c;一般会设置log日志&#xff0c;将训练过程的中间结果以及最终结果写入&#xff0c;方便再次打开的时候进行查看。 logging的一些函数这里就不作介绍&…

【Realsense】解决Ubuntu 20.04安装Realsense SDK后realsense-ros报错的问题

最近在Ubuntu 20.04上安装了Realsense SDK&#xff08;版本为2.54.2&#xff09;&#xff0c;但在尝试编译安装realsense-ros&#xff0c;按照Intel官方安装教程执行catkin_clean&#xff08;或者catkin_make&#xff09;&#xff0c;遇到了如下报错&#xff1a; CMake Error …

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;均由使用者本人…

【LeetCode周赛】第388场周赛

目录 100233. 重新分装苹果 简单100247. 幸福值最大化的选择方案 中等100251. 数组中的最短非公共子字符串 中等100216. K 个不相交子数组的最大能量值 困难 100233. 重新分装苹果 简单 100233. 重新分装苹果 分析&#xff1a; 排序贪心 代码&#xff1a; class Solution {…

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重新安装到 …

【C++】每日一题 82 删除排序链表中的重复元素

给定一个已排序的链表的头 head &#xff0c; 删除原始链表中所有重复数字的节点&#xff0c;只留下不同的数字 。返回 已排序的链表 。 class ListNode { public:int val;ListNode* next;ListNode(int _val) {val _val;next nullptr;} };ListNode* deleteDuplicates(ListNo…

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

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

第七十八周周报

学习目标&#xff1a; 一、实验 学习时间&#xff1a; 2024.3.9-2024.3.15 学习产出&#xff1a; 实验 目前stylegna2、diffusion-stylegan2、U-ViT的实验以及ViTGAN cifar10的定性试验已经完成&#xff0c;还剩CelebA64的定性实验&#xff0c;以及DiT的实验。DiT模型改完…

蓝桥集训之大臣的旅费

蓝桥集训之大臣的旅费 核心思想&#xff1a;dfs求树的直径 从原点开始 找距离其最远的点 然后再找一次最远点 之间距离为直径2次dfs即可求出最长距离 #include<bits/stdc.h>using namespace std;const int N 1e610; int n ;int cnt[N] , e[N] , ne[N] , h[N] , idx ;i…

[Java、Android面试]_04_进程、线程、协程

本人今年参加了很多面试&#xff0c;也有幸拿到了一些大厂的offer&#xff0c;整理了众多面试资料&#xff0c;后续还会分享众多面试资料。 整理成了面试系列&#xff0c;由于时间有限&#xff0c;每天整理一点&#xff0c;后续会陆续分享出来&#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、【多选题】《安全生产…

24计算机考研调剂 | 太原科技大学

2024年太原科技大学 力学专业 接收研究生调剂通告 考研调剂招生信息 招生专业&#xff1a; 080100&#xff08;力学&#xff09; 01先进材料变形行为及力学性能 02 计算力学及其应用 03结构动力学与无损检测 04复合材料断裂理论与结构设计 补充内容 调剂考生基本要求 &…

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

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