SpringSecurity快速入门和自定义用户名、密码的实现

2023-11-08

在SpringBoot项目中导入SpringSecurity依赖

1、在SpringBoot项目中的pom.xml文件中添加SpringSecurity依赖

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

2、启动SpringBoot项目中的启动类
在控制台中出现这个密码,这就是我们没有实现自定义密码,SpringSecurity帮我们自动生成的密码。
在这里插入图片描述
3、拿到这个密码后,我们就可以使用SpringSecurity为我们自动生成的账号和密码登录了
在这里插入图片描述


出现下面的页面说明我们已经登录成功了(因为我没有写任何东西,所以页面会出现404异常)。
在这里插入图片描述

自定义用户名和密码登录的实现

自定义用户名和密码登录的实现方法有三种:
第一种:配置文件的实现
第二种:继承WebSecurityConfigurerAdapter类,并且将BCryptPasswordEncoder对象交给Spring容器管理。
第三种:实现UserDetailsService接口,从数据库中查找用户名和密码
【注意事项】:三个方法只能选其一,不可以同时存在。

第一种实现方式:配置文件的实现

spring:
  security:
    user:
      name: "admin"
      password: "admin123"
      roles: "admin"

这样就是只能按照规定的用户名和密码登录了,再次启动SpringBoot项目时,SpringSecurity也不会自动帮助我们生成密码了。

第二种实现方式:继承WebSecurityConfigurerAdapter类,并且将BCryptPasswordEncoder对象交给Spring容器管理。

我们首先写一个配置类,并且使用@Configuration注解标记这个配置类,这样在启动SpringBoot的启动类时,Spring会自动将这个配置类交给Bean管理。继承WebSecurityConfigurerAdapter类,重写configure()方法。

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {

        auth.inMemoryAuthentication().withUser("admin")           // 用户名
                                    .password(passwordEncoder().encode("admin123"))   // 密码
                                    .authorities("admin");                 // 权限集合
    }

    @Bean
    public BCryptPasswordEncoder passwordEncoder() {

        return new BCryptPasswordEncoder();
    }
}


第三种:实现UserDetailsService接口,从数据库中查找用户名和密码

1、目前数据库中的数据表中有两条数据
在这里插入图片描述
2、在pom文件中导入MyBatis-Plus(或者Mybatis)和数据库依赖

		<!--导入MyBatis-Plus依赖 用来操作数据库-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.1</version>
        </dependency>

        <!--导入数据库依赖来配置数据源找到数据库-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

3、创建实体类

import java.io.Serializable;

public class Users implements Serializable {

    private static final long serialVersionUID = -2950916241569716094L;
    
    private Integer id;

    private String username;

    private String password;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "Users{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

4、创建Mapper接口并且继承BaseMapper<实现类>接口,这样可以用MyBatis-Plus操作数据库了

@Mapper
public interface UserMapper extends BaseMapper<Users> {

}

5、创建自定义服务类实现UserDetailsService接口

【先到这里,下午继续写…】

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringSecurity快速入门和自定义用户名、密码的实现 的相关文章

  • Oracle Java 教程 - 回答问题时可能出现错误

    我是 Java 新手 正在阅读 Oracle 教程 每个部分之后都有问题和答案 我不明白一个答案中的一句话 见下面的粗体线 来源是https docs oracle com javase tutorial java javaOO QandE
  • 当路径的点超出视野时,Android Canvas 不会绘制路径

    我在绘制路径时遇到了 Android Canvas 的一些问题 我的情况是 我有一个相对布局工作 如地图视图 不使用 google api 或类似的东西 我必须在该视图上绘制一条路径 canvas drawPath polyPath bor
  • Reactive Spring 不支持 HttpServletRequest 作为 REST 端点中的参数?

    我创建了一个 RestController 如下所示 RestController public class GreetingController RequestMapping value greetings method RequestM
  • 文本在指定长度后分割,但不要使用 grails 打断单词

