首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 企业软件 > 行业软件 >

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

2013-04-26 
discuz-ucenter-api-for-java中文用户名登录bug完美解决近一段项目想用sso,解决方案想到了ucenter,现成的

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

?

?

热点排行