springboot集成teams的方法是什么
发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,本篇内容主要讲解"springboot集成teams的方法是什么",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"springboot集成teams的方法是什
千家信息网最后更新 2025年01月19日springboot集成teams的方法是什么
本篇内容主要讲解"springboot集成teams的方法是什么",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"springboot集成teams的方法是什么"吧!
添加依赖
com.microsoft.graph microsoft-graph 2.3.2 com.microsoft.graph microsoft-graph-core 1.0.5 com.microsoft.graph microsoft-graph-auth 0.3.0-SNAPSHOT com.microsoft.azure msal4j 1.0.0
业务逻辑层
package com.tg.admin.service; import com.tg.admin.utils.CommonResult;import java.util.Map;/** * 用户信息 * * @author summer.chou * @date 2020/11/26 */public interface SplGraphService { /** * 获取token(自动刷新) * * @return token */ String getToken(); * 获取用户所属团队 * @return 结果 CommonResult
业务逻辑实现
package com.tg.admin.service.impl; import com.alibaba.fastjson.JSONArray;import com.alibaba.fastjson.JSONObject;import com.microsoft.graph.models.extensions.IGraphServiceClient;import com.microsoft.graph.requests.extensions.GraphServiceClient;import com.tg.admin.service.ChannelUserLogService;import com.tg.admin.service.SplGraphService;import com.tg.admin.utils.*;import lombok.extern.slf4j.Slf4j;import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.Lazy;import org.springframework.http.HttpHeaders;import org.springframework.http.MediaType;import org.springframework.stereotype.Service;import org.springframework.web.client.RestTemplate;import java.util.HashMap;import java.util.List;import java.util.Map;/** * teams Graph模块 第三方接口调用封装 * * @author summer.chou * @date 2020/12/30 */@Service@Slf4jpublic class SplGraphServiceImpl implements SplGraphService { @Value("#{'${teams.graph.scopes}'.split(',')}") private Listscopes; @Value("${teams.graph.clientId}") private String clientId; @Value("${teams.graph.team.url}") private String teamsUrl; @Value("${teams.graph.channel.url}") private String channelUrl; @Value("${teams.graph.add.channel.url}") private String addChannelUrl; @Value("${teams.graph.ms.url}") private String msUrl; @Value("${teams.graph.member.url}") private String memberUrl; @Value("${teams.graph.add.channel.members.url}") private String addChannelMembersUrl; @Value("${teams.graph.account}") private String account; @Value("${teams.graph.password}") private String password; private RedisUtil redisUtil; private RestTemplate restTemplate; private ChannelUserLogService channelUserLogService; public SplGraphServiceImpl(RestTemplate restTemplate, RedisUtil redisUtil, @Lazy ChannelUserLogService channelUserLogService) { this.restTemplate = restTemplate; this.redisUtil = redisUtil; this.channelUserLogService = channelUserLogService; } @Override public String getToken() { Object token = redisUtil.get(Constants.ADMIN_TOKEN_KEY + account); try { if (token == null) { MyAuthenticationProvider authProvider = new MyAuthenticationProvider(clientId, scopes, account, password); IGraphServiceClient graphClient = GraphServiceClient.builder().authenticationProvider(authProvider).buildClient(); graphClient.me().buildRequest().get(); token = authProvider.getToken(); redisUtil.set(Constants.ADMIN_TOKEN_KEY + account, token, Constants.TOKEN_EXPIRES_TIME); } } catch (Exception e) { log.info("获取teams-graph,获取token接口异常", e); } return token.toString(); public CommonResult > getTeamsInfo() { JSONArray value = null; Map result = new HashMap<>(); JSONObject jsonObject = new JSONObject(); log.info("调用temas获取团队信息:teamsUrl{}", teamsUrl); //设置请求头 HttpHeaders headers = new HttpHeaders(); headers.set("Authorization", getToken()); headers.setContentType(MediaType.APPLICATION_JSON_UTF8); jsonObject = RestTemplateUtils.requestByGet(teamsUrl, null, restTemplate, headers); log.info("返回值:jsonObject:{}", jsonObject.toJSONString()); value = jsonObject.getJSONArray("value"); result.put("value", value); e.printStackTrace(); return CommonResult.ok(result); public CommonResult > getChannel(String teamId) { JSONArray array = null; String url = channelUrl.replace("{team-id}", teamId); log.info("调用teams获取用户渠道url:{}", url); jsonObject = RestTemplateUtils.requestByGet(url, null, restTemplate, headers); log.info("返回结果:jsonObject:{}", jsonObject.toJSONString()); array = jsonObject.getJSONArray("value"); result.put("value", array); public CommonResult > getMember(String teamsId, String channelId) { String url = memberUrl.replace("{team-id}", teamsId).replace("{channel-id}", channelId); log.info("调用teams获取渠道成员:url:{}", url); public CommonResult > sendMs(String content, String teamId, String channelId) { String url = msUrl.replace("{team-id}", teamId).replace("{channel-id}", channelId); log.info("调用teams发送消息:url:{}", url); Map map = new HashMap (); Map body = new HashMap<>(); map.put("content", content); map.put("contentType", "html"); body.put("body", map); jsonObject = RestTemplateUtils.requestByPost(url, body, restTemplate, headers); log.info("返回结果:jsonObject:{}", jsonObject.toJSONString()); return CommonResult.ok(); public CommonResult > addChannel(String displayName, String description, String teamId) { String url = addChannelUrl.replace("{id}", teamId); log.info("调用teams添加渠道:url:{}", url); map.put("displayName", displayName); map.put("description", description); jsonObject = RestTemplateUtils.requestByPost(url, map, restTemplate, headers); if (jsonObject != null) { result.put("id", jsonObject.getString("id")); public CommonResult > addMembers(String teamId, String channelId, String userNum) { String url = addChannelMembersUrl.replace("{team-id}", teamId).replace("{channel-id}", channelId); log.info("调用teams添加成员:url:{}", url); map.put("@odata.type", "#microsoft.graph.aadUserConversationMember"); JSONArray roles = new JSONArray(); roles.add("owner"); map.put("roles", roles);}
RestTemplateUtils 工具类
package com.tg.admin.utils; import com.alibaba.fastjson.JSONObject;import org.springframework.http.HttpEntity;import org.springframework.http.HttpHeaders;import org.springframework.http.HttpMethod;import org.springframework.http.ResponseEntity;import org.springframework.stereotype.Component;import org.springframework.util.MultiValueMap;import org.springframework.web.client.RestTemplate;import org.springframework.web.util.UriComponentsBuilder; import java.util.HashMap;import java.util.Map; /** * RestTemplateUtils工具类 * * @author summer.chou * @date 2020/11/26 */@Componentpublic class RestTemplateUtils { /** * 根据get方式请求接口(复合类型get请求,支持所有get请求) * * @param url 请求路劲 * @param map 请求参数 无传null * @param restTemplate restTemplate对象 * @return json */ public static JSONObject requestByGet(String url, HashMapmap, RestTemplate restTemplate, HttpHeaders headers) { // header填充 HttpEntity > request = new HttpEntity(null, headers); UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(url); //ResponseEntity responseEntity; ResponseEntity responseEntity; //如果存在參數 if (map != null) { for (Map.Entry e : map.entrySet()) { //构建查询参数 builder.queryParam(e.getKey(), e.getValue()); } //拼接好参数后的URl//test.com/url?param1={param1}¶m2={param2}; String reallyUrl = builder.build().toString(); responseEntity = restTemplate.exchange(reallyUrl, HttpMethod.GET, request, JSONObject.class); } else { responseEntity = restTemplate.exchange(url, HttpMethod.GET, request, JSONObject.class); } return responseEntity.getBody(); } /** * 根据Post方式请求接口(复合类型,post支持所有json格式传参请求post请求) * * @param url 请求路径 * @param map 请求参数(无参数传null) * @param restTemplate restTemplate对象 * @return json */ public static JSONObject requestByPost(String url, Map map, RestTemplate restTemplate, HttpHeaders headers) { // header填充,map填充 HttpEntity > request = new HttpEntity >(map, headers); ResponseEntity entity = restTemplate.postForEntity(url, request, JSONObject.class); return entity.getBody(); } }
测试接口
package com.tg.admin.controller; import com.tg.admin.service.SplGraphService;import com.tg.admin.utils.CommonResult;import io.swagger.annotations.Api;import io.swagger.annotations.ApiImplicitParam;import io.swagger.annotations.ApiImplicitParams;import io.swagger.annotations.ApiOperation;import lombok.extern.slf4j.Slf4j;import org.springframework.cloud.context.config.annotation.RefreshScope;import org.springframework.web.bind.annotation.*;@Api(description = "teams-graph模块(第三方测试接口)")@RestController@RequestMapping("/graph")@RefreshScope@Slf4j@Deprecated //添加过期注解,接口保留方便后期异常排查public class GraphController { private SplGraphService tgService; public GraphController(SplGraphService tgService) { this.tgService = tgService; } @ApiOperation("获取所属团队信息") @GetMapping("/getTeamsInfo") public CommonResult getTeamsInfo() { return tgService.getTeamsInfo(); @ApiOperation("获取token") @GetMapping("/getToken") public CommonResult getToken() { return CommonResult.ok(tgService.getToken()); @ApiOperation("获取用户所属渠道") @ApiImplicitParams({ @ApiImplicitParam(name = "teamId", value = "团队Id", dataType = "string", required = true) }) @GetMapping("/getChannel") public CommonResult getChannel(@RequestParam(value = "teamId") String teamId) { return tgService.getChannel(teamId); @ApiOperation("获取渠道下的成员") @ApiImplicitParam(name = "teamId", value = "团队Id", dataType = "string", required = true), @ApiImplicitParam(name = "channelId", value = "渠道Id", dataType = "string", required = true) @GetMapping("/getMember") public CommonResult getMember(@RequestParam(value = "teamId") String teamId, @RequestParam(value = "channelId") String channelId) { return tgService.getMember(teamId, channelId); @ApiOperation("创建团队下的渠道(备用接口)") @ApiImplicitParam(name = "displayName", value = "渠道名称", dataType = "string", required = true), @ApiImplicitParam(name = "description", value = "渠道备注", dataType = "string", required = true) @PostMapping("/addChannel") public CommonResult addChannel(@RequestParam(value = "teamId") String teamId, @RequestParam(value = "displayName") String displayName, @RequestParam(value = "description") String description ) { return tgService.addChannel(displayName, description, teamId); @ApiOperation("向渠道里面添加成员(备用接口)") @ApiImplicitParam(name = "channelId", value = "渠道ID", dataType = "string", required = true), @ApiImplicitParam(name = "userNum", value = "用户Id", dataType = "string", required = true) @PostMapping("/addMembers") public CommonResult addMembers(@RequestParam(value = "teamId") String teamId, @RequestParam(value = "channelId") String channelId, @RequestParam(value = "userNum") String userNum return tgService.addMembers(teamId, channelId, userNum); @ApiOperation("通过teamId,channelId发送消息") @PostMapping("/sendMs") @ApiImplicitParam(name = "content", value = "内容", dataType = "string", required = true), public CommonResult sendMs(@RequestParam(value = "teamId") String teamId, @RequestParam(value = "content") String content, @RequestParam(value = "channelId") String channelId) { return tgService.sendMs(content, teamId, channelId);}
yml 配置
teams: graph: #微软master账号,密码 account: 管理员账号 password: 管理员密码 add: channel: members: url: https://graph.microsoft.com/v1.0/teams/{team-id}/channels/{channel-id}/members url: https://graph.microsoft.com/v1.0/teams/{id}/channels channel: url: https://graph.microsoft.com/v1.0/teams/{team-id}/channels clientId: e730901a-8bf3-472b-93dd-afe79713bc5b member: url: https://graph.microsoft.com/v1.0/teams/{team-id}/channels/{channel-id}/members ms: url: https://graph.microsoft.com/v1.0/teams/{team-id}/channels/{channel-id}/messages scopes: Group.Read.All,User.Read team: url: https://graph.microsoft.com/v1.0/me/joinedTeams
到此,相信大家对"springboot集成teams的方法是什么"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
渠道
团队
接口
用户
参数
成员
方法
信息
内容
所属
消息
名称
结果
业务
备注
密码
对象
工具
方式
模块
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
湖南乐悦互联网科技有限公司
火灾报警网络技术
网络安全的主要内容包括哪方面
网络安全宣传周安全贴士
客户管理软件开发
氧气网络技术武汉公司
网络安全3分钟小剧本
网络技术如何改善生活的
服务器繁忙(2103)
省事业单位 软件开发
数据库中权限
服务器后面的网口都是什么
安卓软件开发体会
软件开发名词
网络安全创客汇
巴可服务器
矿产资源数据库怎么编辑
上海潮流软件开发参考价格
银川软件开发规范
奉贤区网络技术服务维护方法
河南质量工程职业学院网络技术
台湾的学术数据库有哪些
专业数据库备份技术原理
沧州青县网络技术
杭州游卡网络技术公司怎么样
qt里面怎么使用数据库
怎样控制服务器安全组
用c 连接数据库做用户登录
sql数据库降 示本
广东惠普服务器虚拟化建设服务器