package cn.exrick.xboot.core.config.security;
|
|
import cn.exrick.xboot.core.common.utils.ResultUtil;
|
import cn.hutool.extra.spring.SpringUtil;
|
import jodd.util.Base64;
|
import org.springframework.context.annotation.Configuration;
|
import org.springframework.security.authentication.BadCredentialsException;
|
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
|
import org.springframework.security.authentication.dao.AbstractUserDetailsAuthenticationProvider;
|
import org.springframework.security.core.AuthenticationException;
|
import org.springframework.security.core.userdetails.UserDetails;
|
import org.springframework.security.core.userdetails.UserDetailsService;
|
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
|
import org.springframework.stereotype.Component;
|
|
/**
|
* @author xfei
|
* @date 2023/4/28 14:13
|
*/
|
public class DaoAuthenticationProvider extends AbstractUserDetailsAuthenticationProvider {
|
@Override
|
protected void additionalAuthenticationChecks(UserDetails userDetails, UsernamePasswordAuthenticationToken authentication) throws AuthenticationException {
|
if (authentication.getCredentials()==null){
|
throw new BadCredentialsException("密码为空");
|
}
|
String password= authentication.getCredentials().toString();
|
password = Base64.decodeToString(password);
|
if (!new BCryptPasswordEncoder().matches(password, userDetails.getPassword())) {
|
throw new BadCredentialsException("密码错误");
|
}
|
|
|
UsernamePasswordAuthenticationToken newAuthentication = new UsernamePasswordAuthenticationToken(authentication.getPrincipal(), password);
|
newAuthentication.setDetails(authentication.getDetails());
|
}
|
|
@Override
|
protected UserDetails retrieveUser(String s, UsernamePasswordAuthenticationToken usernamePasswordAuthenticationToken) throws AuthenticationException {
|
UserDetails userDetails = SpringUtil.getBean(UserDetailsService.class).loadUserByUsername(s);
|
|
|
return userDetails;
|
}
|
}
|