discuz-ucenter-api-for-java中文用户名登录bug完美解决

近一段项目想用sso,解决方案想到了ucenter,现成的东西拿来就可以用,何乐而不为,因为自身业务系统有java,有php,有.net。急寻java的api,于是在网上找到了discuz-ucenter-api-for-java,下下来试用了一下,确实不错,但中文完全不支持……然后查看源码,一看就知道作者是纯php程序员……php好像对编码格式的处理不是很规范。看到很多网友也反映这个问题,带着问题,一步步debug,调用自带的Jsp_demo.jsp,发现每次打出来的用户名后面都有个]>,瞬间想到了是不是xml解析的时候有误,于是把result打出来,果不其然,因为调用ucenter接口返回的xml是iso-8859-1的预编码,作者用jdk自带的dom解析把中文解析出一串乱码,其中把cdata的结束符]>也带进去了,找到原因了就动手。

1、传值,登录是调用uc.uc_user_login("username", "password");这个方法最终post到ucenter还用了uriencode,可以打开PHPFunctions.java,就第一个方法23行,直接改成:

protected String urlencode(String value){
	    String str = null;
	try
        {
	    str = URLEncoder.encode(value,"UTF-8");
             
        }
        catch (UnsupportedEncodingException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
            return str;
}

2、返回值字符串解析编码,作者用的把InputStreamReader,很显然没有作编码处理,打开Client.java,找到uc_fopen方法,第344行,改成:

BufferedReader reader = new BufferedReader(new InputStreamReader(ins,"UTF-8"));

这里两步我的编码是UTF-8,请根据自己的需要改成自己对应的编码格式。一般要么是UTF-8,要么是GBK

猜你喜欢

转载自wuliaolll.iteye.com/blog/1853120