关于java:Spring-Security使用数据库数据完成认证练气后期2

写在后面

没错,这篇文章还是练气前期!但作者我置信筑基不可企及!
在前一篇文章当中,咱们简略地剖析了一下Spring Security的认证流程,晓得了如果想要实现对本人用户数据(账户、角色、权限)的读取,须要实现UserDetailsService这个接口以及实现对应的loadUserByUsername 的办法,编写本人的业务逻辑。并在spring security的配置文件当中指定认证应用的业务对象 。

步骤

第一步:编写本人的User实体类

/**
 * @author 赖柄沣 bingfengdev@aliyun.com
 * @version 1.0
 * @date 2020/8/27 15:19
 */
@TableName("sys_user")
public class MyUserDO {
    @TableId
    private int id;
    private String username;
    private String password;
    private boolean status;

    getter。。。
    setter。。。
}

第二步:编写UserDetailsServiceImpl实现UserDetailsService接口

/**
 * @author 赖柄沣 bingfengdev@aliyun.com
 * @version 1.0
 * @date 2020/8/23 9:48
 */
public class UserServiceImpl implements UserDetailsService {
     @Autowired
    private UserDao2Impl userDaoImpl;

}

第三步:实现loadUserByUsername办法

/**应用spring security曾经实现的user对象进行认证
     * @author 赖柄沣 bingfengdev@aliyun.com
     * @date 2020-08-27 15:24:28
     * @param username
     * @return org.springframework.security.core.userdetails.UserDetails
     * @throws UsernameNotFoundException
     * @version 1.0
     */
    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {

        // 测验参数
        if (username == null||username.trim().length() == 0) {
            return null;
        }

        //结构条件(我应用的是MybatisPlus)
        QueryWrapper<MyUserDO> qw = Wrappers.query();
        qw.eq("username",username);

        //从数据库中查出本人的user对象
        MyUserDO myuser = userDaoImpl.selectOne(qw);

        //模仿获取用户具备的角色信息
        List<SimpleGrantedAuthority> simpleGrantedAuthorityList = new  ArrayList<>();

        simpleGrantedAuthorityList.add(new SimpleGrantedAuthority("ROLE_USER"));
        //封装成spring security的user对象
        //留神:这里的明码如果不是加密村存储的要加上"{noop}"
        User user = new User(myuser.getUsername(),myuser.getPassword(),simpleGrantedAuthorityList);
        return user;
    }

第四步:在spring security的配置文件中指定认证信息数据源为本人的UserServiceImpl

<security:authentication-provider user-service-ref="userService2Impl">
        </security:authentication-provider>

至此,spring security应用数据数据实现认证操作的编写流程便完结了,对于其中的原理,能够查看我的上一篇文章。

如果感觉应用spring security提供的user对象不够不便,能够让本人编写的User对象继承spring security的User(之所以不举荐间接实现UserDetails接口是因为,如果间接实现该接口的话得本人编写用户账户状态的判断逻辑,那样将使得工作变得更加麻烦)

补充:加密认证形式

在IOC容器中提供加密对象

<bean id="passwordEncoder"
class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder"/>

而后在存入用户数据前先对用户提交的明码进行加密。

完结

对于应用注解配置的形式较为简单,在本文当中并未给出,后续有工夫写一写springboot整合spring security的文章。目前是学习spring security入门一小步,所以咱们的关注点应该放在spring security自身,所以刚开始的时候会波及到很多“原始性”的操作。

代码下载:<https://github.com/code81192/…

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理