0%

java项目集成Discuz的单点登录

条件准备

  • 部署Discuz

    参见文章:windows下discuz论坛
    Linux下原理相同

  • Java项目

    普通Javaweb项目即可

  • Discuz用户中心访问程序包

    云盘地址
    链接:https://pan.baidu.com/s/1dFtW97z 密码:mkay

    下载解压,将里面的
    com.fivestars.interfaces.bbs包
    和 config.properties
    和 Jsp_demo.jsp
    和 web.xml
    拷贝出来 备用。

Java项目与Discuz整合单点登录

将配置和工具类放到Java项目

  • 清单

      1.discuz工具包
      2.web.xml添加discuz工具包路径
      3.discuz配置文件
      4.修改Java项目登录代码
      5.discuz jsp
      
    
  • 将工具包放到Java项目中:

          com.fivestars.interfaces.bbs包(src根目录)
          和 config.properties(src根目录)
          分别放到对应目录(参考下载的Demo目录结构)
    
  • 将web.xml中的复制到Java项目的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>
            
    
      
    

Discuz的UCenter中配置参数,使其与Java项目通信

  • 访问Discuz的用户管理中心(我的discuz在apache下部署的名称为bbs,部署机器ip为192.148.1.147),如:

      http://192.168.1.147/bbs/uc_server
      
    
  • 以创始人或管理员身份登录

  • 点击应用管理,添加新应用

      1.应用类型
          选择:其他
          
      2.应用名称
          随便写,最好和Java项目名保持一致
          
      3.应用的主URL
          Java项目的访问地址,如:
          http://localhost:8080/discuzTest
          
      4.通信密钥
          随便写,如123456,后面在Java项目中要用到
          
      5.是否开启同步登陆
          勾选:是
          
      6.是够接受通知
          勾选:是
      
      最后提交,提交后在应用管理用看到,此时应用通信还处于失败状态,接下来配置Java项目
          
    


修改Java项目中的config.properties

  • 修改前面复制到Java src跟目录下的config.properties内容,内容如下(根据实际情况配置):

      #UCenter访问地址
      UC_API = http://192.168.1.147/bbs/uc_server
      
      #uc ip address,UCenter ip地址
      UC_IP = 192.168.1.147
    
      #key,通信密钥
      UC_KEY = 123456
    
      #appid,应用ID(在应用管理>应用列表中可以看到)
      UC_APPID = 4
    
      #connect mode: default value is "",可以不填
      UC_CONNECT = 
          
      启动Java项目,进入UCenter>应用管理,可以看到此时的通信情况会变为:通信成功。
      
    

单点登录开发

  • Java项目中访问Discuz,

      假定点击一个按钮跳转到一个loginDiscuz.jsp页面,提供Discuz论坛地址,点击地址后跳转到论坛首页:
      
    

    将上面Jsp_demo.jsp中的代码拷贝到loginDiscuz.jsp中,稍加修改:

    http://ogy57hyu6.bkt.clouddn.com/2-logindiscuz.jsp.txt

    注:其中下面的代码比较重要

      out.println($ucsynlogin
                      + "<a href='http://localhost/bbs' target='_blank'><span style='font-size:18px'>点此访问论坛!</span></a>");    
    
      将返回的$ucsynlogin输出到页面,才能是单点登录成功。
      如何用postman访问整合好的Java项目,如:
      http://192.168.1.147:8080/discuzTest/Jsp_demo.jsp
          
      会看到返回一段js:
          
      <script type="text/javascript" src="http://localhost/bbs/api/uc.php?time=1514532782&code=2f15Z57hlywzRB9IwfMmFH%2BVicj4NZLJyxbcdwiTFsOfI1mv2SPKISVXNEkTEmtP9AdwcNfJJPB9z9F36U4T%2FGvSm%2BHvR4%2BefOyk6x4k1zS0KmP%2BZKXM9i6Pj%2BizV06jNyT7kLnYVyPChoOwEMeoqomqIKYbnBaI5pN3" reload="1"></script>
              
      将js中的src中的内容复制粘贴到浏览器地址栏访问,如果不报错,
      再访问Discuz地址,可以看到不用输入登录信息,用户已经处于登录状态。
      
    

    关于上面返回值中的URL中的localhost

    上面返回的链接中是src=”http://localhost/bbs。。。

    如果想要返回discuz所在服务器ip,如src=”http://local192.168.1.147/host/bbs。。。。

      需要在UCenter的应用管理中将Discuz的
      应用的主URL 由http://localhost/bbs替换为所对应的ip,如:
      http://192.168.1.147/bbs
      
    

    如图:

bug修改

  • UCenter可能无法登陆bug修正

      在discuz\uc_server\model\admin.php
      找到adminbase函数,将
      $this->cookie_status = 0;
      
      修改为:
      $this->cookie_status = isset($_COOKIE['sid']) ? 1 : 0;
    
  • 单点登录后关闭浏览器用户没有注销bug修正(十分不安全)

      在discuz\source\function\function_core.php
      
    

    找到dsetcookie函数,将

      $path = $httponly && PHP_VERSION < '5.2.0' ? $config['cookiepath'].'; HttpOnly' : $config['cookiepath'];
      
    

    修改为:

      //将cookie的生命周期改为浏览器会话结束时结束
      $cookie_life = -1;
      $life = $life > 0 ? $cookie_life : ($life < 0 ? getglobal('timestamp') - 31536000 : 0);
    

参考文章

discuz全部文件

  • 云盘地址

    链接:https://pan.baidu.com/s/1pLSilC3 密码:tned

  • 包含文件列表

      1-discuzTest.rar
      2-修改后的logindiscuz.jsp
      3-修改后的config.properties
      4-修改后的Discuz部署的文件
      5-官网下载的Discuz原包
      6-Windows下的xamp(PHP集成环境)