# 第一步 編寫實體類
~~~
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.util.Date;
/**
* <p>
* 用戶表
* </p>
*
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("sys_user")
public class Users implements Serializable {
private static final long serialVersionUID = 1L;
/**
* id
*/
@TableId(type = IdType.ASSIGN_ID)
private String id;
/**
* 登錄賬號
*/
private String username;
/**
* 真實姓名
*/
private String realname;
/**
* 密碼
*/
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
private String password;
/**
* md5密碼鹽
*/
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
private String salt;
/**
* 頭像
*/
private String avatar;
/**
* 生日
*/
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date birthday;
/**
* 性別(1:男 2:女)
*/
private Integer sex;
/**
* 電子郵件
*/
private String email;
/**
* 電話
*/
private String phone;
/**
* 部門code(當前選擇登錄部門)
*/
private String orgCode;
/**部門名稱*/
private transient String orgCodeTxt;
/**
* 狀態(1:正常 2:凍結 )
*/
private Integer status;
/**
* 刪除狀態(0,正常,1已刪除)
*/
@TableLogic
private Integer delFlag;
/**
* 工號,唯一鍵
*/
private String workNo;
/**
* 職務,關聯職務表
*/
private String post;
/**
* 座機號
*/
private String telephone;
/**
* 創建人
*/
private String createBy;
/**
* 創建時間
*/
private Date createTime;
/**
* 更新人
*/
private String updateBy;
/**
* 更新時間
*/
private Date updateTime;
/**
* 同步工作流引擎1同步0不同步
*/
private Integer activitiSync;
/**
* 身份(0 普通成員 1 上級)
*/
private Integer userIdentity;
/**
* 負責部門
*/
private String departIds;
/**
* 多租戶id配置,編輯用戶的時候設置
*/
private String relTenantIds;
/**設備id uniapp推送用*/
private String clientId;
}
~~~
# 第二步 編寫mapper
~~~
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.maicaii.models.entity.Users;
import org.springframework.stereotype.Repository;
@Repository
public interface UsersMapper extends BaseMapper<Users> {
}
~~~
# 第三步 編寫security配置類
~~~
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.maicaii.models.entity.Users;
import org.maicaii.models.mapper.UsersMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.AuthorityUtils;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service;
import java.util.List;
@Service("userDetailsService")
public class MyUserDetailsService implements UserDetailsService {
@Autowired
private UsersMapper usersMapper;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
String password = passwordEncoder.encode("aaa");//加密密碼
//使用userMapper方法,使用用戶名查詢數據庫
QueryWrapper<Users> wrapper = new QueryWrapper<>();//查詢構造器
wrapper.eq("username",username);//條件
Users users= usersMapper.selectOne(wrapper);//查詢一條數據
if (users==null){//用戶不存在
throw new UsernameNotFoundException("用戶不存在");
}
List<GrantedAuthority> auths = AuthorityUtils.commaSeparatedStringToAuthorityList("auths");//權限集合
return new User(users.getUsername(),password,auths);//用戶名,密碼,權限
}
}
~~~
# 第四步 編寫加密方式和設置自定義用戶
~~~
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
//第二種
@Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Autowired
private UserDetailsService userDetailsService;
@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService)//自定義設置類
.passwordEncoder(password());
}
@Bean //加密方式
public PasswordEncoder password(){
return new BCryptPasswordEncoder();
}
}
~~~
