当前位置: 首页 > news >正文

SpringSecurity入门demo(三)多用户身份认证

WebSecurityConfigurerAdapter配置文件在
configure(AuthenticationManagerBuilder auth)

方法中完成身份认证。前面的demo都只有一个用户,security中使用UserDetailsService做为用户数据源 ,所以可以实现UserDetailsService 接口来自定义用户。实现方法可以有几下几种:

1)内容用户

2)JDBC读取

3)自定义UserDetailsService

4)自定义AuthenticationProvider

一、使用内存用户验证InMemoryUserDetailsManager 

1、代码改动:

package com.security.demo.config;import org.springframework.security.crypto.password.PasswordEncoder;public class MyPasswordEncoder implements PasswordEncoder {@Overridepublic String encode(CharSequence charSequence) {return charSequence.toString();}@Overridepublic boolean matches(CharSequence charSequence, String s) {return s.equals(charSequence.toString());}
}

 配置类中configure(AuthenticationManagerBuilder auth)方法覆盖身份认证:

//身份认证
@Overridepublic void configure(AuthenticationManagerBuilder auth) throws Exception {//可以设置内存指定的登录的账号密码,指定角色;不加.passwordEncoder(new MyPasswordEncoder())就不是以明文的方式进行匹配,会报错:java.lang.IllegalArgumentException: There is no PasswordEncoder mapped for the id "null"auth.inMemoryAuthentication().passwordEncoder(new MyPasswordEncoder()).withUser("admin").password("123").roles("xtgly");auth.inMemoryAuthentication().passwordEncoder(new MyPasswordEncoder()).withUser("zs").password("123").roles("userAdmin","roleAdmin");auth.inMemoryAuthentication().passwordEncoder(new MyPasswordEncoder()).withUser("ls").password("123").roles("schoolAdmin");//加上.passwordEncoder(new MyPasswordEncoder())。页面提交时候,密码以明文的方式进行匹配。}

2、测试:重启项目控制台不再输出随机的默认密码,

输入正常的账号密码跳转到目标接口,输入错误的账号密码跳转到登陆错误页面。

二、JDBC方式:

1、代码:

@Autowired
DataSource dataSource;@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {auth.jdbcAuthentication().dataSource(dataSource)// 下面的方法会运行数据表初始化脚本,前提是你的数据库支持varchar_ignorecase字段类型// .withDefaultSchema()//使用自定义sql查询用户信息.usersByUsernameQuery("select username,password,enabled from users " + "where username = ?").withUser("tester").password(passwordEncoder.encode("123456")).authorities("tester").and().withUser("user").password(passwordEncoder.encode("123456")).authorities("tester");
}

三、 自定义UserDetailsService:

四、自定义AuthenticationProvider:这是实际应用中常用的方法。

http://www.lryc.cn/news/279856.html

相关文章:

  • 【设计模式-02】Strategy策略模式及应用场景
  • ssh远程登陆
  • go如何终止多个for select循环嵌套
  • nginx(1.13.7)首次安装出现:【make: *** 没有规则可以创建“default”需要的目标“build” 问题】解决措施
  • 2024.1.8 关于 Redis 数据类型 Zset 集合命令、编码方式、应用场景
  • ffmpeg[学习(四)](代码实现) 实现音频数据解码并且用SDL播放
  • C++ 字符串哈希 || 字符串前缀哈希法
  • 【java】项目部署liunx服务器的简单步骤
  • 深度学习笔记(五)——网络优化(1):学习率自调整、激活函数、损失函数、正则化
  • 鸿蒙开发现在就业前景怎样?
  • 试用统信服务器操作系统UOS 20
  • [情商-11]:人际交流的心理架构与需求层次模型
  • 【.NET Core】Lazy<T> 实现延迟加载详解
  • 坑记(HttpInputMessage)
  • day04打卡
  • 语义分割miou指标计算详解
  • Unity3d 实现直播功能(无需sdk接入)
  • 计算机缺失msvcr100.dll如何修复?分享五种实测靠谱的方法
  • 面试宝典进阶之redis缓存面试题
  • 调试(c语言)
  • opencv-4.8.0编译及使用
  • Jmeter 性能-监控服务器
  • Excel学习
  • 【技能---labelme软件的安装及其使用--ubuntu】
  • 回归预测 | Matlab实现SSA-CNN-LSTM-Attention麻雀优化卷积长短期记忆神经网络注意力机制多变量回归预测(SE注意力机制)
  • css垂直水平居中的几种实现方式
  • OpenHarmony之hdc
  • 【爬虫实战】-爬取微博之夜盛典评论,爬取了1.7w条数据
  • CST2024的License服务成功启动,仍报错——“The desired daemon is down...”,适用于任何版本!基础设置遗漏!
  • matlab中any()函数用法