1、据用户名获取用户是否存在同时设置用户的 权限实现了:UserDetailsService 接口
/**
- @author:wenye
- @date:Created in 2021/4/7 11:49
- @description:校验身份
- @version: 1.0.0$
*/
@Component
public class MyuserDetailsService implements UserDetailsService {
private Logger logger = LoggerFactory.getLogger(MyuserDetailsService.class);
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
// 据用户名查找用户信息,用户名和明码
//AuthorityUtils.commaSeparatedStringToAuthorityList("admin") 把字符串转化为对应的对象,以逗号分隔字符串
logger.info("用户名为:{}",username);
return new User(username,"123456", AuthorityUtils.commaSeparatedStringToAuthorityList("admin"));
}
}
2、校验用户名和明码是否匹配,实现了 PasswordEncoder 接口
/**
- 用于编码明码的服务接口的实现类。
*/
@Component
public class MyPasswordEncoder implements PasswordEncoder {
private Logger logg = LoggerFactory.getLogger(MyPasswordEncoder.class);
/**
* 编码原始明码。通常,良好的编码算法利用 SHA- 1 或更大的哈希与 8 字节或更大的随机生成的盐相结合。* @param rawPassword 明码,一个可读的字符值序列
* @return
*/
@Override
public String encode(CharSequence rawPassword) {logg.info("原始明码:{}", rawPassword);
return rawPassword.toString();}
/**
* 验证从存储中取得的编码明码是否与提交的原始明码匹配。如果明码匹配,返回 true; 如果不匹配,返回 false。存储的明码自身永远不会被解码。* @param rawPassword 预设的验证明码。要编码和匹配的原始明码
* @param encodedPassword 表单输出的明码。来自存储的编码明码与之比拟
* @return
*/
@Override
public boolean matches(CharSequence rawPassword, String encodedPassword) {logg.info("预设的验证明码:{}", rawPassword);
logg.info("表单输出的明码:{}", encodedPassword);
return encodedPassword.equals(rawPassword.toString());
}
}
3、security 配置文件
/**
- SpringSecurity 的配置
- Created by macro on 2018/4/26.
*/
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled=true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
// 申请权限配置
@Override
protected void configure(HttpSecurity http) throws Exception {
// 任何登录的申请都须要进行认证能力拜访
http.formLogin()
.and()
// 身份认证就是角色权限认证,在 usersevice 中咱们定义了角色对象
.authorizeRequests()
.anyRequest()
.authenticated();}
}