zoukankan      html  css  js  c++  java
  • java UCnter 单点登录 对接。

     前提 PHP项目要部署成功。论坛能正常访问。

    先配置 应用

    1.是论坛应用

    4.是java服务器,也就是你java登录的项目。 必须通信成功。

    。主应用IP就是你java项目的入口。 例如:http://192.168.1.100:8080 注意不要写成 http://192.168.1.100:8080/ 后面不要加斜杠。

    进 bbs/admin.php 

    设置好,激活方式。

    论坛的配置完了。再配置java项目。

    java 项目 resourse 也就是类路径下面。会有一个config.properties 文件 。后面。有说明为什么要有这个。

    这个配置自己论坛里面的信息。

    这个必须放在java项目里面。 

    web.xml 加入

    https://code.google.com/p/discuz-ucenter-api-for-java/  项目中的文件。api.ucenter config.perproties  别人整的开源项目。拷贝就行。

    配置工作准备完毕

    实现java登录 同步到bbs论坛。

    java代码:

    在java登录通过之后。

    登录:

    UcSynLogin ucSynLogin = new UcSynLogin();

    ucSynLogin.getUcSynLogin(map,password,User);

    注册:

    UcSynReg reg = new UcSynReg();  

    reg.ucSynReg(map,password,user);

    代码:

    /**
     * @author zhourong
     * @date 2018/9/27
     */
    public class UcSynReg extends BaseUcSynLogin {
        private Logger log = LoggerFactory.getLogger(UcSynReg.class);
        private UcSynLoginService ucSynLoginService = new UcSynLoingServiceImpl();
    
        public void ucSynReg(Map map, String password, User loginUser){
            String userName = loginUser.getUserName();
            String email = loginUser.getEmail();
            String loginUrl = null ;
            log.info("用户信息:"+loginUser);
            log.info("前端返回信息:"+map);
            log.info("密码:"+password);
            if (loginUser == null ){
                log.info("用户为空");
                ucSynLoginService.setMap(map,loginUrl,loginUser);
                return ;
            }
            if(StringUtils.isBlank(email)){
                log.info("邮箱为空");
                ucSynLoginService.setMap(map,loginUrl,loginUser);
                return ;
            }
            String userId = ucSynLoginService.getSynUserReg(userName,password,email,client);
            if(StringUtils.isEmpty(userId) || Integer.parseInt(userId) < 1){
                ucSynLoginService.setMap(map,loginUrl,loginUser);
                return ;
            }
            loginUrl = ucSynLoginService.getSynLoginUrl(userId,client);
            log.info("同步登录返回链接:"+loginUrl);
            ucSynLoginService.setMap(map,loginUrl,loginUser);
        }
    UcSynReg(注册并登录同步)
    /**
     * @author zhourong
     * @date 2018/9/27
     */
    public class UcSynLogin extends BaseUcSynLogin {
    
        private Logger log = LoggerFactory.getLogger(UcSynLogin.class);
    
        private static  final String ZERO = "0";
    
        private UcSynLoginService ucSynLoginService = new UcSynLoingServiceImpl();
    
        /**
         *  登录
         */
    
        public void getUcSynLogin( Map map, String password,User loginUser){
            String loginUrl = null;
            String userName = loginUser.getUserName();
    
            String userId = null;
            log.info("入参--->USER:"+loginUser.toString()+"Map:"+map);
            Long start = System.currentTimeMillis();
            if (loginUser == null ){
                log.info("用户为空");
                ucSynLoginService.setMap(map,loginUrl,loginUser);
                return ;
            }
            String email = loginUser.getEmail();
            if(StringUtils.isBlank(email)){
                log.info("邮箱为空");
                ucSynLoginService.setMap(map,loginUrl,loginUser);
                return ;
            }
            String synUser = ucSynLoginService.getSynUser(userName,client);
            if(StringUtils.isEmpty(synUser) || ZERO.equals(synUser)){
                userId = ucSynLoginService.getSynUserReg(userName,password,email,client);
                if(StringUtils.isEmpty(userId) || Integer.parseInt(userId) < 1){
                    ucSynLoginService.setMap(map,loginUrl,loginUser);
                    return ;
                }
                loginUrl = ucSynLoginService.getSynLoginUrl(userId,client);
                log.info("同步登录返回链接:"+loginUrl);
            } else {
                LinkedList<String> result = new LinkedList<String>();
                result = XMLHelper.uc_unserialize(synUser);
                if(CollectionUtils.isEmpty(result)){
                    ucSynLoginService.setMap(map,loginUrl,loginUser);
                    return ;
                }
                userId = result.get(0);
                log.info("用户ID:"+result.get(0));
                log.info("用户名:"+result.get(1));
                log.info("用户邮箱:"+result.get(2));
                loginUrl = ucSynLoginService.getSynLoginUrl(userId,client);
                log.info("同步登录返回链接:"+loginUrl);
            }
            ucSynLoginService.setMap(map,loginUrl,loginUser);
            Long end = System.currentTimeMillis();
            Long time = end - start ;
            log.info("同步登录访问时间:"+time);
            log.info("同步返回结果:"+map);
            return ;
        }
    
    }
    UcSynLogin(同步登录)
    /**
     * @author zhourong
     * @date 2018/9/27
     */
    public class UcSynLoingServiceImpl implements UcSynLoginService {
    
        private Logger log = LoggerFactory.getLogger(UcSynLoingServiceImpl.class);
    
        @Override
        public String getSynLoginUrl(String userId,Client client ){
    
            try{
                String loginUrl  = client.uc_user_synlogin(Integer.parseInt(userId));
                log.info("同步登录链接:"+loginUrl);
                return loginUrl;
            } catch (Exception e) {
                log.error("获取同步登录信息错误:"+e.getMessage());
            }
            return null;
        }
    
        @Override
        public String getSynUser(String userName,Client client){
            try{
                String userXml = client.uc_get_user(userName,0);
                log.info("获取同步用户信息:"+userXml);
                return userXml;
            } catch (Exception e) {
                log.error("获取同步用户信息失败:"+e.getMessage());
            }
            return null ;
        }
    
        @Override
        public String getSynUserReg(String userName,String password,String email,Client client){
            try{
                String userId = client.uc_user_register(userName,password,email);
                log.info("获取用户ID:"+userId);
                return userId;
            } catch (Exception e){
                log.error("获取同步注册信息失败:"+e.getMessage());
            }
            return null;
        }
    
        @Override
        public void setMap(Map map ,String loginUrl,User user){
            log.info("同步链接:"+loginUrl);
            log.info("email:"+user.getEmail());
            map.put("loginUrl",loginUrl);
            map.put("email",user.getEmail());
            return ;
        }
    }
    登录,注册,获取用户信息

    同步之后。会返回一段js代码。

    <script type="text/javascript" src="http://bss/api/uc.php?time=1538017525&code=4f71%2BluBYfNyi8rZSREDp9UDMb%2BNAuDfnkmR1kpqMOeT0ENE7ZNBaY5SGVJVqkBPvotrWCFo7Vq4R0D4XJ9z2LCh0Za8XmRL2sUNVZFYWf3kXqGRDPENLBGHrK52GngCgjoDDoRxzfK7%2FYAAi525hGJWGhs4V30en58yaz7jUVV5DQ" reload="1"></script>



    执行一下js代码 。然后访问一下bbs就行了。

    /uc_client/client.php
    HTTPS: 访问 要采用数据库方式 。同时论坛退出会报301
    解决方式:
    https://www.itsvse.com/forum.php?mod=viewthread&tid=4798

     原:$ port =!empty($ matches ['port'])?$ matches ['port']:80;
    改:$ port =!empty($ matches ['port'])?$ matches ['port'] :( $ matches ['scheme'] =='https'?443:80);

    原:if(!$ fp = @fsocketopen(($ ip?$ ip:$ host),$ port,$ errno,$ errstr,$ timeout)){
    改:if(!$ fp = @fsocketopen(($ scheme =='https'?'ssl':$ scheme)。'://'。($ scheme =='https'?$ host:($ ip?$ ip :$ host)),$ port,$ errno,$ errstr,$ timeout)){
  • 相关阅读:
    Android基础之使用Fragment控制切换多个页面
    如何进行fragment中的来回切换?
    【Android】保存Fragment切换状态
    ViewPager+Fragment的结合使用,实现QQ界面的理解
    android 写文件权限
    Android文件操作
    [转]Android读写文件
    【275】◀▶ Python 控制语句说明
    【274】Python 相关问题
    【273】利用ArcPy建立处理数据的脚本
  • 原文地址:https://www.cnblogs.com/1-Admin/p/9715420.html
Copyright © 2011-2022 走看看