更多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")
@ResponseBody
public Result bindingGitee(@RequestBody JSONObject jsonObject) {
Result result = new Result();
//固定使用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 {
@Autowired
public 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 = "尊敬的用户,您好!
"
+ "欢迎您使用vlife低代码平台,您本次的注册码是 "
+ "" + code + ",10分钟之内有效,请尽快使用!
"
+ "了解更多请访问vlife使用指南
"
+ "" + sdf.format(new Date()) + "";
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;
}
}