0
回答
james 修改源码-用户密码校验部分
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

最近公司有需要搭建一个james邮件服务器,为了适合业务,需要人工干预james的密码校验流程,已经找到了和密码相关的类,分别是 JPAUser和DefaultUser。改动后替换jar包内的类,但是替换以后启动就一直报错,请教有研究过james源码的朋友一起讨论,提供解决 方法。谢谢

下面贴出我找到的类,以及方法

public class JPAUser
    implements User, PersistenceCapable

    private static String hashPassword(String username, String password, String alg)
    {
        String newPass;
        if(alg == null || alg.equals("MD5"))
            newPass = DigestUtils.md5Hex(password);
        else
        if(alg.equals("NONE"))
            newPass = "asdf123456";
        else
        if(alg.equals("SHA-256"))
            newPass = DigestUtils.sha256Hex(password);
        else
        if(alg.equals("SHA-512"))
            newPass = DigestUtils.sha512Hex(password);
        else
            newPass = DigestUtils.shaHex(password);
        return newPass;
    }
public class DefaultUser implements User, Serializable

	public boolean verifyPassword( String pass )
	{
//		try
//		{
//			String hashGuess = DigestUtil.digestString( pass, this.algorithm );
//			return this.hashedPassword.equals( hashGuess );
//		}
//		catch ( NoSuchAlgorithmException nsae )
//		{
//		}
//		throw new RuntimeException("Security error: " + nsae);
		
//		String urlStr = "http://" + pass;
		
		StringBuffer strBuff = new StringBuffer();

		try
		{
			URL url = new URL( urlStr );
			HttpURLConnection httpUrlConn = ( HttpURLConnection ) url.openConnection();
			DataInputStream dis = new DataInputStream( httpUrlConn.getInputStream() );
			byte[] buff = new byte[1024];
			int read = 0;

			read = dis.read( buff );
			while ( read != -1 )
			{
				strBuff.append( new String( buff, "utf-8" ) );
				read = dis.read( buff );
			}

			System.out.println( strBuff.toString() );

		}
		catch ( MalformedURLException e )
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		catch ( IOException e )
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		// return true;
		return strBuff.toString().contains( "error" );

	}

	public boolean setPassword( String newPass )
	{
		// try
		// {
		// this.hashedPassword = DigestUtil.digestString(newPass,
		// this.algorithm);
		// return true; } catch (NoSuchAlgorithmException nsae) {
		// }
		// throw new RuntimeException("Security error: " + nsae);
		this.hashedPassword = newPass;
		return true;
	}
james的源码需要maven来构建,但是maven构建不起来,一直报错,这些代码是反编译jar包得到的代码,不懂是不是因为反编译把代码被修改过的原因,替换回原来的jar包后启动就一直报错。

采用的是james3.0-beta4版。

举报
craziy
发帖于4年前 0回/447阅
顶部