首页 > 数据库 >基于数据库用户名和密码认证

基于数据库用户名和密码认证

时间:2024-04-22 11:25:07浏览次数:24  
标签:username mapper 用户名 utf8 数据库 private 认证 user NULL

环境准备

本次数据库我们选择MySQL 5.7,新建一个boot_study库,建立一张登录用户表login_user

CREATE TABLE `login_user`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `password` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `enabled` tinyint(1) NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE INDEX `username_union_index`(`username`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

使用Mybatis-Plus配置实体类和mapper

新建实体类:

@Data
@TableName("login_user")
@ApiModel(value = "loginUserDO对象", description = "用户登录信息表")
public class LoginUserDO {
    @TableId(type = IdType.AUTO)
    @ApiModelProperty("id")
    private Integer id;

    @TableField
    @ApiModelProperty("用户名")
    private String username;

    @TableField
    @ApiModelProperty("密码")
    private String password;

    @TableField
    @ApiModelProperty("是否启用")
    private Boolean enabled;
}

新建mapper文件

@Mapper
public interface BookMapper extends BaseMapper<BookDO> {
}

UserDetailsService


我们要通过数据库来存储我们用户信息,也是通过这个类来实现。我们可以看一下继承关系:

我们之前使用内存来存储用户信息的InMemoryUserDetailsManager也是实现了这个接口。

自定义实现UserDetailsService接口:

/**
 * @author hejing
 * @date 2024/4/22
 */
@Service
public class UserDetailsServiceImpl implements UserDetailsService {
    @Resource
    private LoginUserMapper mapper;

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        // 根据用户名查询用户数据
        LambdaQueryWrapper<LoginUserDO> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(StrUtil.isNotBlank(username),LoginUserDO::getUsername, username);
        LoginUserDO user = mapper.selectOne(queryWrapper);

        if(user == null) {
            throw new UsernameNotFoundException(StrUtil.format("用户 {} 没有找到", username));
        }else {
            // 账号权限设置
            List<GrantedAuthority> authorities = AuthorityUtils.
                    commaSeparatedStringToAuthorityList("role");
            // 生成用户信息给Spring Security
            return new User(username, user.getPassword(),user.getEnabled(),true,
                    true,true, authorities);
        }

    }
}

返回的是UserDetails接口的实现,Spring Security中为我们提供了一个大部分情况下都能直接使用的实现类User,如果User不能满足项目需求,也可以自定义实现UserDetails

配置密码器

启动测试

标签:username,mapper,用户名,utf8,数据库,private,认证,user,NULL
From: https://www.cnblogs.com/wyzstudy/p/18150260

相关文章

  • [数据库] 排查MySQL锁表情况及解决思路 [转]
    0序1排查方法:查看当前锁表事务由于出现的是锁表的问题,所以第一步从数据库入手,查看导致锁表的SQL语句是什么;查看是否锁表SQL语句;SELECT*FROMINFORMATION_SCHEMA.INNODB_LOCKS;该命令的输出结果包含了当前事务等待的锁资源的相关信息,包括事务ID、锁的类型、锁的模式、被......
  • C++ 连接pg数据库
    环境:windows10vs2022引入pqxxs一些增删改查的示例代码#include"pqxx/pqxx"voidinsertPg(){try{//建立连接pqxx::connectionconn("dbname=postgresuser=postgrespassword=123hostaddr=127.0.0.1port=5432");//添加数据......
  • 认证组件及源码分析
    认证组件​ 用于判断用户是否登录简单使用#1.创建一个任意名字的py文件#2.导入认证类fromrest_framework.authenticationimportBaseAuthentication#3.写一个类继承它并且重写authenticate方法classLoginAuth(BaseAuthentication):defauthenticate(self,req......
  • github的Contributions找不到自己:设置git commit邮箱与用户名
    最近发现公司的开源项目github都找不到我的名字公司前端库TDesign无论是vue还是react,都找不到我:https://github.com/Tencent/tdesign-vue/graphs/contributors部门的前端库vue2vue3版本照样没有自己 https://github.com/TencentBlueKing/bkui-vue3 为什么Github没有记录你......
  • 数据库原理第一次实验报告
    目录任务一:(数据库CAP)12345任务二:(数据库GlobalToyz)1234567891011121314151617181920写在最后数据库原理第一次实验报告任务一:(数据库CAP)1创建数据库CAP,包含4张表Customers、Products、Agents和Orders。UseMaster;CREATEDatabaseCAP;UseCAP;CREATETABLECUSTOMERS(......
  • 使用kratos框架集成jwt认证
    问题背景:网络鉴权在web开发中最常见不过了,最近在使用gokratos框架写项目的时候需要用到jwt,查阅资料后自己动手实现了简单的鉴权,在这里记录一下实现步骤,直接上代码。定义jwt签发函数这部分我是参考了李文周老师的博客博客地址:https://www.liwenzhou.com/posts/Go/json-web-tok......
  • Random 项目总结 -设置按钮 设置数据库地址, 用户密码写入XML
    privatevoidbutton1_Click(objectsender,EventArgse){stringxmlpath=System.AppDomain.CurrentDomain.BaseDirectory+"setting.xml";XmlDocumentxmldoc=newXmlDocument();xmldoc.Load(xmlpath);......
  • 达梦数据库升级和配置以及部分异常处理
    达梦数据库升级和配置以及部分异常处理背景最近几天发现一个达梦数据库出现多次报错后台的提示信息是:Cause:dm.jdbc.driver.DMException:超出全局hashjoin空间,适当增加HJ_BUF_GLOBAL_SIZE感觉比较奇怪.因为内存空间自己设置的应该是没问题的.耗费了很长的时间进行......
  • 基于内存的用户名和密码认证
    代码实现从SpringSecurity官网文档可以看到,我们想要实现一个基于内存的用户名密码认证,需要编写配置,如下:在我们的项目中,建立如下项目结构:我们将SpringSecurity有关配置全部放置于Security包中。/***@author无涯子*@date2024/4/20*/@Configurationpublicclass......
  • 数据库的关系代数表达式
    数据库的关系代数表达式关系代数是一种用于描述和操作关系数据库的形式化语言。它提供了一组基本操作,包括选择、投影、并、差、笛卡尔积等,可以用来表示和操作关系数据库中的数据。基本操作选择(Selection):从关系中选择满足指定条件的元组。投影(Projection):从关系中选择指定的属......