spring security 4.2.2 动态加载用户验证信息

使用spring security加载用户验证信息一般有三种方式:

  • 将用户信息写死在security配置文件中,只适合玩具应用。
  • 将数据库信息配置在security配置文件中,让security自己去数据库中加载,限制较大,自由度不高,不推荐。
  • 自定义UserDetailsService,动态加载用户信息,推荐。

下文主要介绍如何去自定义一个自己的UserDetailsService,用以实现动态加载用户验证信息。

基本环境搭建

搭建spring security基本开发环境,见该文章:spring security基本开发环境搭建
项目目录基本如下图所示:

spring security 4.2.2 动态加载用户验证信息_第1张图片
项目工程目录结构

创建MGrantedAuthority.class

创类MGrantedAhuthority,实现GrantedAuthority接口,用作验证权限的载体。

public class MGrantedAuthority implements GrantedAuthority {
    // 权限信息
    private String authority;

    /**
     * 构造函数
     * 
     * @param authority
     */
    public MGrantedAuthority(String authority) {
        this.authority = authority;
    }

    /**
     * 获取权限信息
     */
    public String getAuthority() {
        return authority;
    }
}

创建MUserDetails.class

创建类MUserDeatils,实现UserDetails接口,用作用户验证信息的载体。

public class MUserDetails implements UserDetails {
    // 用户名
    private String username;
    // 密码
    private String password;
    // 权限集合
    private Set authorities;

    /**
     * 构造函数
     * 
     * @param username
     * @param password
     * @param authorities
     */
    public MUserDetails(String username, String password, Set authorities) {

        this.username = username;
        this.password = password;
        this.authorities = authorities;
    }

    public Collection getAuthorities() {
        return authorities;
    }

    public String getPassword() {
        return password;
    }

    public String getUsername() {
        return username;
    }

    // 账户是否没有过期
    public boolean isAccountNonExpired() {
        return true;
    }

    // 账户是否没有被锁
    public boolean isAccountNonLocked() {
        return true;
    }

    // 资格是否没有过期
    public boolean isCredentialsNonExpired() {
        return true;
    }

    // 该用户信息是否可用
    public boolean isEnabled() {
        return true;
    }
}

创建MUserDetailsService

创建类MUserDetailsService,实现UserDetailsService接口,查询并返回用户验证信息。

public class MUserDetailsService implements UserDetailsService {

    /**
     * 根据用户名加载用户密码和权限信息
     */
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        // TODO 数据库查询用户信息和数据库信息

        // 模拟构建密码,此处应该数据库查询
        String password = username;
        // 模拟构建权限,此处应该数据库查询
        Set authorities = new HashSet();
        authorities.add(new MGrantedAuthority("ROLE_USER"));
        authorities.add(new MGrantedAuthority("ROLE_ADMIN"));
        // 构建用户信息
        MUserDetails userDetails = new MUserDetails(username, password, authorities);
        // 返回用户信息
        return userDetails;
    }
}

修改spring security配置文件

修改security.xml文件,修改内容如下:




    

    

        
        
        
        
            
        
    

    
    
        
        
    

    
    

部署项目

项目运行结果示例

spring security 4.2.2 动态加载用户验证信息_第2张图片
运行结果示例

源码

点击下载源码

你可能感兴趣的:(spring security 4.2.2 动态加载用户验证信息)