Spring Security(02)认证配置

本文介绍了如何在Spring Security中自定义配置,包括通过数据库进行认证、使用自定义登录页面、实现记住我功能以及添加验证码功能。详细讲解了配置自定义UserDetailsService、PasswordEncoder、登录页面、RememberMe服务以及验证码验证的实现过程。
摘要由CSDN通过智能技术生成

前面只是简单使用了springsecurity的登录控制功能,当然实际使用中是一定需要写一些自定义配置的;本节将通过springsecurity配置一些功能:

  • 通过数据库用户密码完成认证
  • 使用自定义登录页面
  • 实现记住我功能
  • 增加验证码功能

添加配置类

配置的一个比较重要的类是 WebSecurityConfigurerAdapter

新建一个配置类去继承WebSecurityConfigurerAdapter,同时开启 @EnableWebSecurity

@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
	

}

主要做配置的就是实现这3个configure 方法;

​ 1. 默认的AuthenticationManager 默认是获取的,而如果重写后那么将使用AuthenticationManagerBuilder 构建的AuthenticationManager ,此方法也可以用来配置认证用户信息;

protected void configure(AuthenticationManagerBuilder auth) throws Exception {
   this.disableLocalConfigureAuthenticationBldr = true;
}
  1. 重写此方法配给制web安全相关的配置
   @Override
	public void configure(WebSecurity web) throws Exception {
	}
  1. 重写此方法配置授权和认证相关的接口的信息
@Override
    protected void configure(HttpSecurity http) throws Exception {
        super.configure(http);
    }

自定义登录时认证信息获取

springsecurity 提供了获取用户信息的一个重要接口 UserDetailsService

在登录的时候会调用此接口的

 //返回的信息是 UserDetails类

 UserDetails 是用户的抽象信息,包含了用户名,密码,是否过期,是否启用等信息;
 UserDetails loadUserByUsername(String username);

UserDetailsService 接口 框架默认也提供了多种实现

其中:
CachingUserDetailsService 通过装饰器模式装饰有缓存功能的service,内部维护了缓存
InMemoryUserDetailsManager 通过内存中获取用户信息的管理器
JdbcUserDetailsManager jdbc 通过jdbcTemplate 获取用户信息

基于内存的实现

使用@Bean声明一个 UserDetailsService 写在配置类中

    @Bean
    public UserDetailsService userDetailsService() {
        InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
        manager.createUser(User.withDefaultPasswordEncoder().username("user").password("123456").roles("USER").build());
        manager.createUser(User.withDefaultPasswordEncoder().username("admin").password("111111").roles("SYSTEM").build());
        return manager;
    }

简单看下 InMemoryUserDetailsManager 的实现,其实就是在map 中维护了用户的信息;

在登录的时候从map中获取信息比对;根据上面的配置就可以同时使用2个不同角色的用户执行登录;

查询数据库

  1. 引入mybatis-plugs 和mysql驱动等相关jar包

     <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>3.4.3</version>
            </dependency>
    
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>8.0.27</version>
            </dependency>
    
    

    添加数据库驱动配置

    # DataSource Config
    spring:
      datasource:
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://localhost:3306/db?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT
        username: root
        password: 111111
    
    
  2. 实现自定义userdetailservice 及定义一个实现了UserDetails 接口的userdetail信息

public class MyUserDetailService implements UserDetailsService {

   @Resource
   private UserMapper userMapper;

   @Override
   public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
       User findUser = userMapper.findOneByUserName(username);
       return  MyUserDetails.create(findUser);
   }
}


@TableName(value = "t_user")
public class User {

    private Long id;
    private String userName;
    private String passWord;
    private Boolean locked;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassWord() {
        return passWord;
    }

    public void setPassWord(String passWord) {
        this.passWord = passWord;
    }

    public Boolean getLocked()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值