package cn.stylefeng.guns.oauth2.controller;
|
|
import cn.stylefeng.guns.base.auth.context.LoginContextHolder;
|
import cn.stylefeng.guns.oauth2.factory.OAuthRequestFactory;
|
import cn.stylefeng.guns.oauth2.service.LoginService;
|
import cn.stylefeng.guns.base.oauth2.service.OauthUserInfoService;
|
import cn.stylefeng.roses.core.base.controller.BaseController;
|
import lombok.extern.slf4j.Slf4j;
|
import me.zhyd.oauth.model.AuthCallback;
|
import me.zhyd.oauth.model.AuthResponse;
|
import me.zhyd.oauth.model.AuthUser;
|
import me.zhyd.oauth.request.AuthRequest;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Controller;
|
import org.springframework.web.bind.annotation.PathVariable;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
|
import javax.servlet.http.HttpServletResponse;
|
import java.io.IOException;
|
|
/**
|
* OAuth统一回调地址
|
*
|
* @author fengshuonan
|
* @Date 2019/6/9 16:38
|
*/
|
@Controller
|
@RequestMapping("/oauth")
|
@Slf4j
|
public class OAuthController extends BaseController {
|
|
@Autowired
|
private LoginService loginService;
|
|
@Autowired
|
private OauthUserInfoService oauthUserInfoService;
|
|
/**
|
* 第三方登录跳转
|
*
|
* @author fengshuonan
|
* @Date 2019/6/9 16:44
|
*/
|
@RequestMapping("/render/{source}")
|
public void renderAuth(@PathVariable("source") String source, HttpServletResponse response) throws IOException {
|
AuthRequest authRequest = OAuthRequestFactory.getAuthRequest(source);
|
response.sendRedirect(authRequest.authorize());
|
}
|
|
/**
|
* 第三方登录成功后的回调地址
|
*
|
* @author fengshuonan
|
* @Date 2019/6/9 16:45
|
*/
|
@RequestMapping("/callback/{source}")
|
public String callback(@PathVariable("source") String source, AuthCallback callback) {
|
|
//通过回调的code,请求对应的oauth server获取用户基本信息和token
|
AuthRequest authRequest = OAuthRequestFactory.getAuthRequest(source);
|
AuthResponse authResponse = authRequest.login(callback);
|
|
AuthUser oauthUser = (AuthUser) authResponse.getData();
|
log.info("第三方登录回调成功:" + oauthUser);
|
|
//进行第三方用户登录过程
|
String token = loginService.oauthLogin(oauthUser);
|
|
//跳转到token登录接口
|
return REDIRECT + "/sysTokenLogin?token=" + token;
|
}
|
|
/**
|
* 第三方登录的头像
|
*
|
* @author fengshuonan
|
* @Date 2019/6/9 16:44
|
*/
|
@RequestMapping("/avatar")
|
public String avatar() {
|
|
Long userId = LoginContextHolder.getContext().getUser().getId();
|
|
//获取第三方登录用户的头像
|
String avatarUrl = oauthUserInfoService.getAvatarUrl(userId);
|
|
return REDIRECT + avatarUrl;
|
}
|
|
}
|