这个接口是我们自己用来定义用户表的结构的

SpringSecurity自己的用户信息只包含了Username,password,roles,假如我希望用户的实体类中还有性别sex字段,那么就没有办法了,所以SpringSecurity提供了UserDetails接口,我们可以自己新建一个包含sex字段的类,然后该类implements UserDetails接口,就可以获取我们说的这个sex字段

UserDetails实例是通过UserDetailsService接口的loadUserByUsername方法返回的,可以参考这篇文章创建自己的UserDetails(本文中包含sex的那个类)

UserDetails接口中有一个getAuthorities方法,这个方法返回的是权限,但是我们返回的权限必须带有“ROLE_”开头才可以,spring会自己截取ROLE_后边的字符串,也就是说,比如:我的权限叫ADMIN,那么,我返回告诉spring security的时候,必须告诉他权限是ROLE_ADMIN,这样spring security才会认为权限是ADMIN

示例代码:
假设一个用户拥有两个权限,一个叫权限1,一个叫权限2,下面的代码演示了如何使用UserDetails接口获取这两个权限,其本质就是实现getAuthorities()方法

public MyUser implements UserDetails{// 这个GrantedAuthority是什么呢?其实它就是权限(Role),// 因为本例中该用户有两个权限,所以这个Collection的长度是2@Overridepublic Collection<? extends GrantedAuthority> getAuthorities(){String role1="ROLE_权限1";String role2="ROLE_权限2";GrantedAuthority authority1=new SimpleGrantedAuthority(role1);GrantedAuthority authority2=new SimpleGrantedAuthority(role2);List<GrantedAuthority> list=new ArrayList<>();list.add(authority1);list.add(authority2);return list;               }
}

根据UserDetails接口,我们知道spring更推荐将权限用逗号隔开的方式存到数据库user表中,而不推荐使用1对多的方式来存储权限(单独的一个user表和权限表,然后使用一个关系表将两个表关联起来)

注:
spring security提供了逗号工具类,可以将逗号格式的字符串转换成GrantedAuthority

AuthorityUtils.commaSeparatedStringToAuthorityList

这样上述示例代码中就省掉了很多代码

SpringSecurity-1-UserDetails接口相关推荐

  1. Springsecurity之UserDetails

    2019独角兽企业重金招聘Python工程师标准>>> 先上一张图,如下图1所示: 图1 UserDetails的类图 UserDetails这个类的目的,<Pro Sprin ...

  2. Swagger2进阶:集成统一认证和SpringSecurity的登录接口

    Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务. SpringBoot集成Swagger之后,在Controller层添加相应的注解,即可生 ...

  3. Caused by: com.fasterxml.jackson.databind.exc.MismatchedInputException

    问题描述 整合SpringSecurity时, 认证通过后把LoginUser信息存储到redis缓存中: 校验token通过后,读取redis缓存中的LoginUser数据失败,报错: Caused ...

  4. SpringSecurity用数据库信息做认证

    初步实现认证功能 让我们自己的UserService接口继承UserDetailsService,毕竟SpringSecurity是只认UserDetailsService的: 创建UserDetai ...

  5. SpringSecurity +Jwt 实现权限管理

    目录标题 原理架构图 demo的项目结构 JwtTokenUtil RestAuthenticationEntryPoint 和 RestfulAccessDeniedHandler MyUserDe ...

  6. SpringSecurity动态加载用户角色权限实现登录及鉴权

    本文来说下SpringSecurity如何动态加载用户角色权限实现登录及鉴权 文章目录 概述 动态数据登录验证的基础知识 UserDetails与UserDetailsService接口 实现User ...

  7. Springboot+Spring-Security+JWT 实现用户登录和权限认证

    如今,互联网项目对于安全的要求越来越严格,这就是对后端开发提出了更多的要求,目前比较成熟的几种大家比较熟悉的模式,像RBAC 基于角色权限的验证,shiro框架专门用于处理权限方面的,另一个比较流行的 ...

  8. SpringSecurity的认识和整合流程

    一.Spring Security介绍 Spring 是一个非常流行和成功的 Java 应用开发框架.Spring Security 基于 Spring 框架,提供了一套 Web 应用安全性的完整解决 ...

  9. SpringSecurity-1-UserDetailsService接口

    这个接口是用户数据的来源,没错,就是登录用户的数据从哪里来,是从数据库来?还是从你电脑的TXT文本上过来的,还是从其他地方,反正这个来源最终必须要实现UserDetailsService才可以,至于具 ...

最新文章

  1. 程序是一座城,八年来我深陷其中
  2. foxmail提示不知道这样的主机_不知道和婚礼策划师沟通时谈哪些?这样做让你高效备婚...
  3. 全国计算机等级考试题库二级C操作题100套(第39套)
  4. CentOS上安装MyCat-MySQL
  5. UVa 455 - Periodic Strings
  6. [网络安全自学篇] 八十五.《Windows黑客编程技术详解》之注入技术详解(全局钩子、远线程钩子、突破Session 0注入、APC注入)
  7. 设计一个时间片轮转调度算法实现处理机调度的程序,具体内容如下
  8. TTL与RS-232电平转换芯片MAX232/MAX3232
  9. 文本分析python和r_中文文本挖掘R语言和Python哪个好?
  10. 关于搭建k8s集群遇到的问题与解决方法
  11. 作为一名程序员,我都收集了哪些好玩的生成器?
  12. CPAL脚本自动化测试 ———— Diagnostic 系列函数
  13. 如何做好企业级存储产品的测试
  14. Kotlin sealed class 的使用
  15. 画质超高的仙侠java游戏_画质超高的游戏有哪些?顶级画质大型游戏盘点
  16. windows RT开发笔记:WinRT DLL及其调用研究
  17. 关于Datatable删除行和删除列
  18. Lambda表达式(3)|(List对象转map)
  19. CPI|什么是CPI指数
  20. 明辰智航云安交易分析--DNS

热门文章

  1. Tomcat下载与安装
  2. java 内存泄露 书籍_[Java教程]一次艰难的内存泄露排查,BeanUtils 的锅
  3. php 自减函数,Thinkphp中某个字段值从增或自减函数
  4. python符号格式化设置区间_[Python3 填坑] 001 格式化符号 格式化操作符的辅助指令...
  5. 联想拯救者y空间_联想拯救者 R9000X 笔记本 GTX 1650 Ti 配置被砍
  6. git 修改commit_结合IDEA与命令行,解决常用git操作与特殊情况的最佳实践
  7. 嵌入式在线html编辑器,嵌入式HTML编辑器的设计与实现.ppt
  8. 文本居于图片左侧html,CSS实现图片与文本的居中对齐的常见方式
  9. android设置webview缓存目录,Android基础入门教程——7.5.5 WebView缓存问题
  10. [转】Python--遍历列表时删除元素的正确做法