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 + 基本身份验证