JavaWeb应用下的第三方登录

最近的项目涉及到网站的第三方登录,总结了下发现有的地方配置还是很麻烦,所以把过程贴出来供大家参考。

百度开发者平台

对于一般的应用,使用百度开放服务平台这样的平台提供的社会化服务即可满足用户的日常使用需要。

首先打开:

百度开放服务平台

点击右上角的:管理控制台——开发者服务管理

进入开发者服务管理后可以新建自己的工程。

建立好后如下图所示:

百度会提供一个API key和一个密钥,这个一会儿会用,先打开显示更多——社会化服务。

首先进入回调地址设置,填写第三方登录成功后的action地址:

注意这里的地址不能写成localhost,必须是127.0.0.1。

填写完成后回到上一页,打开“PC端JS组件设置”。

这里可以自己设置下第三方登录的网站以及样式,设置好以后点击生成页面js代码。

<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("替换为登录成功后的url"),
      domid = "替换为登录组件的目标节点id",
      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%2Crenren&size=-1&button_type=4&client_id=ozLMOCp1zcUE25HbRrR0UKrl&view=embedded&t=" + t;
    script.src = src;
})();
</script>

生成代码后copy到项目的登录页面即可,在登录框下新建个div节点同js保持一致。最终样式如下:

下面为登陆成功后的action:

public class SocialLogin extends HttpServlet {

    @Override
    protected void service(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        HttpSession session = request.getSession();
        UserDao userDao = (UserDao) DaoFactory.getInstance("UserDao");
        UserInfoService userInfoService = (UserInfoService) ServiceFactory
                .getInstance("UserInfoService");
        // 接收code
        String code = request.getParameter("code");

        // 发送post请求,根据code获取token
        Map<String, String> map = new HashMap<String, String>();
        map.put("grant_type", "authorization_code");
        map.put("code", code);
        map.put("client_id", "ozLMOCp1zcUE25HbRrR0UKrl");
        map.put("client_secret", "a08tWipbc42UAj0ERipVNi1Npdq3Y5I8");
        map.put("redirect_uri", "http://127.0.0.1/LSZ/socialLogin");

        String json = HttpUtils.postForm(
                "https://openapi.baidu.com/social/oauth/2.0/token", map);
        // 令牌
        String access_token = JSONObject.fromObject(json).get("access_token")
                .toString();
        // 获取用户信息
        String json2 = HttpUtils
                .get("https://openapi.baidu.com/social/api/2.0/user/info?access_token="
                        + access_token + "&");

        // 用户名
        String username = JSONObject.fromObject(json2).get("username")
                .toString();
        System.out.println(username);

        // 唯一ID
        String social_uid = JSONObject.fromObject(json2).get("social_uid")
                .toString();
        System.out.println(social_uid);

        /*
         * Boolean flag = service.getUser(Integer.parseInt(social_uid));
         * System.out.println(flag);
         */
        //下面是该项目的注册及登录方法,可以选择无视
        // if (flag) {
        User user = new User();
        user.setUsername(username);
        UserService userService = (UserService) ServiceFactory
                .getInstance("UserService");
        try {
            Boolean isRegist = userDao.findUser(username);
            if (isRegist) {
                // 已注册直接登录
                user = userService.login(username, social_uid, 1);
                int userType = user.getUserState();
                int u_id = user.getU_id();
                UserInfo userInfo = userInfoService.ser_findInfo(u_id);
                session.setAttribute("userInfo", userInfo);
                session.setAttribute("u_id", u_id);
                session.setAttribute("username", username);
                session.setAttribute("userType", userType);
                response.sendRedirect("index.do");
            } else {
                // 未注册首先注册
                boolean isRegist2 = userService.regist(username, social_uid, 1);
                // 完成注册后默认该用户已经登录
                user = userService.login(username, social_uid, 1);
                int u_id = user.getU_id();
                boolean isIntro = true;
                // 通过u_id自动生成一个u_info的记录,只含有u_id和i_id
                boolean isInfo = userInfoService.ser_newUserInfo(u_id);
                // 再通过u_id获得这条记录
                UserInfo userInfo = userInfoService.ser_findInfo(u_id);
                if (isRegist2 && isInfo && (userInfo != null)) {
                    session.setAttribute("isIntro", isIntro);
                    session.setAttribute("userInfo", userInfo);
                    session.setAttribute("username", username);
                    session.setAttribute("u_id", u_id);
                    response.sendRedirect("index.do");
                }
            }

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        //
        // user.setSocial_uid(Integer.parseInt(social_uid));
        // service.saveUser(user);
        // System.out.println("保存用户信息成功");
        // } else {
        // User user = service.getUser2(social_uid);
        // System.out.println("读取用户信息成功");
        // }

    }

}

在第三方登录的时候会生成一个social_uid,唯一,用来验证用户,该social_uid可以存在用户表中单独一列,让用户登录后重新设置密码,也可以将该social_uid直接设置为密码,但以后登录时只能使用第三方。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-14 10:51:18

JavaWeb应用下的第三方登录的相关文章

android使用友盟实现第三方登录、分享以及微信回调无反应问题解决办法

