Spring Security为我们提供了默认的登录页面,通过重写以AuthenticationManagerBuilder为参数的configure方法,我们可基于各种数据存储来认证用户,比如内存、关系型数据库以及LDAP,也可以编写自定义的用户存储实现。

问题

在使用基于数据库表进行认证时,我重写的configure如下

 @AutowiredDataSource datasource;@Overrideprotected void configure(AuthenticationManagerBuilder auth) throws Exception {auth.jdbcAuthentication().dataSource(dataSource).usersByUsernameQuery("SELECT username, password FROM users WHERE username=?");}

因为Spring Security有三条默认的查询语句,对数据库表有一定的要求,需要有权限、组的定义,但是我自己的users表很简单,并没有定义权限、组这些属性,所以我重写了基本查询的语句,但并没有重写群组权限的查询语句,问题就出现在这了。
无论怎么尝试,都无法认证,因为重写了登录页面,我一直没有找到问题出在哪里,恢复默认登录页面后才根据错误信息发现,我重写了默认用户的查询语句,但报错说我并没有authority这张表。所以说,如果要使用默认的数据库认证,我们的数据库表的模式要与Spring Security的一致。我这里只有用户表,没有权限表就出错了。难道我们必须要有权限表才能使用Spring Security的默认登录吗?答案当然不是!

配置自定义的用户服务

接下来我们就需要配置自定义的用户服务,实现UserDetailsService接口,并重写其loadUserByUsername方法

public class SpitterUserService implements UserDetailsService {private final SpitterRepository spitterRepository;@Injectpublic SpitterUserService(SpitterRepository spitterRepository){this.spitterRepository=spitterRepository;}@Overridepublic UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {Spitter spitter=spitterRepository.findUserByName(username);if(spitter!=null){List<GrantedAuthority> authorities=new ArrayList<>();authorities.add(new SimpleGrantedAuthority("ROLE_SPITTER"));return new User(spitter.getUsername(),spitter.getPassword(),authorities);}throw new UsernameNotFoundException("" +"User "+ username+ "not found");}
}

重写configure来将其设置到安全配置中

@AutowiredSpitterRepository spitterRepository;@Overrideprotected void configure(AuthenticationManagerBuilder auth) throws Exception {auth.userDetailsService(new SpitterUserService(spitterRepository));}

这样就可以进行自定义的用户的认证。

Spring Security基于数据库认证用户登录相关推荐

  1. spring security基于数据库的安全认证 配置

    创建数据库 /* Navicat MySQL Data TransferSource Server : mysql3306 Source Server Version : 50542 Source H ...

  2. Spring Security 基于数据库的认证

    介绍 之前使用的全是基于内存的认证,这里使用基于数据库的认证. 设计数据表 这里设计数据表 创建项目 这里使用Mybatis作为项目. 添加如下依赖 添加driud连接池依赖 <dependen ...

  3. 实现账号在一端登入_跟我学spring security 基于数据库实现一个基本的登入登出...

    第一章我们基于内存中的用户信息实现了一个基本的登入功能,不过实际的项目中用户信息一般都是存在数据库中的.本章我们来实现一个比较接近真实项目的登入登出,同时引入UserDetailsService的概念 ...

  4. Spring Security OAuth2.0认证授权知识概括

    Spring Security OAuth2.0认证授权知识概括 安全框架基本概念 基于Session的认证方式 Spring Security简介 SpringSecurity详解 分布式系统认证方 ...

  5. 基于Spring Security与JWT实现单点登录

    基于RBAC的权限管理 RBAC(Role-Based Access Control):基于角色的访问控制 当前项目中,RBAC具体的表现为: 管理员表:ams_admin 角色表:ams_role ...

  6. Spring Security Oauth2 JWT 实现用户认证授权功能

    Spring Security Oauth2 JWT 一 用户认证授权 1. 需求分析 1.1 用户认证与授权 什么是用户身份认证? 用户身份认证即用户去访问系统资源时系统要求验证用户的身份信息,身份 ...

  7. Spring Security and Angular 实现用户认证

    引言 度过了前端框架的技术选型之后,新系统起步. ng-alain,一款功能强大的前端框架,设计得很好,两大缺点,文档不详尽,框架代码不规范. 写前台拦截器的时候是在花了大约半小时的时间对代码进行全面 ...

  8. 基于jwt的用户登录认证

    最近在app的开发过程中,做了一个基于token的用户登录认证,使用vue+node+mongoDB进行的开发,前来总结一下. token认证流程: 1:用户输入用户名和密码,进行登录操作,发送登录信 ...

  9. Spring Security OAuth2.0认证授权五:用户信息扩展到jwt

    历史文章 [Spring Security OAuth2.0认证授权一:框架搭建和认证测试] [Spring Security OAuth2.0认证授权二:搭建资源服务] [Spring Securi ...

最新文章

  1. mysql三个层次_数据库的基本结构三个层次
  2. MARKET1501的学习,跟着苏同学的博客学习
  3. python有趣代码-python有趣的一行代码
  4. HBase的BulkLoad详解
  5. Java 线程池的简单使用及介绍
  6. 从0开始构建SpringCloud微服务(1)
  7. 除法运算、商、余数与取模
  8. JAMA:Java矩阵包
  9. kobo glo刷安卓
  10. pyQt5图片放大和缩小
  11. 「Photoshop2021入门教程」新功能——快速操作
  12. 字母c代表什么数字_字母C
  13. littlefs系列:重要的数据结构
  14. latex怎么看论文字数_如何使用LaTeX完成一篇论文的基本排版
  15. 如何用Python获取基金行情并分析年度表现优异基金,解锁赚钱秘密?
  16. 窥视C++细节-使用tie函数解包pair对象的原理
  17. ESP8266从入门到入门系列(一) 你好,ESP8266
  18. 企业微信营销软件「群积分」功能,助力商家搭建高效私域营销体系
  19. win10隐藏任务栏_Win10美化指南 | 定制属于你的专属桌面,Windows也能玩出新花样...
  20. IntelliJ IDEA代码review常用plugins

热门文章

  1. NVIDIA CUDA 高度并行处理器编程(九):并行模式:稀疏矩阵-向量乘法
  2. XSS 防御方法总结
  3. 用Unity做游戏,你需要深入了解一下IL2CPP
  4. 多数据中心架构,异地多活架构
  5. 中国经济八问-中国视角下的宏观经济
  6. 中国数字经济投资态势分析及发展前景深度评估报告2022-2028年版
  7. 用java求1000之内的素数_java求1000以内的素数
  8. 安装 Ubuntu 22.04.1 LTS 桌面版(详细步骤)
  9. 互联网日报 | 5月7日 星期五 | 街电与搜电完成合并;IBM发布2nm芯片制程;首届中国国际消费品博览会开幕...
  10. 防CC攻击 软件防火墙和WEB防火墙大比较