    我有一个长字符串 需要将其解析为长度不超过 50 个字符的字符串数组 对我来说 棘手的部分是确保正则表达式找到 50 个字符之前的最后一个空格 以便在字符串之间进行彻底的分隔 因为我不希望单词被切断 public List
  • Spring数据中的本机查询连接

    我有课 Entity public class User Id Long id String name ManyToMany List
  • Android蓝牙java.io.IOException:bt套接字已关闭,读取返回:-1

    我正在尝试编写一个代码 仅连接到运行 Android 5 0 KitKat 的设备上的 目前 唯一配对的设备 无论我尝试了多少方法 我仍然会收到此错误 这是我尝试过的最后一个代码 它似乎完成了我看到人们报告为成功的所有事情 有人能指出我做错
  • 如何使用正则表达式验证 1-99 范围?

    我需要验证一些用户输入 以确保输入的数字在 1 99 范围内 含 这些必须是整数 Integer 值 允许前面加 0 但可选 有效值 1 01 10 99 09 无效值 0 007 100 10 5 010 到目前为止 我已经制定了以下正则
  • 虽然我的类已加载,但 Class.forName 抛出 ClassNotFoundException

    代码如下 它的作用是加载我放在主目录中的 jar 文件中的所有类 import java io File import java util jar JarFile import java util jar JarEntry import j
  • 如何从日期中删除毫秒、秒、分钟和小时[重复]

    这个问题在这里已经有答案了 我遇到了一个问题 我想比较两个日期 然而 我只想比较年 月 日 这就是我能想到的 private Date trim Date date Calendar calendar Calendar getInstanc
  • 我们如何测试包私有类?

    我正在看书Effective Java in Item 13 Minimize the accessibility of classes and members 它提到 为了方便测试 您可能想让类 接口或成员更易于访问 这在某种程度上是好的
  • 如何停止执行的 Jar 文件

    这感觉像是一个愚蠢的问题 但我似乎无法弄清楚 当我在 Windows 上运行 jar 文件时 它不会出现在任务管理器进程中 我怎样才能终止它 我已经尝试过 TASKKILL 但它对我也不起作用 On Linux ps ef grep jav
  • Play.application() 的替代方案是什么

    我是 Play 框架的新手 我想读取conf文件夹中的一个文件 所以我用了Play application classloader getResources Data json nextElement getFile 但我知道 play P
  • 使用Java绘制维恩图

    我正在尝试根据给定的布尔方程绘制维恩图 例如 a AND b AND c我想在 Android 手机上执行此操作 因此我需要找到一种使用 Java 来执行此操作的方法 我找到了一个完美的小部件 它可以完成我在这方面寻找的一切布尔代数计算器
  • 如何从 Ant 启动聚合 jetty-server JAR?

    背景 免责声明 I have veryJava 经验很少 我们之前在 Ant 构建期间使用了 Jetty 6 的包装版本来处理按需静态内容 JS CSS 图像 HTML 因此我们可以使用 PhantomJS 针对 HTTP 托管环境运行单元
  • 无需登录即可直接从 Alfresco 访问文件/内容

    我的场景是这样的 我有一个使用 ALFRESCO CMS 来显示文件或图像的 Web 应用程序 我正在做的是在 Java servlet 中使用用户名和密码登录 alfresco 并且我可以获得该登录的票证 但我无法使用该票证直接从浏览器访
  • 我可以限制分布式应用程序发出的请求吗?

    我的应用程序发出 Web 服务请求 提供商处理的请求有最大速率 因此我需要限制它们 当应用程序在单个服务器上运行时 我曾经在应用程序级别执行此操作 一个对象跟踪到目前为止已发出的请求数量 并在当前请求超出允许的最大负载时等待 现在 我们正在
  • 源值 1.5 的错误已过时,将在未来版本中删除

