spring security基本知识(二)

2020-12-13 03:02

阅读:620

标签:设置   list   ring   ide   bsp   over   jdb   锁定   来源   

配置自定义的用户存储

 

我们在 SecurityConfig 的配置类中 重写了 configure(AuthenticationManagerBuilder auth) 方法,我们可以通过 AuthenticationManagerBuilder 这个构造器类使用不同的用户存储,如 inMemoryAuthentication()基于内存的,jdbcAuthentication()基于关系型数据库的.

通过查看AuthenticationManagerBuilder的源码可以发现里面还有一个方法 userDetailsService(),允许我们自定义用户存储的实现.如下:

userDetailsService()方法 需要传入参数 “UserDetailsService”。而UserDetailsService是一个接口所以我们需要实现接口的loadUserByUsername(String s)方法。根据给定的用户名来查找用户。
loadUserByUsername()方法会返回代表给定用户的UserDetails对象 。而这个UserDetail 又是个什么呢?我们再次产看其源码,发现这也是一个接口,也就是说我们还要实现这个 UserDetail接口.这个结构
封装了用户的登陆信息

好了,了解了 userDetailsService 方法的构造,我们就可以着手写代码了。首先定义一个 MyUserService 实现 UserDetailsService 接口.并在重写的 loadUserByUsername 方法中返回 UserDetail类型的对象即可。

/**
 * @author cuiqq
 * @description: TODO
 * @date 2019-06-2115:36
 */
public class MyUserService implements UserDetailsService {
    
    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {

        //自定义用户存储数据来源,可以是从关系型数据库,非关系性数据库,或者其他地方获取用户数据。
        User userEntity = new User("cuiqq", "123456");
        //还可以在此设置账号的锁定,过期,凭据失效 等参数
        //...

        // 设置 权限,可以是从数据库中查找出来的
        ArrayList authorities = new ArrayList();
        authorities.add(new SimpleGrantedAuthority("ROLE_USER"));
        authorities.add(new SimpleGrantedAuthority("ROLE_ADMIN"));

        userEntity.setAuthorities(authorities);
        return userEntity;
    }
}

 

 

spring security基本知识(二)

标签:设置   list   ring   ide   bsp   over   jdb   锁定   来源   

原文地址:https://www.cnblogs.com/cuiqq/p/11064827.html


评论


亲,登录后才可以留言!