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

news2024/9/28 11:15:45

目录

一、内存认证

二、认证逻辑

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

(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;
    }
}

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

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

相关文章

GLSL-WebGL着色器语言语法详解

GLSL语法 GLSL它是强类型语言&#xff0c;每一句都必须有分号。它的语法和 typescript 挺像。 GLSL的注释语法和 JS 一样&#xff0c;变量名规则也和 JS 一样&#xff0c;不能使用关键字&#xff0c;保留字&#xff0c;不能以 gl_、webgl_ 或 webgl 开头。运算符基本也和 JS 一…

C++之std::holds_alternative、std::get、std::variant应用实例(二百一十九)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

AVLoadingIndicatorView - 一个很好的Android加载动画集合

官网 GitHub - HarlonWang/AVLoadingIndicatorView: DEPRECATED 项目简介 AVLoadingIndicatorView is a collection of nice loading animations for Android. You can also find iOS version of this here. Now AVLoadingIndicatorView was updated version to 2.X , If …

git的使用——结合具体问题记录git的使用 代码提交从入门到熟练

前言 git作为开发人员必备的技能&#xff0c;需要熟练掌握&#xff0c;本篇博客记录一些git使用的场景&#xff0c;结合具体问题进行git使用的记录。以gitee的使用为例。 文章目录 前言引出已有项目推送gitee1.gitee中新建项目仓库2.本地项目的初始化提交3.比较好玩的commit图…

【EI会议征稿】2023年工业设计与环境工程国际学术会议

2023 International Conference on Industrial Design and Environmental Engineering 2023年工业设计与环境工程国际学术会议 2023年工业设计与环境工程国际学术会议&#xff08;IDEE 2023&#xff09;将于2023年11月24-26日于郑州召开。本次会议主要围绕工业设计与环境工程…

Django(18):中间件原理和使用

目录 概述Django自带中间件Django的中间件执行顺序自定义中间件函数使用类 其它中间件钩子函数process_viewprocess_exceptionprocess_template_response如何使用这3个钩子函数&#xff1f; 全局异常处理小结 概述 中间件(middleware)是一个镶嵌到Django的request(请求)/respo…

Zero-Shot、One-shot、Few-Shot 的简介

本文将介绍以下内容&#xff1a; Zero-Shot Learning 的提出ZSL 的通俗理解GPT 之 Zero-ShotZero-Shot、One-shot、Few-Shot 的通俗理解 一、Zero-Shot Learning 的提出 零样本学习 Zero-Shot Learning&#xff0c;简称 ZSL&#xff0c;是由 Lampert 等人在 2009 年提出的。…

Powerbi-矩阵日期表矩阵列数据表头排序

首先做一个DAX日期表&#xff0c;Powerbi中新建表输入如下代码即可 日期表 VAR YearStart 2023 //起始年度 VAR YearEnd 2024 //结束年度VAR WeekNumberType 2 VAR WeekDayType 2RETURN GENERATE (CALENDAR( DATE( YearStart , 1 , 1 ) , DATE( YearEnd , 12 , 31…

什么是内存碎片?

在嵌入式系统中&#xff0c;内存是十分有限而且是十分珍贵的&#xff0c;用一块内存就少了一块内存&#xff0c;而在分配中随着内存不断被分配和释放&#xff0c;整个系统内存区域会产生越来越多的碎片。 因为在使用过程中&#xff0c;申请了一些内存&#xff0c;其中一些释放…

软件定义世界,工程引领未来——中山大学软件工程学院 软件工程导论大作业

目录 软件工程&#xff0c;理解加深 个人困惑 软件与软件工程的定义 学习思路的启发 软件危机的认识及思考 软件测试的初步认识 科技前沿&#xff0c;守正创新 代码有智能&#xff0c;教育有情怀 深入浅出&#xff0c;引人入胜 再接再厉&#xff0c;未来可期 “软件…

AI数字人虚拟主播,跟传统主播相比有哪些优势,究竟谁更胜一筹?

在今年&#xff0c;AI人工智能技术得到了快速发展&#xff0c;AI数字人开始大面积进入我们的生活&#xff0c;我们经常可以在各大直播间刷到AI数字人虚拟主播。 这些主播光从表面上来看&#xff0c;完全跟真人一模一样&#xff0c;一样的容貌、一样的身形、一样的声音&#xf…

2023年8月体育用品行业数据分析(京东数据产品)

当前&#xff0c;亚运会临近&#xff0c;这也带动了国民对体育消费的热情&#xff0c;体育产品内销逐渐旺盛&#xff0c;“亚运经济”红利开始显现。鲸参谋数据显示&#xff0c;今年8月份&#xff0c;京东平台上体育用品行业的销量为185万&#xff0c;同比增长2%&#xff1b;销…

vue 组件公共的方法

我这是取后端数据发现后端给的数据啥样的都有 有带标签的 有带图片的 还有换行的把这些筛选掉 比如去掉标签 去掉空格 1.首先创建一个公共页面 /* 处理数据html标签显示界面 */export function removeHTMLTag(htmlStr) { let html htmlStr .replace(/<img.*?>/g…

硬件系统工程师宝典(41)-----蛇形走线有什么用?

各位同学大家好&#xff0c;欢迎继续做客电子工程学习圈&#xff0c;今天我们继续来讲这本书&#xff0c;硬件系统工程师宝典。 上篇我们说到了Datasheet里的内容不用全文通读&#xff0c;应该有选择的查看&#xff0c;如引脚功能、电气参数、典型电路及封装大小。今天我们来讲…

【Vue】修饰符、表单提交方式、自定义组件的关键步骤

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《Vue快速入门》。&#x1f3af;&#x1f3af; &…

Vue3项目中使用插槽

前言&#xff1a; 此文章仅记录插槽的使用&#xff0c;用于自己后期学习查看。 代码实现过程中&#xff0c;HelloWorld为子组件&#xff0c;HomeView为父组件 <slot></slot>元素&#xff1a; 是一个插槽出口&#xff0c;是写在子组件中的&#xff0c;表示了父组件…

81《乡村振兴战略下传统村落文化旅游设计》许少辉瑞博士生辉少许——2023学生开学季许多少年辉光三农

81《乡村振兴战略下传统村落文化旅游设计》许少辉瑞博士生辉少许——2023学生开学季许多少年辉光三农

【卖出备兑看涨期权策略(Covered_call)】

卖出备兑看涨期权策略&#xff08;Covered_call&#xff09; 卖出备兑看涨期权策略是一种最基本的收入策略&#xff0c;该策略主要操作就是在持有标的资产的同时卖出对应的看涨期权合约&#xff0c;以此来作为从持有的标的资产中获取租金的一种方法。如果标的资产的价格上涨到…

基于STC15单片机电子时钟液晶1602串口显示-proteus仿真-源程序

一、系统方案 1、本设计采用STC15单片机作为主控器。 2、液晶1602显示电子时钟。 3、串口显示电子时钟。 4、按键控制开启暂停清零。 二、硬件设计 原理图如下&#xff1a; 三、单片机软件设计 1、首先是系统初始化 uint count0; uint8 strPhoto[8]; uint wendu0;P3M0 0x…

LeetCode 332. Reconstruct Itinerary【欧拉回路,通路,DFS】困难

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…