    我使用 scala maven plugin 来编译包含 scala 和 java 代码的项目 我已经将源和目标设置为1 7 但不知道为什么maven仍然使用1 5 这是我在 pom xml 中的插件
  • 检查应用程序是否在 Android Market 上可用

    给定 Android 应用程序 ID 包名称 如何以编程方式检查该应用程序是否在 Android Market 上可用 例如 com rovio angrybirds 可用 而 com random app ibuilt 不可用 我计划从
  • 将对象从手机共享到 Android Wear

    我创建了一个应用程序 在此应用程序中 您拥有包含 2 个字符串 姓名和年龄 和一个位图 头像 的对象 所有内容都保存到 sqlite 数据库中 现在我希望可以在我的智能手表上访问这些对象 所以我想实现的是你可以去启动 启动应用程序并向左和向
  • 即使调整大小,如何获得屏幕的精确中间位置

    好的 这个问题有两部分 当我做一个JFrame 并在其上画一些东西 即使我将宽度设置为 400 并使其在一个项目击中它时 当然 允许项目宽度 它会反弹回来 但由于某种原因 它总是偏离屏幕约 10 个像素 有没有办法解决这个问题 或者我只需要

随机推荐

  • Linux中FTP传输协议

    目录 一 ftp的简介 实验一 匿名传输 1 配置文件 etc vsftpd vsftpd conf 2 在 var ftp pub中新建文件并写数据 3 在cmd中连接虚拟机 4 向真机发送文件 5 向虚拟机发送文件 实验二 禁止任意用户
  • c语言简易密码本爆破

    代码如下 实现原理比较简单 通过读取txt文件密码本与内置好的密码口令进行对比 密码本可以在网页上找 也可以用这个密码字典下载 弱口令字典下载 密码字典 迷你下载站为大家分享这个弱口令字典文件 它列出了多款规则的密码 有需要的大神们可以参考
  • 485、CAN、单总线、SPI、I2C的概念,特点,协议,使用方法及通信方式,还有它们之间的区别

    一 概念 1 485 485 一般称作 RS485 EIA 485 是隶属于 OSI 模型物理层的电气特性规定为 2 线 半双工 多点通信的标准 它的电气特性和 RS 232 大不一样 用缆线两端的电压差值来表示传递信号 2 CAN CAN
  • C#中变量的类型

    文章目录 值类型 引用类型 值类型与引用类型的区别 枚举类型 变量的作用域 值类型 C 中值类型的变量主要包括整数类型 浮点类型 decimal和bool类型等 值类型的变量都在堆栈中进行分配 因此效率很高 所以使用值类型的主要目的是为了提
  • (IDEA)创建Java类时,自动生成作者、时间和版本号注释;以及方法注释时,自动生成参数和返回值注释

    可恢复 IDEA 创建Java类时 自动生成作者 时间和版本号注释 以及方法注释时 自动生成参数和返回值注释 1 作者 时间和版本号注释 2 方法注释 自动生成方法中参数和返回值 IDEA 创建Java类时 自动生成作者 时间和版本号注释
  • 【iVX】颠覆常规,首个图形通用无代码编程平台诞生

    个人主页 个人主页 新人博主 喜欢就关注一下呗 文章目录 关于传统 低代码平台 我的看法 低代码平台的 局限性 传统的 低代码平台 存在以下一些缺点 关于iVX 为什么选择iVX 1 可视化的操作自动生成 全栈代码 2 超强的代码能力 3
  • Linux I2C 驱动实验

    目录 Linux I2C 驱动框架简介 I2C 总线驱动 I2C 设备驱动 I2C 设备和驱动匹配过程 I MX6U 的I2C 适配器驱动分析 I2C 设备驱动编写流程 I2C 设备信息描述 I2C 设备数据收发处理流程 硬件原理图分析 实
  • 计算机操作系统知识架构整理

