利用百度开发者中心完成的 第三方登录

因为 开发者中心 不再提供服务

所以 只能用别人写的 固定的 项目名称  和  clietid 还有一些注册者 注册时 固定的东西

比如前台必须 这样写

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    </head>
    <body>
    <H1>欢迎光临</H1>
    <div>
    请您使用第三方平台账号登陆:
    <span id="login"></span>
    </div>
  


<script type="text/javascript" id="bd_soc_login_boot"></script>
<script type="text/javascript">
(function(){
  var t = new Date().getTime(),
      script = document.getElementById("bd_soc_login_boot"),
      redirect_uri = encodeURIComponent("http://127.0.0.1/appstore/user/userLogin.do"),
      domid = "login",
      src = "http://openapi.baidu.com/social/oauth/2.0/connect/login?redirect_uri=" + redirect_uri + "&domid=" + domid + "&client_type=web&response_type=code&media_types=sinaweibo%2Cqqdenglu%2Cbaidu%2Cqqweibo%2Ckaixin%2Crenren&size=-1&button_type=4&client_id=m6fO55eQNQaU4MmSR8xOSqj7&view=embedded&t=" + t;
    script.src = src;
})();
</script>

    </body>
</html>


然后 后台

@RequestMapping("userLogin")
    public String userLogin(HttpServletRequest request,Model model){
        //System.out.println("获取第三方信息");
        //获取百度社会化服务传递的code
        String code = request.getParameter("code");//应该是用 哪个第三方登录
        //获取token url
        String url="https://openapi.baidu.com/social/oauth/2.0/token";
       //social redirect_uri registered in developer.baidu.com  //我改了
        String redirect_uri =
              "http://127.0.0.1/appstore/user/userLogin.do";
        
        Map<String, String> paramsMap =new HashMap<String, String>();
        paramsMap.put("grant_type", "authorization_code");
        paramsMap.put("client_id", "m6fO55eQNQaU4MmSR8xOSqj7");
        paramsMap.put("client_secret","TOo2xAASovK4msjc1unmu7PqyxBc1gvV");
        paramsMap.put("redirect_uri", redirect_uri);
        paramsMap.put("code", code);
        
        //获取令牌token相关信息  信息格式如下
        /*{"expires_in":2592000,"access_token":"51.5cede4ef93fcab28a58f6e7d07f09b3e.2592000.1483158607.2852507892-8334948",
        "session_secret":"4ef98f7defb795f1b1441e3b89aa49e5","session_key":"8aKDCM\/GXzrZ0r1+MKloY9ll1MBYQIiczgJvNetVfKSL1t++BUQ1J4xP+JA+8Hjvt1HzDhxFPd+xxYZDAL2qDzOeV7Uvo+Uedg==",
        "name":"UU\u6c34\u74f6UU","media_uid":"4220861533","social_uid":2852507892,"media_type":"baidu"}*/
        String returnJson =HttpUtil.post(url, paramsMap);//工具类
        //获取 access_token 还有 social_uid 并放入 session 备用
        String access_token  =
                JSONObject.fromObject(returnJson).get("access_token").toString();
        String social_uid =
                JSONObject.fromObject(returnJson).get("social_uid").toString();
        request.getSession().setAttribute("access_token", access_token);
        
        //看看是否绑定
        url = "https://openapi.baidu.com/social/api/2.0/user/bind_status";
        paramsMap.clear();
        paramsMap.put("access_token", access_token);
        String bind = HttpUtil.post(url, paramsMap);
        Integer bdInfo =
            (Integer) JSONObject.fromObject(bind).get("error_code");
        
        System.out.println(bind);
        
        if(bdInfo!=null){
            //!=null就说明 是 152 所以 就是 没绑定
            System.out.println("去绑定");
            String socialName =
                JSONObject.fromObject(returnJson).get("name").toString();
            model.addAttribute("userName",socialName);
            model.addAttribute("social_uid",social_uid);
            return "user/complete_userInfo";
            
        }else{
            //为 null 说明绑定了 因为 返回的 json里 没有 error_code 这个键
            User user = us.checkSocial(social_uid);
            request.getSession().setAttribute("user",user);
            System.out.println("回主页");
            return "redirect:/index.jsp";
        }
        //social_uid 每个人不一样 但每个人的是固定的
    }

//绑定的同时 把信息存入自己数据库

@RequestMapping("saveUser")
    @ResponseBody
    public Integer saveUser(User user,HttpServletRequest request){
        String access_token = null;
        Object obj =
            request.getSession().getAttribute("access_token");
        if(obj!=null){
            access_token = obj.toString();
        }
        try {
            us.saveUser(user,access_token);
        } catch (Exception e) {
            e.printStackTrace();
            return 0;
        }
        return user.getId();
    }


@Override
    public void saveUser(User user,String access_token) throws Exception{
        um.saveUser(user);
        if(user.getSocial_uid()!=null){
            String url = "https://openapi.baidu.com/social/api/2.0/user/bind";
            Map<String, String> paramsMap = new HashMap<String, String>();
            
            String uid = user.getId().toString();
            String uid_sign = Md5Util.getMD5String(uid+"TOo2xAASovK4msjc1unmu7PqyxBc1gvV");
            System.out.println(uid_sign);
            
            paramsMap.put("access_token",access_token);
            paramsMap.put("uid",uid);
            paramsMap.put("uid_sign",uid_sign);
            
            String resultjson = HttpUtil.post(url, paramsMap);
            
            Integer result =
                (Integer) JSONObject.fromObject(resultjson).get("result");
            //System.out.println(result);
            if(result==0){
                throw new Exception();
            }
        }
    }

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值