对接钉钉登陆步骤

背景

复制代码
之前事情较少的时候,帮公司写过一个系统,
这个系统的话主管有要求要对接钉钉登陆。
话不多说我们直接开干。

流程

先进入开发者平台点击开发者后台

没有组织的 我们先在手机上先创建一个组织

创建完成后,就可以看到这个组织了

创建应用

这里我们按照步骤创建一个应用

我们选择钉钉应用。 其他的大家可以自己摸索

创建好之后,点击蓝色的应用的地方

我们需要修改二个地方

分享设置

这里设置我们的回调地址,获取钉钉回调回来的code

安全设置

AppKey 和AppSecret

凭证和基础信息

这个需要看一下的,到时候后端需要使用的。

部分代码实现

java 复制代码
 /**
     * 跳转到登录页面 默认使用钉钉的
     */
    @RequestMapping(value = "/login", method = RequestMethod.GET)
    public String login(@RequestParam(value = "authCode",required = false)String authCode) {
        log.info("/login===>authCode==>>{}:",authCode );
        com.aliyun.dingtalkoauth2_1_0.Client client = null;
        try {
            if(!StringUtils.isEmpty(authCode)) {
                client = authClient();
                GetUserTokenRequest getUserTokenRequest = new GetUserTokenRequest()

                        //应用基础信息-应用信息的AppKey,请务必替换为开发的应用AppKey
                        .setClientId(dingDingProperties.getAppKey())

                        //应用基础信息-应用信息的AppSecret,,请务必替换为开发的应用AppSecret
                        .setClientSecret(dingDingProperties.getAppSecret())
                        .setCode(authCode)
                        .setGrantType("authorization_code");
                GetUserTokenResponse getUserTokenResponse = client.getUserToken(getUserTokenRequest);
                //获取用户个人token
                String accessToken = getUserTokenResponse.getBody().getAccessToken();
                GetUserResponseBody userInfo = getUserInfo(accessToken);
                Subject currentUser = ShiroKit.getSubject();
                String username = PinYinUtils.getPingYin(userInfo.getNick());
                EasyUsernameToken token = new EasyUsernameToken(username);

                currentUser.login(token);

                ShiroUser shiroUser = ShiroKit.getUser();
                if (shiroUser != null) {
                    super.getSession().setAttribute("shiroUser", shiroUser);
                    super.getSession().setAttribute("username", shiroUser.getAccount());
                    userService.setAvatar(shiroUser.getId(),userInfo.getAvatarUrl());
                    LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), HttpKit.getIp()));
                    ShiroKit.getSession().setAttribute("sessionFlag", true);
                    return REDIRECT + "/";
                }
            }
        } catch (Exception e) {
            log.error("error -->>msg==" +e.getMessage()+"==>>>"+e.getLocalizedMessage());
        }
 
        return "/login.html";
    }
  /**
     * 获取用户个人信息
     * @param accessToken
     * @return
     * @throws Exception
     */
    public GetUserResponseBody getUserInfo(String accessToken) throws Exception {
        com.aliyun.dingtalkcontact_1_0.Client client = contactClient();
        GetUserHeaders getUserHeaders = new GetUserHeaders();
        getUserHeaders.xAcsDingtalkAccessToken = accessToken;
        //获取用户个人信息
        return client.getUserWithOptions("me", getUserHeaders, new RuntimeOptions()).getBody();
    }


    public static com.aliyun.dingtalkoauth2_1_0.Client authClient() throws Exception {
        Config config = new Config();
        config.protocol = "https";
        config.regionId = "central";
        return new com.aliyun.dingtalkoauth2_1_0.Client(config);
    }
    

这里的代码的话,大家可以稍微看一下就可以了。 具体的情况的话 大家可以看钉钉的对接文档。

因为我使用的是旧版,目前已经出来了新版,但我还没有弄,为了不误导大家,大家看官方文档就可以了。

说明

钉钉对接的文档

如果又不懂的地方的话,可以留言。看到了我会回复的。

效果截图

相关推荐
Dovis(誓平步青云)3 分钟前
多个链接不等于多份证据,新闻核验看板怎样合并来源
java·服务器·前端·javascript·人工智能·pdf·电脑
旺仔Sec22 分钟前
2026年江西省职业院校技能大赛(中职组)应用软件系统开发赛项竞赛样题
java·应用软件系统开发
Dovis(誓平步青云)1 小时前
几个方案来回选不定?做一个随时切换的候选推荐页
android·java·服务器·开发语言·javascript·数据库·智能化
一条破秋裤1 小时前
Linux 线程同步:读写锁
java·linux·jvm
蜗牛互联网1 小时前
从Barclays扩大Claude部署看受监管软件工程的责任重分配
java·大数据·人工智能·后端·软件工程
天远API1 小时前
零信任架构实战:基于天远股权穿透构建自动化供应链授信穿透网关
java·人工智能·架构·自动化
最强小杰1 小时前
claude-opus-5.5 API 接入教程:anthropic-version 头、tools 定义、流式事件格式三个常见问题全部梳理,收藏备用
java·服务器·网络·ai
Cc.Y2 小时前
Java零基础入门:方法(函数)深度掌握
java·开发语言
宵时待雨2 小时前
linux笔记归纳25:多路转接epoll
linux·服务器·网络·c++
奋发向前wcx2 小时前
CSP-J复赛模拟赛1 王晨旭补题 2026.10.2
java·开发语言