        Leaning_wk每一次的进步都会拉近与成功的距离! 帐号设置退出   关闭 qq_15855289的博客 目录视图 摘要视图 订阅 异步赠书:Kotlin领衔10本好书      免费直播:AI时代,机器学习如何入门?      程序员8月书讯      每周荐书:Java Web.Python极客编程(评论送书) android使用友盟实现第三方登录.分享以及微信回调无反应问题解决办法 标签: android友盟第三方登录分享微信登录回调问题 2017-02-10 16:2

第三方登录接入-qq,weibo-java

开发之前 需求:网站接入qq,sina微博登录,本文最后付效果图: 说明:大部分网站本身是需要用户概念的,很多操作依附于用户,而qq或微博作为一种登录方式指向用户而已,我参考了一下其他网站的做法, 一般有如下两种做法: 1,强制绑定:用户第一次通过qq登录时必须与该网站账户绑定,也就是用户必须要先有一个此网站账户才能登录成功 2,互相独立,用户第一次通过qq登录时直接重新为用户注册一个账户,如以用户名为qq_123456直接注册一个账户,与其他账户无关: 站在用户角度考虑下,可能需要更多的选择性

实现QQ、微信、新浪微博和百度第三方登录(Android Studio)

前言: 对于大多数的APP都有第三方登录这个功能,自己也做过几次,最近又有一个新项目用到了第三方登录,所以特意总结了一下关于第三方登录的实现,并拿出来与大家一同分享: 各大开放平台注册账户获取AppKey和AppSecret Mob开放平台地址:http://www.mob.com/#/index QQ开放平台地址:http://open.qq.com/ 新浪微博开放平台地址:http://open.weibo.com/ 微信开放平台地址:https://open.weixin.qq.com/ 

IOS项目集成ShareSDK实现第三方登录、分享、关注等功能(转)

原文链接:http://blog.csdn.net/daleiwang/article/details/34081231 (1)官方下载ShareSDK iOS 2.8.8,地址:http://sharesdk.cn/ (2)根据实际情况,引入相关的库,参考官方文档. (3)在项目的AppDelegate中一般情况下有三个操作,第一是注册ShareSDK,第二是注册各个平台的账号,第三是关于微信等应用的回调处理. [objc] view plain copy print? // //  AppD

开放平台-web实现人人网第三方登录

应用场景 web应用通过人人网登录授权实现第三方登录. 操作步骤 1  注册成为人人网开放平台开发者 http://app.renren.com/developers/devinfo 2  准备一个可访问的域名,如dev.foo.com 3  创建网页应用,配置必要信息,其中包括根域名.图标信息 4  获取应用appID.appKey进行开发 登录流程 采用server-side方式实现登录授权,流程如下 流程描述 1  server端页面跳转到登录授权页面(Authorization code

开放平台-web实现QQ第三方登录

应用场景 web应用通过QQ登录授权实现第三方登录. 操作步骤 1  注册成为QQ互联平台开发者,http://connect.qq.com/ 2  准备一个可访问的域名,如dev.foo.com 3  创建网页应用,配置必要信息,其中包括域名以及回调地址: 其中域名需要验证,需确保对域名主机有足够的控制权限 4  获取应用appID.appKey进行开发 登录流程 开发平台的登录授权采取oauth2.0机制,这也是目前几乎所有互联网开放平台所采取的方式. 需更多了解oauth2.0可参考阮老师

Android 实现QQ、微信、新浪微博和百度第三方登录

前言: 对于大多数的APP都有第三方登录这个功能,自己也做过几次,最近又有一个新项目用到了第三方登录,所以特意总结了一下关于第三方登录的实现,并拿出来与大家一同分享: 各大开放平台注册账户获取AppKey和AppSecret Mob开放平台地址:http://www.mob.com/#/index QQ开放平台地址:http://open.qq.com/ 新浪微博开放平台地址:http://open.weibo.com/ 微信开放平台地址:https://open.weixin.qq.com/ 

iOS:IOS项目集成ShareSDK实现第三方登录、分享、关注等功能。

原文链接:http://blog.csdn.net/daleiwang/article/details/34081231 (3)在项目的AppDelegate中一般情况下有三个操作,第一是注册ShareSDK,第二是注册各个平台的账号,第三是关于微信等应用的回调处理. // // AppDelegate.m // ShareSDKTest // // Created by wangdalei on . // Copyright (c). All rights reserved. // #impo

无处不在,详解iOS集成第三方登录(SSO授权登录&lt;无需密码&gt;)

1.前言 不多说,第三登录无处不在!必备技能,今天以新浪微博为例. 这是上次写的iOS第三方社交分享:http://www.cnblogs.com/qingche/p/3727559.html 可以和今天的一起集成使用. 2.集成前的准备工作 2.1.去ShareSDK(现为Mob)注册帐号,下载SDK,然后添加自己的应用后得到AppKey 下载地址:http://sharesdk.cn/Download 2.2.申请第三方登录的Appkey 例如: 新浪微博.腾讯微博.QQ.微信.豆瓣应用.人