实现数据库用户校验

导入my-batis-plus依赖:

<dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.3.1</version>
        </dependency>

在dto下创建Acoount类,用于保存账户信息:

@Data
@TableName("db-account")
@AllArgsConstructor
public class Account {
    @TableId(type = IdType.AUTO)
    Integer id;
    String username;
    String password;
    String email;
    String role;
    Date registerTime;
}

在sql中创建对应的表,包含以上的属性,将id设为自动增加。

在mapper包下创建AccountMapper类:

@Mapper
public interface AccountMapper extends BaseMapper<Account> {

}

在service包下创建AccountService接口:

public interface AccountService extends IService<Account> , UserDetailsService {
    Account findAccountByNameOrEmail(String text);
}

创建AccountServiceImpl代理:

@Service
public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> implements AccountService {

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        Account account=this.findAccountByNameOrEmail(username);
        if (account==null){
            throw new UsernameNotFoundException("用户名或密码错误");
        }
        return User.withUsername(username)
                .password(account.getPassword())
                .roles(account.getRole())
                .build();
    }

    public Account findAccountByNameOrEmail(String text){
return this.query()
        .eq("username",text).or()
        .eq("email",text)
        .one();
    }

}

配置数据库连接:

  datasource:
    username: root  
    password: yyt320581
    url: jdbc:mysql://localhost:3306/vue-database
    driver-class-name: com.mysql.cj.jdbc.Driver 

在yaml配置文件中:后有空格

由于我建立的表名为db-account,导致发生语法错误,最后mybatis给出的语句中只有-account,请使用_进行数据库命名

尝试进行登陆,将用户名密码改成数据库中设置好的内容。

由于将加密密码存入数据库中,所以还要设置加密器

@Test
    void contextLoads() {
        System.out.println(new BCryptPasswordEncoder().encode("123456"));
    }

新建WebConfiguration中设置加密器:

```Plain Text @Configuration public class WebConfiguration { @Bean BCryptPasswordEncoder passwordEncoder(){ return new BCryptPasswordEncoder(); } }


![](/tmp/651147134636430E00ED2A34/media/实现数据库用户校验+aed364a0-42e9-4a27-b49a-3b2e90ddee4c/image 1.png)

此时与数据库中的账号信息比对后成功登陆

由于redis安装在wsl2中,运行时报错Unable to connect to Redis

首先打开wsl2,输入命令redis-server运行redis,运行命令ip addr show eth0 | grep -oP '(?<=inet\s)\d+(.\d+){3}'

查看运行的wsl2实例的ip地址,查看redis运行的默认端口号为6379,在idea中配置redis。

在这之前需要为redis配置文件,请查看redis数据库页面来进行相应配置。

问题已解决,通过安装非官方windows版redis能够正常运行

登陆后返回的用户信息仍然为测试时硬编码的内容,注入accountserviec并修改处理方法:

```Plain Text
@Resource
    AccountService service;

public void onAuthenticationSuccess(HttpServletRequest request,
                                        HttpServletResponse response,
                                        Authentication authentication) throws IOException, ServletException {

        response.setContentType("application/json;charset=utf-8");


        User user=(User)authentication.getPrincipal();
        AuthorizeVO vo =new AuthorizeVO();
        Account account=service.findAccountByNameOrEmail(user.getUsername());
        String token =utils.createJwt(user,account.getId(),account.getUsername());

        vo.setExpire(utils.expireTime());
        vo.setRole(account.getRole());
        vo.setToken(account.getRole());
        vo.setUsername(account.getUsername());

        response.getWriter().write(RestBean.success(vo).asJsonString());
        System.out.println(RestBean.success(token).asJsonString());
    }

此时返回的用户信息正确

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

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

相关文章

【IO多路复用】IO机制、select、poll、epoll、边缘触发、水平触发等重点知识汇总

目录 多路复用 Linux有哪些IO机制 select、poll、epoll 区别 select、poll、epoll 各自的优缺点 边缘触发ET和水平触发LT 多路复用 IO多路复用是一种处理多个IO流的技术。 它允许单个进程同时监视多个文件描述符&#xff0c;当一个或多个文件描述符准备好读或写时&#…

c++堆排序-建堆-插入-删除-排序

本文以大根堆为例&#xff0c;用数组实现&#xff0c;它的nums[0]是数组最大值。 时间复杂度分析&#xff1a; 建堆o(n) 插入删除o(logn) 堆排序O(nlogn) 首先上代码 #include<bits/stdc.h>using namespace std; void down(vector<int>&nums, int idx, i…

SpringMVC 学习(七)JSON

9. JSON 9.1 简介 JSON&#xff08;JavaScript Object Notation&#xff0c;JS 对象标记&#xff09;是一种轻量级数据交换格式&#xff0c;采用独立于编程语言的文本格式储存和表示数据&#xff0c;易于机器解析和生成&#xff0c;提升网络传输效率。 任何 JavaScript 支持…

Midjourney 生成油画技巧

基本 prompt oil painting, a cute corgi dog surrounded with colorful flowers技法 Pointillism 点描绘法 笔刷比较细&#xff0c;图像更精细 oil painting, a cute corgi dog surrounded with colorful flowers, pontillismImpasto 厚涂绘法 笔刷比较粗&#xff0c;图像…

将切分的图片筛选出有缺陷的

将切分的图片筛选出有缺陷的 需求代码 需求 由于之前切分的图像有一些存在没有缺陷&#xff0c;需要再次筛选 将可视化的图像更改后缀 更改为xml的 可视化代码 可视化后只有7000多个图像 原本的图像有1W多张 代码 # 按照xml文件删除对应的图片 # coding: utf-8 from P…

