单点登录处理

This commit is contained in:
yuxueliang0813 2025-02-08 12:28:12 +08:00
parent e4fc50883e
commit c4f594a16f
1 changed files with 20 additions and 10 deletions

View File

@ -15,9 +15,11 @@ import java.net.URLEncoder;
import java.util.Date; import java.util.Date;
public class JHSSOAuthHandler implements ThirdSSOAuthHandler { public class JHSSOAuthHandler implements ThirdSSOAuthHandler {
private static final String ssologinUrl = "https://www.baidu.com"; private static final String ssologinUrl = "https://iamtest.jahwa.com.cn:8443";
private static final String client_id = "id";//应用注册ID 由认证系统提供 private static final String client_id = "61513465e938cd47abe8";//应用注册ID 由认证系统提供
private static final String client_secret = "secret";//应用注册密码 由认证系统提供 private static final String client_secret = "ee0f3e7e1e931343bc28d63cf69a616f2842";//应用注册密码 由认证系统提供
private String callBackUrl = System.getProperty("domain.contextUrl");
@Override @Override
public void callTrdSSOLogin(HttpServletRequest hsrequest, HttpServletResponse hsresponse, String backUrl) { public void callTrdSSOLogin(HttpServletRequest hsrequest, HttpServletResponse hsresponse, String backUrl) {
@ -25,6 +27,8 @@ public class JHSSOAuthHandler implements ThirdSSOAuthHandler {
//实现用户没有登录的时候跳转认证中心的登录地址 //实现用户没有登录的时候跳转认证中心的登录地址
//第一步认证中心的登录地址注意拼接参数和回调地址转义,注意正式地址切换 //第一步认证中心的登录地址注意拼接参数和回调地址转义,注意正式地址切换
System.getProperty("domain.contextUrl"); System.getProperty("domain.contextUrl");
// backUrl = "http://172.20.42.104:8881/ierp/auth/callbackTrdSSO.do?tenantNo=jahwa-uatenv&sandboxNo=2102993326188790784";
callBackUrl = backUrl;
StringBuffer ssoURL = new StringBuffer(); StringBuffer ssoURL = new StringBuffer();
ssoURL.append(ssologinUrl); ssoURL.append(ssologinUrl);
ssoURL.append("/esc-sso/oauth2.0/authorize?client_id="); ssoURL.append("/esc-sso/oauth2.0/authorize?client_id=");
@ -35,7 +39,7 @@ public class JHSSOAuthHandler implements ThirdSSOAuthHandler {
} catch (UnsupportedEncodingException e) { } catch (UnsupportedEncodingException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
ssoURL.append("/auth/call_back&state="); ssoURL.append("&state=");
//state 额外参数如果传递http需要转义常用需要在登录完成之后跳转回之前的页面 //state 额外参数如果传递http需要转义常用需要在登录完成之后跳转回之前的页面
ssoURL.append(new Date().getTime()); ssoURL.append(new Date().getTime());
try { try {
@ -52,19 +56,20 @@ public class JHSSOAuthHandler implements ThirdSSOAuthHandler {
UserAuthResult result = new UserAuthResult(); UserAuthResult result = new UserAuthResult();
result.setSucess(false); result.setSucess(false);
//将用户的认证凭据传输到认证系统进行认证从而实现对认证凭据进行识别和获取用户信息request包含请求的认证凭据 //将用户的认证凭据传输到认证系统进行认证从而实现对认证凭据进行识别和获取用户信息request包含请求的认证凭据
String workerNumber = getWorkerNumber(hsrequest);//此逻辑需二开实现 String numOrName = getWorkerNumberOrUseName(hsrequest);//此逻辑需二开实现
if(workerNumber != null){ if(numOrName != null){
//当前返回类型手机用户名邮箱工号 //当前返回类型手机用户名邮箱工号
result.setUserType(UserProperType.WorkerNumber); // result.setUserType(UserProperType.WorkerNumber);
result.setUserType(UserProperType.UserName);
//用户信息标识 //用户信息标识
result.setUser(workerNumber); result.setUser(numOrName);
result.setSucess(true); result.setSucess(true);
} }
return result; return result;
} }
private String getWorkerNumber(HttpServletRequest hsrequest){ private String getWorkerNumberOrUseName(HttpServletRequest hsrequest){
//第二步SSO认证系统会携带临时code浏览器重定向至应用方回调地址直接从请求中获取code //第二步SSO认证系统会携带临时code浏览器重定向至应用方回调地址直接从请求中获取code
String tempCode = hsrequest.getParameter("code"); String tempCode = hsrequest.getParameter("code");
if(StringUtils.isEmpty(tempCode)){ if(StringUtils.isEmpty(tempCode)){
@ -81,7 +86,12 @@ public class JHSSOAuthHandler implements ThirdSSOAuthHandler {
ssoURL.append(tempCode); ssoURL.append(tempCode);
ssoURL.append("&redirect_uri=");//应用回调地址,需要http格式化 ssoURL.append("&redirect_uri=");//应用回调地址,需要http格式化
try { try {
String linkPostjson = HttpClientUtils.postjson(ssoURL.toString(),null,null); ssoURL.append(URLEncoder.encode(callBackUrl,"UTF-8"));//可能需要http地址转义
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
try {
String linkPostjson = HttpClientUtils.post(ssoURL.toString(),null,null);
if (StringUtils.isNotEmpty(linkPostjson)) { if (StringUtils.isNotEmpty(linkPostjson)) {
JSONObject jsonObject = JSONObject.parseObject(linkPostjson); JSONObject jsonObject = JSONObject.parseObject(linkPostjson);
String accessToken = jsonObject.getString("access_token"); String accessToken = jsonObject.getString("access_token");