package doumeemes.config.shiro; 
 | 
  
 | 
import doumeemes.config.shiro.ShiroToken; 
 | 
import doumeemes.core.utils.Utils; 
 | 
import doumeemes.dao.system.model.SystemUser; 
 | 
import doumeemes.service.system.SystemUserService; 
 | 
import org.apache.shiro.authc.AuthenticationInfo; 
 | 
import org.apache.shiro.authc.AuthenticationToken; 
 | 
import org.apache.shiro.authc.credential.HashedCredentialsMatcher; 
 | 
import org.springframework.beans.factory.annotation.Autowired; 
 | 
import org.springframework.context.annotation.Lazy; 
 | 
import org.springframework.stereotype.Component; 
 | 
  
 | 
/** 
 | 
 * Shiro密码比对处理 
 | 
 * @author Eva.Caesar Liu 
 | 
 * @date 2023/04/17 12:11 
 | 
 */ 
 | 
@Component 
 | 
public class ShiroCredentialsMatcher extends HashedCredentialsMatcher { 
 | 
    @Lazy 
 | 
    @Autowired 
 | 
    private SystemUserService systemUserService; 
 | 
  
 | 
    @Override 
 | 
    public boolean doCredentialsMatch(AuthenticationToken token, AuthenticationInfo info) { 
 | 
        ShiroToken usernamePasswordToken = (ShiroToken) token; 
 | 
        if(((ShiroToken) token).getUpdateFlag() ==1){ 
 | 
            return Boolean.TRUE; 
 | 
        } 
 | 
        SystemUser queryUserDto = new SystemUser(); 
 | 
        queryUserDto.setUsername(usernamePasswordToken.getUsername()); 
 | 
        queryUserDto.setDeleted(Boolean.FALSE); 
 | 
        SystemUser systemUser = systemUserService.findOne(queryUserDto); 
 | 
        if (systemUser == null) { 
 | 
            return Boolean.FALSE; 
 | 
        } 
 | 
        if(usernamePasswordToken.getDdLogin()){ 
 | 
            return Boolean.TRUE; 
 | 
        } 
 | 
        if(usernamePasswordToken.getWxLogin()){ 
 | 
            return Boolean.TRUE; 
 | 
        } 
 | 
        // 加密密码 
 | 
        String pwd = Utils.Secure.encryptPassword(new String(usernamePasswordToken.getPassword()), systemUser.getSalt()); 
 | 
        // 比较密码 
 | 
        return this.equals(pwd, systemUser.getPassword()); 
 | 
    } 
 | 
} 
 |