unittest单元测试框架使用

什么是unittest 这里我们将要用的unittest是python的单元测试框架&#xff0c;它的官网是 25.3. unittest — Unit testing framework — Python 2.7.18 documentation&#xff0c;在这里我们可以得到全面的信息。 当我们写的用例越来越多时&#xff0c;我们就需要考虑用例编写…

LiveData源码分析

1.在上一篇文章中介绍了LiveData的简单使用&#xff0c;可以查看LiveData简单使用_niuyongzhi的博客-CSDN博客 源码分析&#xff1a; 也可以分成两部分来看&#xff0c;一部分是注册observe源码&#xff0c;另一部分是setValue的源码。 先看Observe注册监听的方法。 1&…

Redis实现Session持久化

Redis实现Session持久化 1. 前言 直接使用Session存储用户登录信息&#xff0c;此时的会话信息是存储在内中的&#xff0c;只要项目重启存储的Session信息就会丢失。而使用Redis存储Session的话就不会存在这种情况&#xff0c;即使项目重启也并不影响&#xff0c;也无需用户重…

GIT提示Another git process seems to be running in this repository

解决方法 1、进入项目里面的.git文件里面找到index.lock删除即可。

掷骰子的多线程应用程序2基于互斥量的线程同步(复现《Qt C++6.0》)

说明&#xff1a;在复现过程中出现两点问题&#xff08;1&#xff09;run()函数中对m_diceValued的赋值&#xff08;2&#xff09;do_timeOut()函数中没有对m_seq、m_diceValued进行定义。修改后的复现程序如下所示&#xff1a; 主线程&#xff1a; .h #pragma once#include…

PostgreSQL 查询某个属性相同内容出现的次数

查询某个数据库表属性 name 相同内容出现出现的次数&#xff0c;并按次数从大到小排序 SELECT name, COUNT(*) AS count FROM your_table GROUP BY name ORDER BY count DESC;示例 select project_id, COUNT(*) AS count from app_ads_positions group by project_id order b…

民安智库(专业市场调查公司)家居行业消费者调查如何做?

随着人们生活水平的提高&#xff0c;家居行业的发展日益蓬勃。在家居行业竞争激烈的市场环境下&#xff0c;了解消费者的需求和喜好至关重要。为了更好地了解家居消费者的需求和习惯&#xff0c;为家居品牌方提供有力的市场支持&#xff0c;民安智库通过本文介绍家居行业消费者…

mysql Your password does not satisfy the current policy requirements

在修改密码时遇到 Your password does not satisfy the current policy requirements 原因&#xff1a;您的密码不符合当前策略要求&#xff0c;最好是把密码设置成复杂的&#xff0c;包括字母大小写、数字、特殊字符。 如果你还是先把数据库密码改简单&#xff0c;比如你本地…

Redis 集合操作实战(全)

目录 SADD 插入集合 SCARD 取元素数量 SPOP 随机移除元素 SREM 移除多个元素 SMOVE 移动元素到别的集合 SMEMBERS 取所有成员 SRANDMEMBER 取指定数量元素 SISMEMBER 判断元素是否存在 SUNION 多集合求并集 SUNIONSTORE 多集合求并集&#xff08;存储&#xff09; S…

vue点击按钮收缩菜单

问题描述 VUE菜单有一个BUG&#xff0c;当我们点击其它按钮或者首页的时候&#xff0c;已经展示的一级菜单是不会自动收缩的。这个问题也导致很多开发者把一级菜单都换成了二级菜单。 错误展示 错误的效果请看下图。 解决方法 1、寻找菜单文件 因为我使用的是ruoyi的前端框…

Spring Controller内存马

获取当前上下文运行环境 getCurrentWebApplicationContext WebApplicationContext context ContextLoader.getCurrentWebApplicationContext(); 在SpringMVC环境下获取到的是一个XmlWebApplicationContext类型的Root WebApplicationContext&#xff1a; 在Spring MVC环境中…

可信执行环境(Tee)入门综述

SoK: Hardware-supported Trusted Execution Environments [ArXiv22] 摘要引言贡献 范围系统和威胁模型系统模型威胁模型共存飞地对手无特权软件对手系统软件对手启动对手外围对手结构对手侵入性对手 关于侧信道攻击的一点注记 VERIFIABLE LAUNCH信任根&#xff08;RTM&#xf…

8月最新修正版风车IM即时聊天通讯源码+搭建教程

8月最新修正版风车IM即时聊天通讯源码搭建教程。风车 IM没啥好说的很多人在找,IM的天花板了,知道的在找的都知道它的价值,开版好像就要29999,后端加密已解,可自己再加密,可反编译出后端项目源码,已增加启动后端需要google auth双重验证,pc端 web端 wap端 android端 ios端 都有 …

【Java 进阶篇】数据定义语言(DDL)详解

数据定义语言&#xff08;DDL&#xff09;是SQL&#xff08;结构化查询语言&#xff09;的一部分&#xff0c;它用于定义、管理和控制数据库的结构和元素。DDL允许数据库管理员、开发人员和其他用户创建、修改和删除数据库对象&#xff0c;如表、索引、视图等。在本文中&#x…

100万级连接,石墨文档WebSocket网关如何架构?

说在前面 在40岁老架构师 尼恩的读者交流群(50)中&#xff0c;很多小伙伴拿到一线互联网企业如阿里、网易、有赞、希音、百度、滴滴的面试资格。 最近&#xff0c;尼恩指导一个小伙伴简历&#xff0c;写了一个《高并发网关项目》&#xff0c;此项目帮这个小伙拿到 字节/阿里/…