SpringSecurity---内存认证和数据库认证

2023-09-18 10:18:42

目录

一、内存认证

二、认证逻辑

三、数据库认证(也就是用户名和密码在数据库中寻找) 

(1)mapper层

(2)启动类添加扫描注解

(3)编写UserDetailsService实现类


一、内存认证

@Configuration
public class SecurityConfig {
    //定义认证逻辑
    @Bean
    public UserDetailsService userDetailsService(){
        //使用内存数据进行认证
        InMemoryUserDetailsManager manager=new InMemoryUserDetailsManager();
        //创建两个用户
        UserDetails u1= User.withUsername("root").password("1234").authorities("admin").build();
        UserDetails u2=User.withUsername("gq").password("2222").authorities("admin").build();
        //将这两个用户添加到内存中
        manager.createUser(u1);
        manager.createUser(u2);
        return manager;
    }
    //密码编译器,不解析密码,也就是不加密
    @Bean
    public PasswordEncoder passwordEncoder(){
        return NoOpPasswordEncoder.getInstance();
    }
}

二、认证逻辑

在实际项目中,认证逻辑是需要自定义控制的。将UserDetailsService接口的实现类放入Spring容器即可自定义认证逻辑。InMemoryUserDetailsManager就是UserDetailsService接口的一个实现类,它将登录页传来的用户名密码和内存中用户名密码做匹配认证。当然我们也可以自定义UserDetailsService接口的实现类。

UserDetailsService的实现类必须重写loadUserByUsername方法,该方法定义了具体的认证逻辑,参数username是前端传来的用户名,我们需要根据传来的用户名查询到该用户(一般是从数据库查询),并将查询到的用户封装成一个UserDetails对象,该对象是Spring Security提供的用户对象,包含用户名、密码、权限。Spring Security会根据UserDetails对象中的密码和客户端提供密码进行比较。相同则认证通过,不相同则认证失败。

image-20220324105909277

三、数据库认证(也就是用户名和密码在数据库中寻找) 

(1)mapper层

public interface UserMapper extends BaseMapper<users> {
}

(2)启动类添加扫描注解

@SpringBootApplication
@MapperScan("com.gq.springsecurity.mapper")
public class SpringsecurityApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringsecurityApplication.class, args);
    }

}

(3)编写UserDetailsService实现类

@Service
public class UserMapperService implements UserDetailsService {
    @Autowired
    private UserMapper userMapper;
    //自定义认证逻辑
    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        //构造查询条件
        QueryWrapper<users> wrapper=new QueryWrapper<users>().eq("username",username);
        //查询用户
        users users=userMapper.selectOne(wrapper);
        //封装为UserDetails对象
        UserDetails userDetails= User.withUsername(users.getUsername()).password(users.getPassword()).authorities("admin").build();
        //返回封装好的UserDeatails对象
        return userDetails;
    }
}

更多推荐

数据治理-数据仓库环境

数据仓库环境包括一系列组织起来以满足企业需求的架构组件,从源系统流动到数据暂存区,数据可以在这里被清晰,当数据集成并存储在数据仓库或操作数据存储中时,可以对其进行补充丰富。在数据仓库中,可以通过数据集市或数据立方体访问数据,生成各种各样的报表。其中包括:源系统;(CRM\账务系统或者DaaS服务、网页内容和任何大数据计

Spark

ApacheSpark是一种快速、通用、可扩展的大数据处理引擎,旨在处理大规模数据集并进行高效的数据分析。与HadoopMapReduce相比,Spark具有更高的性能和更丰富的功能,可以处理更复杂的数据处理任务。以下是ApacheSpark的一些基本概念:SparkCore:这是Spark的基本引擎,提供了分布式任务

计算机网络的分层体系结构

为什么要分层面对一个复杂系统时,将其划分成小的,功能独立的模块或子系统,能更好的解决问题付诸应用。有哪些好处各层之间是独立的灵活性好结构上可以分开易于实现和维护有利于功能复用能促进标准化工作计算机网络体系结构经历的阶段计算机网络分层体系结构的发展经历了以下主要阶段:早期的分层概念(1970s):分层体系结构的思想最早出

2023.9.11 关于传输层协议 UDP和TCP 详解

目录UDP协议TCP协议TCP十大核心机制确认应答超时重传连接管理(三次握手四次挥手)滑动窗口流量控制拥塞控制延时应答捎带应答面向字节流粘包问题TCP中的异常处理经典面试题对比TCP和UDP如何使用UDP实现可靠传输UDP协议源端口:指发送方的端口号目的端口:指接收方的端口号注意:端口号都是用两个字节来表示的,也就是1

前端开发学习指南

这篇文章很长,但的确是一篇非常干的干货,讲诉了HTML、JavaScript、CSS、jQuery使用的一些规范与建议,前端的同学可以认真阅读此文,并比较自己平时的一些习惯,看是否有改进的地方……HTML咋地了,DOCTYPE?不定义DOCTYPE是一种可以被判死刑的罪行。以前你可能用的是下面的DOCTYPE,不过你要

提前放电避雷针防雷综合应用方案

放电避雷针是一种利用电离空气提前放电的避雷装置,可以有效地保护建筑物、设备和人员免受雷电的危害。放电避雷针有多种类型,根据其放电机理和结构特点,可以分为以下几类:地凯科技预放电避雷针:这种避雷针利用雷云产生的空间电场强度,预先使周围的空气电离,空气离子在空间电场的作用下加速接近雷云,从而使迎面先导大大提前与雷云的下行先

Raft协议

前言最近在系统的实战springcloud,在学习nacos过程,我们知道nacos的底层用到了Raft协议。在Raft协议之前是一个paxos的协议,但是这个协议有点复杂,于是Stanford的两位教授决定设计一种较简单的一致性算法。参考自Raft动态演示网站我们一起来学习一下Raft协议。Raft前置概念term:

【CSS3】CSS3 3D 转换 ④ ( 3D 旋转 rotate3d | rotate3d 语法 | rotate3d 自定义轴旋转 | 元素旋转方向 - 左手准则 | 代码示例 )

文章目录一、3D旋转rotate3d1、rotate3d语法2、rotate3d自定义轴旋转3、元素旋转方向-左手准则二、代码示例1、代码示例2、执行结果一、3D旋转rotate3d3D旋转指的是在三维空间坐标系中,绕X轴,Y轴,Z轴进行旋转,同时还可以绕自定义轴进行旋转;2D旋转只能以某个点为中心进行旋转,3D旋转可

eSIM简介

翻译自eSIMeSIMeSIM被称为许多不同的名字。有人说嵌入式SIM,有人说电子SIM和其他的说eSIM。在行业标准最终确定并在该地区广泛采用之前,还会有其他名称出现。无论我们称之为什么,此SIM的基本思想是将SIM(UICC)作为用户设备(例如,M2M终端,移动电话等)的不可移除/固定组件分发。设备制造商对SIM卡

可以创业,也可以副业的网上长期挣钱的项目

在这个飞速发展的互联网时代,越来越多的人开始尝试在网上创业或者寻找一份可持续的副业来增加收入。不过在网上赚钱的难度是比较大的,不是轻易就能做到的,所以不付出一番努力,没有悟性和执行力,那么是很难做好的,那么有哪些靠谱的互联网长期赚钱项目呢?分享几个适合互联网创业或者副业的长期挣钱项目,希望能够对大家有所帮助。博客很多人

代码随想录二刷Day 15

102.BinaryTreeLevelOrderTraversalvector<int>()itisbasicallyconstructorofstd::vectorclassandwillcreateanewemptyvector.Youcanalsomentionthesizeofrequiredvectorinb

热文推荐