更多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授权登录后可以直接绑定相应的手机号进行直接登录。
比如下面例子
/*** gitee第三方绑定后直接通过admin用户返回token** @param jsonObject* @return*/@ApiOperation("gitee登录接口")@PostMapping("/bindingGitee")@ResponseBodypublic Result<String> bindingGitee(@RequestBody JSONObject jsonObject) {Result<String> result = new Result<String>();//固定使用admin的手机号登录SysUser sysUser = sysUserService.getUserByPhone("13988888888");String token = saveToken(sysUser);result.setSuccess(true);result.setResult(token);return result;}
2、建立一个通用的gitee操作类
import java.io.IOException;
import java.net.URISyntaxException;import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.springframework.stereotype.Component;import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;@Component
public class GiteeHttpClient {/*** 获取Access Token* post*/public static JSONObject getAccessToken(String url) throws IOException {HttpClient client = HttpClients.createDefault();HttpPost httpPost = new HttpPost(url);
// 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");HttpResponse response = client.execute(httpPost);HttpEntity entity = response.getEntity();if (null != entity) {String result = EntityUtils.toString(entity, "UTF-8");return JSONObject.parseObject(result);}httpPost.releaseConnection();return null;}/*** 获取用户信息* get*/public static JSONObject getUserInfo1(String url) throws IOException {JSONObject jsonObject = null;CloseableHttpClient client = HttpClients.createDefault();HttpGet httpGet = new HttpGet(url);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");HttpResponse response = client.execute(httpGet);HttpEntity entity = response.getEntity();if (entity != null) {String result = EntityUtils.toString(entity, "UTF-8");jsonObject = JSONObject.parseObject(result);}httpGet.releaseConnection();return jsonObject;}// https://gitee.com/api/v5/user/*** 获取授权用户的资料* gitee get方式获取用户信息*/public static JSONObject getUserInfo(String token,String url) throws IOException, URISyntaxException {JSONObject jsonObject = null;CloseableHttpClient client = HttpClients.createDefault();URIBuilder builder = new URIBuilder(url);builder.setParameter("access_token", token);HttpGet httpGet = new HttpGet(builder.build());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");HttpResponse response = client.execute(httpGet);HttpEntity entity = response.getEntity();if (entity != null) {String result = EntityUtils.toString(entity, "UTF-8");jsonObject = JSONObject.parseObject(result);}httpGet.releaseConnection();return jsonObject;}public static JSONArray getArray(String token,String url) throws IOException, URISyntaxException {JSONArray jsonArray = null;CloseableHttpClient client = HttpClients.createDefault();URIBuilder builder = new URIBuilder(url);builder.setParameter("access_token", token);HttpGet httpGet = new HttpGet(builder.build());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");HttpResponse response = client.execute(httpGet);HttpEntity entity = response.getEntity();if (entity != null) {String result = EntityUtils.toString(entity, "UTF-8");jsonArray = JSONObject.parseArray(result);}httpGet.releaseConnection();return jsonArray;}public static JSONObject put(String token,String url,JSONObject json) throws IOException, URISyntaxException {JSONObject jsonObject = null;CloseableHttpClient client = HttpClients.createDefault();URIBuilder builder = new URIBuilder(url);builder.setParameter("access_token", token);json.keySet().forEach((k)->{builder.setParameter(k,json.getString(k));});HttpPut httpPut = new HttpPut(builder.build());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");HttpResponse response = client.execute(httpPut);HttpEntity entity = response.getEntity();if (entity != null) {String result = EntityUtils.toString(entity, "UTF-8");jsonObject = JSONObject.parseObject(result);}httpPut.releaseConnection();return jsonObject;}public static JSONObject post(String token,String url,JSONObject json) throws IOException, URISyntaxException {JSONObject jsonObject = null;CloseableHttpClient client = HttpClients.createDefault();URIBuilder builder = new URIBuilder(url);builder.setParameter("access_token", token);json.keySet().forEach((k)->{builder.setParameter(k,json.getString(k));});HttpPost httpPost = new HttpPost(builder.build());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");HttpResponse response = client.execute(httpPost);HttpEntity entity = response.getEntity();if (entity != null) {String result = EntityUtils.toString(entity, "UTF-8");jsonObject = JSONObject.parseObject(result);}httpPost.releaseConnection();return jsonObject;}
}
3、也可以考虑做一个类似下面的第三方gitee服务,如
/*** 第三方(GITEE)登录服务*/
@Service
public class ThirdLoginService {@Autowiredpublic SysUserService userService;@Value("${vlife.gitee.client_id}")public String client_id;@Value("${vlife.gitee.redirect_uri}")public String redirect_uri;@Value("${vlife.gitee.client_secret}")public String client_secret;@Value("${vlife.email.from}")public String emailFrom;@Value("${vlife.email.pwd}")public String emailPwd;public Boolean openCheckCode(){if(StringUtils.isNotEmpty(emailFrom)&&StringUtils.isNotEmpty(emailPwd)) {return true;}else{return false;}}/*** 获得第三方账号用户token* @param code*/public String thirdToken(String code,String from){String gitToken=null;try {JSONObject jsonObject= GiteeHttpClient.getAccessToken("https://gitee.com/oauth/token?" +"grant_type=authorization_code&code="+code+"&client_id="+client_id+"&redirect_uri="+redirect_uri+"&client_secret="+client_secret);gitToken=jsonObject.getString("access_token");}catch (Exception exception){exception.printStackTrace();}return gitToken;}/*** 获得第三方用户信息*/public ThirdAccountDto account(String thirdToken, String from){ThirdAccountDto account=null;try {JSONObject userObj=GiteeHttpClient.getUserInfo(thirdToken,"https://gitee.com/api/v5/user");account=new ThirdAccountDto();account.setId(userObj.getString("id"));account.setName(userObj.getString("name"));account.setEmail(userObj.getString("email"));account.setUsername(userObj.getString("login"));account.setThirdToken(thirdToken);account.setAvatar(userObj.getString("avatar_url"));account.setFrom(from);}catch (Exception exception){exception.printStackTrace();}return account;}/*** 获得第三方用户信息*/public String email(String token, String from){String email=null;try {JSONObject userObj=GiteeHttpClient.getArray(token,"https://gitee.com/api/v5/emails").getJSONObject(0);email= userObj.getString("email");}catch (Exception exception){exception.printStackTrace();}return email;}public SysUser createUser(ThirdAccountDto accountDto){SysUser user=new SysUser();
// user.setSysOrgId(sysOrgId);user.setSysGroupId("super");user.setSysDeptId("4028b8818747df52018747dfdf780000");user.setState("1");
// user.setUsername(accountDto.getUsername());user.setThirdId(accountDto.getId());user.setName(accountDto.getName());user.setEmail(accountDto.getEmail());user.setSource(accountDto.getFrom());user.setThirdToken(accountDto.getThirdToken());user.setAvatar(accountDto.getAvatar());return user;}/* 发送验证信息的邮件 */public String sendMail(String to,String code) {if( emailFrom==null|| emailPwd==null){return "邮件服务信息服务端未设置,不能发送邮件";}Properties props = new Properties();props.setProperty("mail.smtp.host", "smtp.163.com");props.put("mail.smtp.host", "smtp.163.com");props.put("mail.smtp.auth", "true");Session session = Session.getDefaultInstance(props);session.setDebug(true);MimeMessage message = new MimeMessage(session);try {message.setSentDate(new Date());SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");message.setFrom(new InternetAddress(emailFrom));message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); // 加载收件人地址message.setSubject("低代码平台验证码","utf-8");Multipart multipart = new MimeMultipart(); // 向multipart对象中添加邮件的各个部分内容,包括文本内容和附件BodyPart contentPart = new MimeBodyPart(); // 设置邮件的文本内容String str = "<!DOCTYPE html><html><head><meta charset='UTF-8'></head><body><p style='font-size: 20px;font-weight:bold;'>尊敬的用户,您好!</p>"+ "<p style='text-indent:2em; font-size: 20px;'>欢迎您使用vlife低代码平台,您本次的注册码是 "+ "<span style='font-size:30px;font-weight:bold;color:red'>" + code + "</span>,10分钟之内有效,请尽快使用!</p>"+ "<p style='text-align:right; padding-right: 20px;'"+ "<a href='http://www.vlife.cc' style='font-size: 18px'>了解更多请访问vlife使用指南</a></p>"+ "<span style='font-size: 18px; float:right; margin-right: 60px;'>" + sdf.format(new Date()) + "</span></body></html>";contentPart.setContent(str, "text/html;charset=utf-8");multipart.addBodyPart(contentPart);message.setContent(multipart);message.saveChanges(); // 保存变化Transport transport = session.getTransport("smtp"); // 连接服务器的邮箱transport.connect("smtp.163.com", emailFrom, emailPwd); // 把邮件发送出去transport.sendMessage(message, message.getAllRecipients());transport.close();} catch (MessagingException e) {e.printStackTrace();return "发送失败:"+e.getMessage();}return null;}}