JavaWeb整合Discuz实现单点登录

-
2016-09-26

为了丰富员工业余生活,增多交流机会,于是在公司搭建了论坛方便大家灌水,目前公司中企业级应用是基于JAVAEE的产品,论坛选用了比较受欢迎的Discuz 3.2, 为了避免二次登陆使用单点登陆解决,虽然查找了各种资料做集成,但是其中还是遇到了些问题,翻墙发现了: discuz-ucenter-api-for-java 因为被墙,在国内无法访问code.google.com,已将测试代码做了部分调整上传至GitHub: https://github.com/yaonew/discuz-ucenter_api_for_java

第一步配置config.properties

UC_API = http://你的discuz地址/uc_server  如http://localhost/bbs/uc_server
UC_IP = 正常情况下留空即可
UC_KEY = N3M117R45aWfqfe4xcu0OfTcAT3r4K6f2KRoUOFYT(与ucenter通信的密钥,这里自己设定,需与discuz ucenter 一致)
UC_APPID = 2    //appID为UCenter中应用管理中的ID,见UCenter设置
UC_CONNECT = 正常情况下留空即可

第二步 配置web.xml,添加如下

<servlet>
    <servlet-name>api</servlet-name>
    <servlet-class>com.fivestars.interfaces.bbs.api.UC</servlet-class>
    <load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>api</servlet-name>
    <url-pattern>/api/uc.php</url-pattern>
</servlet-mapping>

第三步 配置ucenter

管理员登陆UCenter : http://localhost/bbs/uc_server 应用管理-> 添加应用, 这边添加的应用ID,通信秘钥与第一步的配置保持一致 

 配置完成,看到通信成功的信息,表示ucenter集成配置OK 

第四步 访问测试页

<%@page import="java.util.LinkedList"%>
<%@page import="com.fivestars.interfaces.bbs.util.XMLHelper"%>
<%@page import="com.fivestars.interfaces.bbs.client.Client"%>
<%
Client uc = new Client();
//String result1 = uc.uc_user_register("test3", "test3", "test3@huaqi.info");
//out.println("xxx" + result1);
String result = uc.uc_user_login("test3", "test3");

LinkedList<String> rs = XMLHelper.uc_unserialize(result);
if(rs.size()>0){
    int $uid = Integer.parseInt(rs.get(0));
    String $username = rs.get(1);
    String $password = rs.get(2);
    String $email = rs.get(3);
    if($uid > 0) {
        response.addHeader("P3P"," CP=\"CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR\"");

        out.println("登录成功");
        out.println($username);
        out.println($password);
        out.println($email);

        String $ucsynlogin = uc.uc_user_synlogin($uid);
        out.println("登录成功"+$ucsynlogin);

        //本地登陆代码
        //TODO ... ....
        Cookie auth = new Cookie("auth", uc.uc_authcode($password+"\t"+$uid, "ENCODE"));
        auth.setMaxAge(31536000);
        //auth.setDomain("localhost");
        response.addCookie(auth);

        Cookie user = new Cookie("uchome_loginuser", $username);
        response.addCookie(user);

    } else if($uid == -1) {
        out.println("用户不存在,或者被删除");
    } else if($uid == -2) {
        out.println("密码错");
    } else {
        out.println("未定义");
    }
}else{
    out.println("Login failed");
    System.out.println(result);
} 
%>

访问页面返回一段js: 登录成功 test3 test3 test3@huaqi.info 登录成功

<script type="text/javascript" src="http://localhost/api/uc.php?time=1474188863&amp;code=6dfdhvNXKRoUOFYTR3Jn3ORQ2LKDd6cI6X5p4RD3yxyh6gy3%2F%2FQAJ5u8URp7qR%2F%2F0jaIoha2g4MnGRtosanyDihDy%2BIyW0zNNAnjkGHoaC1uyga5U2py%2F6%2F4uolQKBJaVI%2FMsM%2BuFUlttWcSmS7mzQoN%2Be0tzvPFZg2Y" reload=“1”</script>

在浏览器中执行后访问 discus已保持登陆状态!


目录