|
@@ -28,11 +28,18 @@ import org.springframework.security.core.AuthenticationException;
|
|
|
import org.springframework.stereotype.Controller;
|
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
|
|
|
+import java.io.UnsupportedEncodingException;
|
|
|
+import java.net.MalformedURLException;
|
|
|
+import java.net.URL;
|
|
|
+import java.net.URLDecoder;
|
|
|
+import java.net.URLEncoder;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.Map;
|
|
|
+
|
|
|
+
|
|
|
import javax.annotation.Resource;
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
import java.time.LocalDateTime;
|
|
|
-import java.util.HashMap;
|
|
|
-import java.util.Map;
|
|
|
|
|
|
/**
|
|
|
* 基于oauth2.0相关的授权相关操作
|
|
@@ -109,7 +116,12 @@ public class OauthController {
|
|
|
if (StringUtils.isNoneBlank(status)) {
|
|
|
params = params + "&status=" + status;
|
|
|
}
|
|
|
-// request.getSession().setAttribute(Constants.SESSION_USER, sysUser);
|
|
|
+ // 放
|
|
|
+ request.getSession().setAttribute(Constants.SESSION_USER, sysUser);
|
|
|
+ // 取
|
|
|
+ SysUser user = (SysUser) request.getSession().getAttribute(Constants.SESSION_USER);
|
|
|
+ System.err.println(user);
|
|
|
+ System.err.println(sysUser);
|
|
|
// 存放redis用户信息数据
|
|
|
redisCache.setCacheObject(authorizationCode, sysUser);
|
|
|
return AjaxResult.success(authorizationCode, params);
|
|
@@ -123,7 +135,8 @@ public class OauthController {
|
|
|
public String getAuthorize(HttpServletRequest request) {
|
|
|
String key = request.getParameter("key");
|
|
|
String tenantCode = request.getParameter("tenantCode");
|
|
|
- Object user = request.getParameter(Constants.SESSION_USER);
|
|
|
+ // 取
|
|
|
+ SysUser user = (SysUser) request.getSession().getAttribute(Constants.SESSION_USER);
|
|
|
if (key != null && !key.isEmpty()) {
|
|
|
SysUser sysUser = redisService.get(key);
|
|
|
String clientIdStr = request.getParameter("client_id");
|
|
@@ -131,13 +144,28 @@ public class OauthController {
|
|
|
String redirectUri = request.getParameter("redirect_uri");
|
|
|
String status = request.getParameter("status");
|
|
|
String authorizationCode = authorizationService.createAuthorizationCode(clientIdStr, scopeStr, sysUser);
|
|
|
- String params =
|
|
|
- redirectUri + "?code=" + authorizationCode;
|
|
|
- if (StringUtils.isNoneBlank(status)) {
|
|
|
- params = params + "&status=" + status;
|
|
|
+ String UrlString = "";
|
|
|
+ try {
|
|
|
+ URL url = new URL(redirectUri);
|
|
|
+ String queryString = url.getQuery();
|
|
|
+ // 解析查询参数
|
|
|
+ Map<String, String> params = parseQueryParameters(queryString);
|
|
|
+ // 修改或添加参数
|
|
|
+ params.put("code", authorizationCode);
|
|
|
+ params.put("status", status);
|
|
|
+ params.put("params", request.getParameter("params")); // 增加第三方所需参数字段
|
|
|
+ // 封装新的查询参数为字符串
|
|
|
+ String newQueryString = buildQueryString(params);
|
|
|
+ // 构造新的URL
|
|
|
+ UrlString = url.getProtocol() + "://" + url.getHost() + ":" + url.getPort() + url.getPath() + "?" + newQueryString;
|
|
|
+ // redisService.delete(key);
|
|
|
+ return "redirect:" + UrlString;
|
|
|
+ } catch (MalformedURLException e) {
|
|
|
+ e.printStackTrace();
|
|
|
}
|
|
|
// redisService.delete(key);
|
|
|
- return "redirect:" + params;
|
|
|
+ return "redirect:" + REDIRECT_URL + "/login?tenantCode=" + tenantCode;
|
|
|
+
|
|
|
} else {
|
|
|
return "redirect:" + REDIRECT_URL + "/login?tenantCode=" + tenantCode;
|
|
|
}
|
|
@@ -322,4 +350,43 @@ public class OauthController {
|
|
|
result.put("error_description", errorCodeEnum.getErrorDescription());
|
|
|
}
|
|
|
|
|
|
+ // 解析URL查询参数
|
|
|
+ public static Map<String, String> parseQueryParameters(String queryString) {
|
|
|
+ Map<String, String> params = new HashMap<>();
|
|
|
+ if (queryString != null && !queryString.isEmpty()) {
|
|
|
+ String[] pairs = queryString.split("&");
|
|
|
+ for (String pair : pairs) {
|
|
|
+ int idx = pair.indexOf("=");
|
|
|
+ if (idx > 0) {
|
|
|
+ try {
|
|
|
+ String key = URLDecoder.decode(pair.substring(0, idx), "UTF-8");
|
|
|
+ String value = URLDecoder.decode(pair.substring(idx + 1), "UTF-8");
|
|
|
+ params.put(key, value);
|
|
|
+ } catch (UnsupportedEncodingException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return params;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 封装查询参数为字符串
|
|
|
+ public static String buildQueryString(Map<String, String> params) {
|
|
|
+ StringBuilder queryBuilder = new StringBuilder();
|
|
|
+ for (Map.Entry<String, String> entry : params.entrySet()) {
|
|
|
+ if (queryBuilder.length() > 0) {
|
|
|
+ queryBuilder.append("&");
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ queryBuilder.append(URLEncoder.encode(entry.getKey(), "UTF-8"))
|
|
|
+ .append("=")
|
|
|
+ .append(URLEncoder.encode(entry.getValue(), "UTF-8"));
|
|
|
+ } catch (UnsupportedEncodingException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return queryBuilder.toString();
|
|
|
+ }
|
|
|
+
|
|
|
}
|