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 {
    @Override
    public String encode(CharSequence charSequence) {
        return charSequence.toString();
    }

    @Override
    public boolean matches(CharSequence charSequence, String s) {
        return s.equals(charSequence.toString());
    }
}

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

//身份认证
@Override
    public 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:这是实际应用中常用的方法。

相关推荐

  1. SpringSecurity入门demo()用户身份认证

    2024-01-14 01:26:02       67 阅读
  2. SpringSecurity入门demo(四)授权

    2024-01-14 01:26:02       57 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-14 01:26:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-14 01:26:02       101 阅读
  3. 在Django里面运行非项目文件

    2024-01-14 01:26:02       82 阅读
  4. Python语言-面向对象

    2024-01-14 01:26:02       91 阅读

热门阅读

  1. [蓝桥杯 2015 省 A] 饮料换购

    2024-01-14 01:26:02       62 阅读
  2. AcWing:4965. 三国游戏

    2024-01-14 01:26:02       61 阅读
  3. 【Kotlin】中英数字混合等多种情况下的排序方式

    2024-01-14 01:26:02       59 阅读
  4. OLAP型数据库 ClickHouse的简介 应用场景 优势 不足

    2024-01-14 01:26:02       63 阅读
  5. xtu-c语言考试复习

    2024-01-14 01:26:02       60 阅读
  6. C#的索引和范围运算符的用法

    2024-01-14 01:26:02       47 阅读
  7. 一个Pytorch 的简单的分类本地图片的训练AI例子

    2024-01-14 01:26:02       64 阅读
  8. 50天精通Golang(第16天)

    2024-01-14 01:26:02       63 阅读
  9. Linux上对大于2T的硬盘分区

    2024-01-14 01:26:02       58 阅读
  10. 常用电容功能以及型号

    2024-01-14 01:26:02       70 阅读