spring security基本知识

Posted cuiqq

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring security基本知识相关的知识,希望对你有一定的参考价值。

配置自定义的用户存储

 

我们在 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<GrantedAuthority> authorities = new ArrayList<>();
        authorities.add(new SimpleGrantedAuthority("ROLE_USER"));
        authorities.add(new SimpleGrantedAuthority("ROLE_ADMIN"));

        userEntity.setAuthorities(authorities);
        return userEntity;
    

 

 

以上是关于spring security基本知识的主要内容,如果未能解决你的问题,请参考以下文章

Spring MVC REST + Spring Security + 基本身份验证

使用 spring security ldap 禁用基本身份验证

Spring security知识盲区

Spring Security 有条件的基本认证

Spring Security基本原理

Spring Security Oauth - 发送令牌请求时需要基本访问身份验证