    计算机操作系统 操作系统引论 操作系统的目标与应用 操作系统的目标 操作系统的作用 推动操作系统发展的主要动力 操作系统的发展过程 无操作系统的计算机系统 单道批处理系统 多道批处理系统 分时系统 实时系统 微机操作系统的发展 操作系统的基
  • 【剑指offer】数据结构——队列 栈 堆

    目录 数据结构 树 剑指offer 09 用两个栈实现队列 剑指offer 30 包含min函数的栈 剑指offer 31 栈的压入 弹出序列 剑指offer 41 数据流中的中位数 剑指offer 59 2 队列的最大值 数据结构 树 剑
  • Ubuntu 20.04安装搜狗输入法无法输入中文

    根据搜狗输入法官网进行安装后 无法输入中文 这是由于缺少所需要的依赖 sudo apt install libqt5qml5 libqt5quick5 libqt5quickwidgets5 qml module qtquick2 sudo
  • 小白安装python+cuda+pytorh(gpu版本)

    首先说一下 安装前你需要自行安装anaconda和pycharm环境 推荐使用清华镜像安装anaconda https mirrors tuna tsinghua edu cn anaconda archive 第1步cuda下载 CUDA
  • node事件循环

    一 什么是事件循环 首先 node js的事件循环与JavaScript的略有不同 node中事件循环使node js可以通过将操作转移到系统内核中来执行非阻塞 I O操作 由于大多数现代内核都是多线程的 因此它们可以处理在后台执行的多个操
  • css3动画详解

    动画属性详解 1 transform 变形 动画的实际效果 a C3中支持操作 1 旋转 rotate 2 扭曲 skew 3 缩放 scale 4 移动 translate 5 矩阵变形 matrix b 使用介绍 rotate 旋转 1
  • 安装Msys2+pacman+mingw

    Msys2是在windows下提供的模拟GNU操作系统的环境 我觉得主要提供了一种模拟Linux操作的命令行环境 pacman是Msys2下的一个程序 我觉得类似CentOS下的yum ubuntu下的apt mingw按照我的理解 也是一
  • Ant Design Vue 之a-tab单元格编辑

    前言 最近遇到一个需求 要求表格中某一属性是可以单独改变的 看了 Ant Design Vue 的官方组件 发现不太灵活 所以自己动手写了一下 官方实现 先看一下官方demo演示效果 发现只能整行编辑 不能单独针对某个属性进行单独编辑 例如
  • 若依框架——前后端分离版

    目录 一 若依是什么 二 为什么使用若依 三 运行若依框架 四 若依的权限系统 1 菜单权限 1 创建菜单 2 创建角色分配权限 3 创建用户 2 按钮权限 3 接口权限 4 数据权限 四 其他系统管理 1 字典管理 1 添加字典类型 2
  • Proteus元器件介绍

    一直更新 各元器件使用说明 数码管 排阻 resistor network respack 数码管 这个需要主义的就是7SEG COM AN XXX 这里的COM AN是共阳极的意思 下面的COM CAT是共阴极 排阻 resistor n
  • js中宏任务与微任务

    js是一门单线程语言 在执行代码的过程中 程序也分同步任务与异步任务 而异步任务中分为宏任务与微任务 分类 宏任务 ajax setTimeout setInterval DOM监听 UI Rendering等 微任务 Promise的th
  • 基于Qt的收银点餐系统之UI的基本实现(二)

    在上一篇文章中 主要是从宏观上去探讨Qt中UI的实现方案 这一篇文章 将给出具体的代码 实现结果 一 实现思路 上一篇文章讲到 布局工作的特点为 区域划分 层层嵌套 同时整个布局工作中 关键点也在于如何划分区域 如何找到层层嵌套的关系 在这
  • SpringSecurity快速入门和自定义用户名、密码的实现

    SpringSecurity自定义用户名和密码的实现 在SpringBoot项目中导入SpringSecurity依赖 自定义用户名和密码登录的实现 第一种实现方式 配置文件的实现 第二种实现方式 继承WebSecurityConfigur