• nbcio-boot如何进行gitee第三方登录


    更多nbcio-boot功能请看演示系统

           gitee源代码地址

           后端代码: https://gitee.com/nbacheng/nbcio-boot

          前端代码:https://gitee.com/nbacheng/nbcio-vue.git

          在线演示(包括H5) : http://122.227.135.243:9888

    1、用户gitee授权登录后可以直接绑定相应的手机号进行直接登录。

    比如下面例子

    1. /**
    2. * gitee第三方绑定后直接通过admin用户返回token
    3. *
    4. * @param jsonObject
    5. * @return
    6. */
    7. @ApiOperation("gitee登录接口")
    8. @PostMapping("/bindingGitee")
    9. @ResponseBody
    10. public Result bindingGitee(@RequestBody JSONObject jsonObject) {
    11. Result result = new Result();
    12. //固定使用admin的手机号登录
    13. SysUser sysUser = sysUserService.getUserByPhone("13988888888");
    14. String token = saveToken(sysUser);
    15. result.setSuccess(true);
    16. result.setResult(token);
    17. return result;
    18. }

    2、建立一个通用的gitee操作类

    1. import java.io.IOException;
    2. import java.net.URISyntaxException;
    3. import org.apache.http.HttpEntity;
    4. import org.apache.http.HttpResponse;
    5. import org.apache.http.client.HttpClient;
    6. import org.apache.http.client.methods.HttpGet;
    7. import org.apache.http.client.methods.HttpPost;
    8. import org.apache.http.client.methods.HttpPut;
    9. import org.apache.http.client.utils.URIBuilder;
    10. import org.apache.http.impl.client.CloseableHttpClient;
    11. import org.apache.http.impl.client.HttpClients;
    12. import org.apache.http.util.EntityUtils;
    13. import org.springframework.stereotype.Component;
    14. import com.alibaba.fastjson.JSONArray;
    15. import com.alibaba.fastjson.JSONObject;
    16. @Component
    17. public class GiteeHttpClient {
    18. /**
    19. * 获取Access Token
    20. * post
    21. */
    22. public static JSONObject getAccessToken(String url) throws IOException {
    23. HttpClient client = HttpClients.createDefault();
    24. HttpPost httpPost = new HttpPost(url);
    25. // httpPost.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36");
    26. HttpResponse response = client.execute(httpPost);
    27. HttpEntity entity = response.getEntity();
    28. if (null != entity) {
    29. String result = EntityUtils.toString(entity, "UTF-8");
    30. return JSONObject.parseObject(result);
    31. }
    32. httpPost.releaseConnection();
    33. return null;
    34. }
    35. /**
    36. * 获取用户信息
    37. * get
    38. */
    39. public static JSONObject getUserInfo1(String url) throws IOException {
    40. JSONObject jsonObject = null;
    41. CloseableHttpClient client = HttpClients.createDefault();
    42. HttpGet httpGet = new HttpGet(url);
    43. httpGet.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36");
    44. HttpResponse response = client.execute(httpGet);
    45. HttpEntity entity = response.getEntity();
    46. if (entity != null) {
    47. String result = EntityUtils.toString(entity, "UTF-8");
    48. jsonObject = JSONObject.parseObject(result);
    49. }
    50. httpGet.releaseConnection();
    51. return jsonObject;
    52. }
    53. // https://gitee.com/api/v5/user
    54. /**
    55. * 获取授权用户的资料
    56. * gitee get方式获取用户信息
    57. */
    58. public static JSONObject getUserInfo(String token,String url) throws IOException, URISyntaxException {
    59. JSONObject jsonObject = null;
    60. CloseableHttpClient client = HttpClients.createDefault();
    61. URIBuilder builder = new URIBuilder(url);
    62. builder.setParameter("access_token", token);
    63. HttpGet httpGet = new HttpGet(builder.build());
    64. httpGet.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36");
    65. HttpResponse response = client.execute(httpGet);
    66. HttpEntity entity = response.getEntity();
    67. if (entity != null) {
    68. String result = EntityUtils.toString(entity, "UTF-8");
    69. jsonObject = JSONObject.parseObject(result);
    70. }
    71. httpGet.releaseConnection();
    72. return jsonObject;
    73. }
    74. public static JSONArray getArray(String token,String url) throws IOException, URISyntaxException {
    75. JSONArray jsonArray = null;
    76. CloseableHttpClient client = HttpClients.createDefault();
    77. URIBuilder builder = new URIBuilder(url);
    78. builder.setParameter("access_token", token);
    79. HttpGet httpGet = new HttpGet(builder.build());
    80. httpGet.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36");
    81. HttpResponse response = client.execute(httpGet);
    82. HttpEntity entity = response.getEntity();
    83. if (entity != null) {
    84. String result = EntityUtils.toString(entity, "UTF-8");
    85. jsonArray = JSONObject.parseArray(result);
    86. }
    87. httpGet.releaseConnection();
    88. return jsonArray;
    89. }
    90. public static JSONObject put(String token,String url,JSONObject json) throws IOException, URISyntaxException {
    91. JSONObject jsonObject = null;
    92. CloseableHttpClient client = HttpClients.createDefault();
    93. URIBuilder builder = new URIBuilder(url);
    94. builder.setParameter("access_token", token);
    95. json.keySet().forEach((k)->{
    96. builder.setParameter(k,json.getString(k));
    97. });
    98. HttpPut httpPut = new HttpPut(builder.build());
    99. httpPut.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36");
    100. HttpResponse response = client.execute(httpPut);
    101. HttpEntity entity = response.getEntity();
    102. if (entity != null) {
    103. String result = EntityUtils.toString(entity, "UTF-8");
    104. jsonObject = JSONObject.parseObject(result);
    105. }
    106. httpPut.releaseConnection();
    107. return jsonObject;
    108. }
    109. public static JSONObject post(String token,String url,JSONObject json) throws IOException, URISyntaxException {
    110. JSONObject jsonObject = null;
    111. CloseableHttpClient client = HttpClients.createDefault();
    112. URIBuilder builder = new URIBuilder(url);
    113. builder.setParameter("access_token", token);
    114. json.keySet().forEach((k)->{
    115. builder.setParameter(k,json.getString(k));
    116. });
    117. HttpPost httpPost = new HttpPost(builder.build());
    118. httpPost.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36");
    119. HttpResponse response = client.execute(httpPost);
    120. HttpEntity entity = response.getEntity();
    121. if (entity != null) {
    122. String result = EntityUtils.toString(entity, "UTF-8");
    123. jsonObject = JSONObject.parseObject(result);
    124. }
    125. httpPost.releaseConnection();
    126. return jsonObject;
    127. }
    128. }

    3、也可以考虑做一个类似下面的第三方gitee服务,如

    1. /**
    2. * 第三方(GITEE)登录服务
    3. */
    4. @Service
    5. public class ThirdLoginService {
    6. @Autowired
    7. public SysUserService userService;
    8. @Value("${vlife.gitee.client_id}")
    9. public String client_id;
    10. @Value("${vlife.gitee.redirect_uri}")
    11. public String redirect_uri;
    12. @Value("${vlife.gitee.client_secret}")
    13. public String client_secret;
    14. @Value("${vlife.email.from}")
    15. public String emailFrom;
    16. @Value("${vlife.email.pwd}")
    17. public String emailPwd;
    18. public Boolean openCheckCode(){
    19. if(StringUtils.isNotEmpty(emailFrom)&&StringUtils.isNotEmpty(emailPwd)) {
    20. return true;
    21. }else{
    22. return false;
    23. }
    24. }
    25. /**
    26. * 获得第三方账号用户token
    27. * @param code
    28. */
    29. public String thirdToken(String code,String from){
    30. String gitToken=null;
    31. try {
    32. JSONObject jsonObject= GiteeHttpClient.getAccessToken("https://gitee.com/oauth/token?" +
    33. "grant_type=authorization_code&code="+code+"&client_id="+client_id+"&redirect_uri="+redirect_uri+"&client_secret="+client_secret);
    34. gitToken=jsonObject.getString("access_token");
    35. }catch (Exception exception){
    36. exception.printStackTrace();
    37. }
    38. return gitToken;
    39. }
    40. /**
    41. * 获得第三方用户信息
    42. */
    43. public ThirdAccountDto account(String thirdToken, String from){
    44. ThirdAccountDto account=null;
    45. try {
    46. JSONObject userObj=GiteeHttpClient.getUserInfo(thirdToken,"https://gitee.com/api/v5/user");
    47. account=new ThirdAccountDto();
    48. account.setId(userObj.getString("id"));
    49. account.setName(userObj.getString("name"));
    50. account.setEmail(userObj.getString("email"));
    51. account.setUsername(userObj.getString("login"));
    52. account.setThirdToken(thirdToken);
    53. account.setAvatar(userObj.getString("avatar_url"));
    54. account.setFrom(from);
    55. }catch (Exception exception){
    56. exception.printStackTrace();
    57. }
    58. return account;
    59. }
    60. /**
    61. * 获得第三方用户信息
    62. */
    63. public String email(String token, String from){
    64. String email=null;
    65. try {
    66. JSONObject userObj=GiteeHttpClient.getArray(token,"https://gitee.com/api/v5/emails").getJSONObject(0);
    67. email= userObj.getString("email");
    68. }catch (Exception exception){
    69. exception.printStackTrace();
    70. }
    71. return email;
    72. }
    73. public SysUser createUser(ThirdAccountDto accountDto){
    74. SysUser user=new SysUser();
    75. // user.setSysOrgId(sysOrgId);
    76. user.setSysGroupId("super");
    77. user.setSysDeptId("4028b8818747df52018747dfdf780000");
    78. user.setState("1");
    79. // user.setUsername(accountDto.getUsername());
    80. user.setThirdId(accountDto.getId());
    81. user.setName(accountDto.getName());
    82. user.setEmail(accountDto.getEmail());
    83. user.setSource(accountDto.getFrom());
    84. user.setThirdToken(accountDto.getThirdToken());
    85. user.setAvatar(accountDto.getAvatar());
    86. return user;
    87. }
    88. /* 发送验证信息的邮件 */
    89. public String sendMail(String to,String code) {
    90. if( emailFrom==null|| emailPwd==null){
    91. return "邮件服务信息服务端未设置,不能发送邮件";
    92. }
    93. Properties props = new Properties();
    94. props.setProperty("mail.smtp.host", "smtp.163.com");
    95. props.put("mail.smtp.host", "smtp.163.com");
    96. props.put("mail.smtp.auth", "true");
    97. Session session = Session.getDefaultInstance(props);
    98. session.setDebug(true);
    99. MimeMessage message = new MimeMessage(session);
    100. try {
    101. message.setSentDate(new Date());
    102. SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
    103. message.setFrom(new InternetAddress(emailFrom));
    104. message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); // 加载收件人地址
    105. message.setSubject("低代码平台验证码","utf-8");
    106. Multipart multipart = new MimeMultipart(); // 向multipart对象中添加邮件的各个部分内容,包括文本内容和附件
    107. BodyPart contentPart = new MimeBodyPart(); // 设置邮件的文本内容
    108. String str = "

      尊敬的用户,您好!

      "
    109. + "

      欢迎您使用vlife低代码平台,您本次的注册码是 "

    110. + "" + code + ",10分钟之内有效,请尽快使用!

      "
    111. + "

    112. + "" + sdf.format(new Date()) + "";
    113. contentPart.setContent(str, "text/html;charset=utf-8");
    114. multipart.addBodyPart(contentPart);
    115. message.setContent(multipart);
    116. message.saveChanges(); // 保存变化
    117. Transport transport = session.getTransport("smtp"); // 连接服务器的邮箱
    118. transport.connect("smtp.163.com", emailFrom, emailPwd); // 把邮件发送出去
    119. transport.sendMessage(message, message.getAllRecipients());
    120. transport.close();
    121. } catch (MessagingException e) {
    122. e.printStackTrace();
    123. return "发送失败:"+e.getMessage();
    124. }
    125. return null;
    126. }
    127. }

  • 相关阅读:
    视觉信息处理与FPGA实现第八次作业——verilog实现亮度调节
    运营-用户分析
    【近似最近邻搜索】在茫茫点集中,怎么找到你的邻居
    《Mycat分布式数据库架构》之全局自增ID
    你应该知道的数仓安全:都是同名Schema惹的祸
    12月2日:thinkphp中的链式操作
    讲解LCD1602自定义字符原理
    记录Oracle rac 19C(19.15)补丁升级(OPatch 33803476)操作过程
    卷积神经网络创新点思考
    java汇美食电子商城计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
  • 原文地址:https://blog.csdn.net/qq_40032778/article/details/134035987