From 126de9aa91d40bd85b0ef822588772fbdd7df2d5 Mon Sep 17 00:00:00 2001 From: APLS Date: Mon, 6 Apr 2020 22:40:38 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=94=B9=E4=B8=BAtoken=E9=AA=8C?= =?UTF-8?q?=E8=AF=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/io/qyi/e5/bean/AppQuartz.java | 20 ----- .../SecurityAuthenticationHandler.java | 15 +++- .../e5/config/security/SecurityConfig.java | 21 +++-- ...sernamePasswordAuthenticationProvider.java | 45 +++++++--- .../UsernamePasswordAuthenticationToken.java | 28 +++++- .../filter/LinkTokenAuthenticationFilter.java | 62 +++++++++++++ .../java/io/qyi/e5/controller/auth2/Auth.java | 17 +--- .../qyi/e5/github/service/IGithubService.java | 10 +++ .../service/impl/GithubServiceImpl.java | 86 ++++++++++++++++++ .../io/qyi/e5/outlook/bean/OutlookVo.java | 15 ++++ .../outlook/controller/OutlookController.java | 18 ++++ .../qyi/e5/service/github/GithubService.java | 18 ---- .../github/impl/GithubServiceImpl.java | 90 ------------------- 13 files changed, 278 insertions(+), 167 deletions(-) delete mode 100644 src/main/java/io/qyi/e5/bean/AppQuartz.java create mode 100644 src/main/java/io/qyi/e5/config/security/filter/LinkTokenAuthenticationFilter.java create mode 100644 src/main/java/io/qyi/e5/outlook/bean/OutlookVo.java delete mode 100644 src/main/java/io/qyi/e5/service/github/GithubService.java delete mode 100644 src/main/java/io/qyi/e5/service/github/impl/GithubServiceImpl.java diff --git a/src/main/java/io/qyi/e5/bean/AppQuartz.java b/src/main/java/io/qyi/e5/bean/AppQuartz.java deleted file mode 100644 index 5c4c5c1..0000000 --- a/src/main/java/io/qyi/e5/bean/AppQuartz.java +++ /dev/null @@ -1,20 +0,0 @@ -package io.qyi.e5.bean; - -import lombok.Data; - -/** - * @program: e5 - * @description: - * @author: 落叶随风 - * @create: 2020-03-03 16:20 - **/ -@Data -public class AppQuartz { - private Integer quartzId; //id 主键 - private String jobName; //任务名称 - private String jobGroup; //任务分组 - private String startTime; //任务开始时间 - private String cronExpression; //corn表达式 - private String invokeParam;//需要传递的参数 - -} diff --git a/src/main/java/io/qyi/e5/config/security/SecurityAuthenticationHandler.java b/src/main/java/io/qyi/e5/config/security/SecurityAuthenticationHandler.java index 2008022..9ec993d 100644 --- a/src/main/java/io/qyi/e5/config/security/SecurityAuthenticationHandler.java +++ b/src/main/java/io/qyi/e5/config/security/SecurityAuthenticationHandler.java @@ -1,7 +1,10 @@ package io.qyi.e5.config.security; +import com.google.gson.Gson; +import io.qyi.e5.util.ResultUtil; import org.springframework.security.core.Authentication; import org.springframework.security.core.AuthenticationException; +import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.web.authentication.AuthenticationFailureHandler; import org.springframework.security.web.authentication.AuthenticationSuccessHandler; import org.springframework.security.web.authentication.logout.LogoutSuccessHandler; @@ -12,6 +15,8 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; +import java.util.HashMap; +import java.util.Map; /** * @program: msgpush @@ -23,8 +28,14 @@ import java.io.PrintWriter; public class SecurityAuthenticationHandler implements AuthenticationSuccessHandler, AuthenticationFailureHandler , LogoutSuccessHandler { @Override public void onAuthenticationSuccess(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Authentication authentication) throws IOException, ServletException { - httpServletResponse.setStatus(302); - httpServletResponse.setHeader("Location", "/user/home"); + UsernamePasswordAuthenticationToken at = (UsernamePasswordAuthenticationToken) SecurityContextHolder.getContext().getAuthentication(); + Gson gson = new Gson(); + httpServletResponse.setContentType("application/json;charset=utf-8"); + PrintWriter writer = httpServletResponse.getWriter(); + Map token = new HashMap<>(); + token.put("token", at.getToken()); + writer.write(gson.toJson(ResultUtil.success(token)) ); + writer.flush(); } @Override diff --git a/src/main/java/io/qyi/e5/config/security/SecurityConfig.java b/src/main/java/io/qyi/e5/config/security/SecurityConfig.java index b77c719..5f11284 100644 --- a/src/main/java/io/qyi/e5/config/security/SecurityConfig.java +++ b/src/main/java/io/qyi/e5/config/security/SecurityConfig.java @@ -1,5 +1,6 @@ package io.qyi.e5.config.security; +import io.qyi.e5.config.security.filter.LinkTokenAuthenticationFilter; import io.qyi.e5.service.security.SecurityUserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; @@ -7,8 +8,8 @@ import org.springframework.security.config.annotation.authentication.builders.Au import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; -import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; -import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.security.config.http.SessionCreationPolicy; +import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; /** * @program: msgpush @@ -30,6 +31,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { UsernamePasswordAuthenticationConfig usernamePasswordAuthenticationConfig; + @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { System.out.println("AuthenticationManagerBuilder auth"); @@ -57,28 +59,32 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { .logout() .logoutUrl("logout") .logoutSuccessHandler( securityAuthenticationHandler);*/ + http.addFilterBefore(new LinkTokenAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class); http.csrf().disable() .apply(usernamePasswordAuthenticationConfig); - + /*关闭创建session*/ + http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS); http.formLogin() .loginPage("/user/login")// 登陆页面 .loginProcessingUrl("/user/loginFrom")// 登陆表单提交请求 .and() .authorizeRequests().antMatchers("/user/login", "/user/loginFrom", "/auth2/getGithubUrl").permitAll()// 指定相应的请求 不需要验证 - .and() - .authorizeRequests().antMatchers("/quartz/**").permitAll()//测试 +// .and() +// .authorizeRequests().antMatchers("/quartz/**").permitAll()//测试 .anyRequest()// 任何请求 .authenticated();// 都需要身份认证 - // http.exceptionHandling().accessDeniedHandler(); // http.formLogin().loginProcessingUrl("api/getInfo"); // http.formLogin().usernameParameter("username"); // http.formLogin().passwordParameter("password"); - } + /*@Bean + public LinkTokenAuthenticationFilter linkTokenAuthenticationFilter (){ + return new LinkTokenAuthenticationFilter(); + }*/ /*@Bean public AccessDeniedHandler getAccessDeniedHandler() { @@ -91,4 +97,5 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { String antPatterns = "/pdfjs-2.1.266/**,/favicon.ico,/css/**,/js/**,/ico/**,/images/**,/jquery-1.12.4/**,/uuid-1.4/**,/layui-2.4.5/**,/jquery-easyui-1.6.11/**,/zTree-3.5.33/**,/select2-4.0.5/**,/greensock-js-1.20.5/**"; web.ignoring().antMatchers(antPatterns.split(",")); }*/ + } diff --git a/src/main/java/io/qyi/e5/config/security/UsernamePasswordAuthenticationProvider.java b/src/main/java/io/qyi/e5/config/security/UsernamePasswordAuthenticationProvider.java index 4ff6cb4..8698e7a 100644 --- a/src/main/java/io/qyi/e5/config/security/UsernamePasswordAuthenticationProvider.java +++ b/src/main/java/io/qyi/e5/config/security/UsernamePasswordAuthenticationProvider.java @@ -1,12 +1,10 @@ package io.qyi.e5.config.security; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import io.qyi.e5.bean.result.ResultEnum; import io.qyi.e5.github.entity.Github; import io.qyi.e5.github.entity.UserInfo; -import io.qyi.e5.github.mapper.GithubMapper; -import io.qyi.e5.service.github.GithubService; -import io.qyi.e5.util.ResultUtil; +import io.qyi.e5.github.service.IGithubService; +import io.qyi.e5.util.EncryptUtil; import io.qyi.e5.util.redis.RedisUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -14,13 +12,16 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.security.authentication.AuthenticationProvider; import org.springframework.security.authentication.BadCredentialsException; -import org.springframework.security.authentication.InternalAuthenticationServiceException; import org.springframework.security.core.Authentication; import org.springframework.security.core.AuthenticationException; import org.springframework.security.core.authority.AuthorityUtils; import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.stereotype.Component; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + /** * @program: e5 * @description: @@ -34,17 +35,19 @@ public class UsernamePasswordAuthenticationProvider implements AuthenticationPro @Value("${redis.auth2.github}") String states; + @Value("${redis.user.token}") + String token_; + @Value("${isdebug}") boolean isDebug; @Autowired RedisUtil redisUtil; - @Autowired - GithubMapper githubMapper; + @Autowired - GithubService githubService; + IGithubService githubService; // 验证 @Override @@ -55,10 +58,17 @@ public class UsernamePasswordAuthenticationProvider implements AuthenticationPro String code = authenticationToken.getCode(); String state = authenticationToken.getState(); logger.info("Github 认证: code:{} state:{} Token:", code, state); + Map userInfo_redis = new HashMap<>(); + /*是否调试模式*/ if (isDebug) { + String token = EncryptUtil.getInstance().SHA1Hex(UUID.randomUUID().toString()); UsernamePasswordAuthenticationToken authenticationToken1 = new UsernamePasswordAuthenticationToken("debugName", - "DebugAvatar",19658189, AuthorityUtils.createAuthorityList("user")); + "DebugAvatar", 19658189,token, AuthorityUtils.createAuthorityList("user")); authenticationToken1.setDetails(authenticationToken); + userInfo_redis.put("github_name", "debug"); + userInfo_redis.put("github_id", 19658189); + userInfo_redis.put("avatar_url", "https://www.baidu.com"); + redisUtil.hmset(token_ + token, userInfo_redis, 3600); return authenticationToken1; } if (!redisUtil.hasKey(states + state)) { @@ -78,7 +88,7 @@ public class UsernamePasswordAuthenticationProvider implements AuthenticationPro } QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("github_id", userInfo.getGithub_id()); - Github github = githubMapper.selectOne(queryWrapper); + Github github = githubService.selectOne(queryWrapper); // 未注册就进行注册 if (github == null) { github = new Github(); @@ -87,17 +97,24 @@ public class UsernamePasswordAuthenticationProvider implements AuthenticationPro .setGithubId(userInfo.getGithub_id()) .setName(userInfo.getName()) .setLogin(userInfo.getLogin()); - githubMapper.insert(github); + githubService.insert(github); } else { -// 已注册就进行更新 AccessToken +// 已注册就进行更新 AccessToken github.setAccessToken(accessToken); - githubMapper.update(github, queryWrapper); + githubService.update(github, queryWrapper); } + String token = EncryptUtil.getInstance().SHA1Hex(UUID.randomUUID().toString()); + + /*写token信息到redis*/ + userInfo_redis.put("github_name", github.getName()); + userInfo_redis.put("github_id", github.getGithubId()); + userInfo_redis.put("avatar_url", github.getAvatarUrl()); + redisUtil.hmset(token_ + token, userInfo_redis, 3600); // 创建一个已认证的token UsernamePasswordAuthenticationToken authenticationToken1 = new UsernamePasswordAuthenticationToken(github.getName(), - github.getAvatarUrl(),github.getGithubId(), AuthorityUtils.createAuthorityList("user")); + github.getAvatarUrl(), github.getGithubId(), token, AuthorityUtils.createAuthorityList("user")); // 设置一些详细信息 authenticationToken1.setDetails(authenticationToken); diff --git a/src/main/java/io/qyi/e5/config/security/UsernamePasswordAuthenticationToken.java b/src/main/java/io/qyi/e5/config/security/UsernamePasswordAuthenticationToken.java index d9ac5d3..adbcf9e 100644 --- a/src/main/java/io/qyi/e5/config/security/UsernamePasswordAuthenticationToken.java +++ b/src/main/java/io/qyi/e5/config/security/UsernamePasswordAuthenticationToken.java @@ -26,8 +26,15 @@ public class UsernamePasswordAuthenticationToken extends AbstractAuthenticationT private String name; private String avatar_url; + + private String Token; + private int github_id; + // 创建未认证的用户名密码认证对象 + public UsernamePasswordAuthenticationToken() { + super(null); + } // 创建未认证的用户名密码认证对象 public UsernamePasswordAuthenticationToken(String code) { @@ -48,7 +55,7 @@ public class UsernamePasswordAuthenticationToken extends AbstractAuthenticationT // 创建已认证的用户密码认证对象 - public UsernamePasswordAuthenticationToken( String name, String avatar_url, int github_id,Collection authorities) { + public UsernamePasswordAuthenticationToken(String name, String avatar_url, int github_id, Collection authorities) { super(authorities); this.name = name; this.avatar_url = avatar_url; @@ -56,6 +63,24 @@ public class UsernamePasswordAuthenticationToken extends AbstractAuthenticationT super.setAuthenticated(true); } + // 创建已认证的用户密码认证对象 + public UsernamePasswordAuthenticationToken(String name, String avatar_url, int github_id, String token, Collection authorities) { + super(authorities); + this.name = name; + this.avatar_url = avatar_url; + this.github_id = github_id; + this.Token = token; + super.setAuthenticated(true); + } + + public String getToken() { + return Token; + } + + public void setToken(String token) { + Token = token; + } + @Override public String getCredentials() { return null; @@ -66,6 +91,7 @@ public class UsernamePasswordAuthenticationToken extends AbstractAuthenticationT return this.code; } + public String getCode() { return code; } diff --git a/src/main/java/io/qyi/e5/config/security/filter/LinkTokenAuthenticationFilter.java b/src/main/java/io/qyi/e5/config/security/filter/LinkTokenAuthenticationFilter.java new file mode 100644 index 0000000..2073427 --- /dev/null +++ b/src/main/java/io/qyi/e5/config/security/filter/LinkTokenAuthenticationFilter.java @@ -0,0 +1,62 @@ +package io.qyi.e5.config.security.filter; + +import com.google.gson.Gson; +import io.qyi.e5.bean.result.Result; +import io.qyi.e5.bean.result.ResultEnum; +import io.qyi.e5.config.security.UsernamePasswordAuthenticationToken; +import io.qyi.e5.util.ResultUtil; +import io.qyi.e5.util.SpringUtil; +import io.qyi.e5.util.redis.RedisUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Configurable; +import org.springframework.security.core.authority.AuthorityUtils; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.stereotype.Component; +import org.springframework.web.filter.OncePerRequestFilter; + +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.Map; + +/** + * Token校验 + * + * @program: e5 + * @description: + * @author: 落叶随风 + * @create: 2020-04-05 00:42 + **/ +public class LinkTokenAuthenticationFilter extends OncePerRequestFilter { + + @Override + protected void doFilterInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, FilterChain filterChain) throws ServletException, IOException { + String token = httpServletRequest.getHeader("token"); + if (token != null) { + RedisUtil redisUtil = SpringUtil.getBean(RedisUtil.class); + if (redisUtil.hasKey("token:" + token)) { + Map userInfo = redisUtil.hmget("token:" +token); + // 将未认证的Authentication转换成自定义的用户认证Token + UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(); + UsernamePasswordAuthenticationToken authenticationToken1 = new UsernamePasswordAuthenticationToken(userInfo.get("github_name").toString(), + userInfo.get("avatar_url").toString(), (int) userInfo.get("github_id"), AuthorityUtils.createAuthorityList("user")); + authenticationToken1.setDetails(authenticationToken); + SecurityContextHolder.getContext().setAuthentication(authenticationToken1); + System.out.println("完成授权"); + } + } + System.out.println("--------------Token鉴权---------------"); + filterChain.doFilter(httpServletRequest, httpServletResponse); + } + + public void sendJson(HttpServletResponse httpServletResponse, Object o) throws IOException { + Gson gson = new Gson(); + String s = gson.toJson(o); + PrintWriter writer = httpServletResponse.getWriter(); + writer.write(s); + writer.flush(); + } +} diff --git a/src/main/java/io/qyi/e5/controller/auth2/Auth.java b/src/main/java/io/qyi/e5/controller/auth2/Auth.java index 8f97615..953934e 100644 --- a/src/main/java/io/qyi/e5/controller/auth2/Auth.java +++ b/src/main/java/io/qyi/e5/controller/auth2/Auth.java @@ -1,16 +1,9 @@ package io.qyi.e5.controller.auth2; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; -import io.qyi.e5.bean.result.Result; -import io.qyi.e5.bean.result.ResultEnum; -import io.qyi.e5.github.entity.Github; -import io.qyi.e5.github.entity.UserInfo; import io.qyi.e5.github.mapper.GithubMapper; -import io.qyi.e5.service.github.GithubService; +import io.qyi.e5.github.service.IGithubService; import io.qyi.e5.user.mapper.UserMapper; import io.qyi.e5.util.EncryptUtil; -import io.qyi.e5.util.ResultUtil; import io.qyi.e5.util.redis.RedisUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -33,13 +26,7 @@ public class Auth { RedisUtil redisUtil; @Autowired - GithubService githubService; - - @Autowired - UserMapper userMapper; - - @Autowired - GithubMapper githubMapper; + IGithubService githubService; @Value("${redis.auth2.github}") String states; diff --git a/src/main/java/io/qyi/e5/github/service/IGithubService.java b/src/main/java/io/qyi/e5/github/service/IGithubService.java index 5717501..9d1fb0a 100644 --- a/src/main/java/io/qyi/e5/github/service/IGithubService.java +++ b/src/main/java/io/qyi/e5/github/service/IGithubService.java @@ -1,7 +1,9 @@ package io.qyi.e5.github.service; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import io.qyi.e5.github.entity.Github; import com.baomidou.mybatisplus.extension.service.IService; +import io.qyi.e5.github.entity.UserInfo; /** *

@@ -12,5 +14,13 @@ import com.baomidou.mybatisplus.extension.service.IService; * @since 2020-02-24 */ public interface IGithubService extends IService { + String getAccessToken(String code); + String getUserEmail(String access_token) throws Exception; + + UserInfo getUserInfo(String access_token); + + Github selectOne(QueryWrapper queryWrapper); + + void insert(Github github); } diff --git a/src/main/java/io/qyi/e5/github/service/impl/GithubServiceImpl.java b/src/main/java/io/qyi/e5/github/service/impl/GithubServiceImpl.java index 0712128..b762a0d 100644 --- a/src/main/java/io/qyi/e5/github/service/impl/GithubServiceImpl.java +++ b/src/main/java/io/qyi/e5/github/service/impl/GithubServiceImpl.java @@ -1,11 +1,22 @@ package io.qyi.e5.github.service.impl; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import io.qyi.e5.github.entity.Github; +import io.qyi.e5.github.entity.UserInfo; import io.qyi.e5.github.mapper.GithubMapper; import io.qyi.e5.github.service.IGithubService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import io.qyi.e5.util.StringUtil; +import io.qyi.e5.util.netRequest.OkHttpRequestUtils; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import java.util.HashMap; +import java.util.Map; + /** *

* 服务实现类 @@ -16,5 +27,80 @@ import org.springframework.stereotype.Service; */ @Service public class GithubServiceImpl extends ServiceImpl implements IGithubService { + @Value("${github.client_id}") + private String client_id; + @Value("${github.client_secret}") + private String client_secret; + @Override + public String getAccessToken(String code) { + Map par = new HashMap<>(); + par.put("client_id", client_id); + par.put("client_secret", client_secret); + par.put("code", code); + Map head = new HashMap<>(); + head.put("Content-Type", "application/x-www-form-urlencoded"); + String s = null; + try { + s = OkHttpRequestUtils.doPost("https://github.com/login/oauth/access_token", head, par); + } catch (Exception e) { + e.printStackTrace(); + } + System.out.println(s); + Map map = StringUtil.ParsingUrl(s); + return map.get("access_token"); + } + + @Override + public String getUserEmail(String access_token) throws Exception { + Map head = new HashMap<>(); + head.put("Authorization", "token " + access_token); + head.put("Content-Type", "application/vnd.github.machine-man-preview+json"); + String s = OkHttpRequestUtils.doGet("https://api.github.com/user/emails", head, null); + System.out.println(s); + JSONArray jsonArray = JSON.parseArray(s); + if (!jsonArray.isEmpty()) { + for (int i = 0; i < jsonArray.size(); i++) { + JSONObject jsonObject = jsonArray.getJSONObject(i); +// 电子邮件是主要的并且已通过验证。 + if (jsonObject.getBoolean("primary") && jsonObject.getBoolean("verified")) { + return jsonObject.getString("email"); + } + } + } + return null; + } + + @Override + public UserInfo getUserInfo(String access_token) { + Map head = new HashMap<>(); + head.put("Authorization", "token " + access_token); + head.put("Content-Type", "application/vnd.github.machine-man-preview+json"); + try { + String s = OkHttpRequestUtils.doGet("https://api.github.com/user", head, null); + JSONObject jsonObject = JSON.parseObject(s); + UserInfo userInfo = new UserInfo(); + if (!jsonObject.isEmpty()) { + userInfo.setLogin(jsonObject.getString("login")); + userInfo.setName(jsonObject.getString("name")); + userInfo.setAvatar_url(jsonObject.getString("avatar_url")); + userInfo.setGithub_id(jsonObject.getIntValue("id")); + userInfo.setNode_id(jsonObject.getString("node_id")); + } + return userInfo; + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + @Override + public Github selectOne(QueryWrapper queryWrapper) { + return baseMapper.selectOne(queryWrapper); + } + + @Override + public void insert(Github github) { + baseMapper.insert(github); + } } diff --git a/src/main/java/io/qyi/e5/outlook/bean/OutlookVo.java b/src/main/java/io/qyi/e5/outlook/bean/OutlookVo.java new file mode 100644 index 0000000..e6381fc --- /dev/null +++ b/src/main/java/io/qyi/e5/outlook/bean/OutlookVo.java @@ -0,0 +1,15 @@ +package io.qyi.e5.outlook.bean; + +import lombok.Data; + +/** + * @program: e5 + * @description: + * @author: 落叶随风 + * @create: 2020-04-04 22:34 + **/ +@Data +public class OutlookVo { + private String clientId; + private String clientSecret; +} diff --git a/src/main/java/io/qyi/e5/outlook/controller/OutlookController.java b/src/main/java/io/qyi/e5/outlook/controller/OutlookController.java index 85dba61..6a4ecc3 100644 --- a/src/main/java/io/qyi/e5/outlook/controller/OutlookController.java +++ b/src/main/java/io/qyi/e5/outlook/controller/OutlookController.java @@ -1,11 +1,15 @@ package io.qyi.e5.outlook.controller; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import io.qyi.e5.bean.result.Result; import io.qyi.e5.bean.result.ResultEnum; import io.qyi.e5.config.security.UsernamePasswordAuthenticationToken; +import io.qyi.e5.outlook.bean.OutlookVo; +import io.qyi.e5.outlook.entity.Outlook; import io.qyi.e5.outlook.service.IOutlookService; import io.qyi.e5.util.ResultUtil; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; @@ -56,4 +60,18 @@ public class OutlookController { } return ResultUtil.error(ResultEnum.UNKNOWN_ERROR); } + @GetMapping("/getOutlookInfo") + public Result getOutlookInfo(){ + UsernamePasswordAuthenticationToken authentication = (UsernamePasswordAuthenticationToken) SecurityContextHolder.getContext().getAuthentication(); + int github_id = authentication.getGithub_id(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("github_id", github_id); + Outlook one = outlookService.getOne(queryWrapper); + OutlookVo vo = new OutlookVo(); + System.out.println(one); + if (one != null) { + BeanUtils.copyProperties(one,vo); + } + return ResultUtil.success(vo); + } } diff --git a/src/main/java/io/qyi/e5/service/github/GithubService.java b/src/main/java/io/qyi/e5/service/github/GithubService.java deleted file mode 100644 index 205e63b..0000000 --- a/src/main/java/io/qyi/e5/service/github/GithubService.java +++ /dev/null @@ -1,18 +0,0 @@ -package io.qyi.e5.service.github; - -import io.qyi.e5.github.entity.UserInfo; - -/** - * @program: msgpush - * @description: - * @author: 落叶随风 - * @create: 2020-02-20 00:47 - **/ -public interface GithubService { - String getAccessToken(String code); - - String getUserEmail(String access_token) throws Exception; - - UserInfo getUserInfo(String access_token); - -} diff --git a/src/main/java/io/qyi/e5/service/github/impl/GithubServiceImpl.java b/src/main/java/io/qyi/e5/service/github/impl/GithubServiceImpl.java deleted file mode 100644 index 38a6db1..0000000 --- a/src/main/java/io/qyi/e5/service/github/impl/GithubServiceImpl.java +++ /dev/null @@ -1,90 +0,0 @@ -package io.qyi.e5.service.github.impl; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import io.qyi.e5.github.entity.UserInfo; -import io.qyi.e5.service.github.GithubService; -import io.qyi.e5.util.StringUtil; -import io.qyi.e5.util.netRequest.OkHttpRequestUtils; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Service; - -import java.util.HashMap; -import java.util.Map; - -/** - * @program: msgpush - * @description: - * @author: 落叶随风 - * @create: 2020-02-20 00:56 - **/ -@Service("GithubService") -public class GithubServiceImpl implements GithubService { - @Value("${github.client_id}") - private String client_id; - @Value("${github.client_secret}") - private String client_secret; - - @Override - public String getAccessToken(String code) { - Map par = new HashMap<>(); - par.put("client_id", client_id); - par.put("client_secret", client_secret); - par.put("code", code); - Map head = new HashMap<>(); - head.put("Content-Type", "application/x-www-form-urlencoded"); - String s = null; - try { - s = OkHttpRequestUtils.doPost("https://github.com/login/oauth/access_token", head, par); - } catch (Exception e) { - e.printStackTrace(); - } - System.out.println(s); - Map map = StringUtil.ParsingUrl(s); - return map.get("access_token"); - } - - @Override - public String getUserEmail(String access_token) throws Exception { - Map head = new HashMap<>(); - head.put("Authorization", "token " + access_token); - head.put("Content-Type", "application/vnd.github.machine-man-preview+json"); - String s = OkHttpRequestUtils.doGet("https://api.github.com/user/emails", head, null); - System.out.println(s); - JSONArray jsonArray = JSON.parseArray(s); - if (!jsonArray.isEmpty()) { - for (int i = 0; i < jsonArray.size(); i++) { - JSONObject jsonObject = jsonArray.getJSONObject(i); -// 电子邮件是主要的并且已通过验证。 - if (jsonObject.getBoolean("primary") && jsonObject.getBoolean("verified")) { - return jsonObject.getString("email"); - } - } - } - return null; - } - - @Override - public UserInfo getUserInfo(String access_token) { - Map head = new HashMap<>(); - head.put("Authorization", "token " + access_token); - head.put("Content-Type", "application/vnd.github.machine-man-preview+json"); - try { - String s = OkHttpRequestUtils.doGet("https://api.github.com/user", head, null); - JSONObject jsonObject = JSON.parseObject(s); - UserInfo userInfo = new UserInfo(); - if (!jsonObject.isEmpty()) { - userInfo.setLogin(jsonObject.getString("login")); - userInfo.setName(jsonObject.getString("name")); - userInfo.setAvatar_url(jsonObject.getString("avatar_url")); - userInfo.setGithub_id(jsonObject.getIntValue("id")); - userInfo.setNode_id(jsonObject.getString("node_id")); - } - return userInfo; - } catch (Exception e) { - e.printStackTrace(); - } - return null; - } -}