package com.boman.auth.controller; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.boman.common.core.utils.JSONArrayUtils; import com.boman.common.core.utils.StringUtils; import com.fasterxml.jackson.annotation.JsonFormat; import com.xkcoding.justauth.AuthRequestFactory; import io.micrometer.core.instrument.util.JsonUtils; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import me.zhyd.oauth.config.AuthSource; import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthResponse; import me.zhyd.oauth.request.AuthRequest; import me.zhyd.oauth.utils.AuthStateUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * @author tjf * @Date: 2021/05/24/11:41 */ @Slf4j @RestController @RequestMapping("/oauth") @RequiredArgsConstructor(onConstructor_ = @Autowired) public class OauthController { private final AuthRequestFactory factory; @GetMapping public List<String> list() { return factory.oauthList(); } @GetMapping("/login/{type}") public void login(@PathVariable String type, HttpServletResponse response) throws IOException { AuthRequest authRequest = factory.get(type); //生成授权地址,并重定向 String authorize = authRequest.authorize(type + "::" + AuthStateUtils.createState()); response.sendRedirect(authorize); } /** * 回调登录 * @param type * @param callback * @return */ @RequestMapping("/{type}/callback") public AuthResponse login(@PathVariable String type, AuthCallback callback) { AuthRequest authRequest = factory.get(getAuthSource(type)); AuthResponse response = authRequest.login(callback); log.info("【response】= {}", JSON.toJSONString(response)); return response; } private String getAuthSource(String type) { if (StrUtil.isNotBlank(type)) { return type.toUpperCase(); } else { throw new RuntimeException("类型为空"); } } }