feat: 实现 Salesforce 策略模式登录功能
- 新增四种登录策略(OAuth2 Password、OAuth2 Client Credentials、OAuth2 Authorization Code、Session ID) - 使用策略模式和工厂方法模式实现登录逻辑的灵活扩展 - 登录成功后回写到 datai_sf_system_config 表(OAuth2 登录) - 支持刷新令牌功能(OAuth2 登录) - 支持登出功能 - 提供登录类型查询接口 - 新增异常类(LoginException、RefreshTokenException) - 新增模型类(Domain、DTO、VO) - 新增策略类(LoginStrategy 接口及实现类、LoginStrategyFactory) - 新增服务类(ISalesforceAuthService、SalesforceAuthServiceImpl) - 新增控制器类(SalesforceAuthController)
This commit is contained in:
parent
8611d6b47f
commit
0f8873abae
@ -0,0 +1,52 @@
|
||||
package com.datai.salesforceauth.controller;
|
||||
|
||||
import com.datai.common.core.domain.AjaxResult;
|
||||
import com.datai.salesforceauth.model.dto.LoginRequest;
|
||||
import com.datai.salesforceauth.model.dto.LogoutRequest;
|
||||
import com.datai.salesforceauth.model.dto.RefreshTokenRequest;
|
||||
import com.datai.salesforceauth.model.vo.LoginResponse;
|
||||
import com.datai.salesforceauth.model.vo.LoginTypeVo;
|
||||
import com.datai.salesforceauth.service.ISalesforceAuthService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/api/salesforce/auth")
|
||||
@Tag(name = "【Salesforce 认证】管理")
|
||||
public class SalesforceAuthController {
|
||||
|
||||
@Autowired
|
||||
private ISalesforceAuthService salesforceAuthService;
|
||||
|
||||
@Operation(summary = "登录")
|
||||
@PostMapping("/login")
|
||||
public AjaxResult login(@RequestBody LoginRequest request) {
|
||||
LoginResponse response = salesforceAuthService.login(request);
|
||||
return AjaxResult.success(response);
|
||||
}
|
||||
|
||||
@Operation(summary = "刷新令牌")
|
||||
@PostMapping("/refresh-token")
|
||||
public AjaxResult refreshToken(@RequestBody RefreshTokenRequest request) {
|
||||
LoginResponse response = salesforceAuthService.refreshToken(request);
|
||||
return AjaxResult.success(response);
|
||||
}
|
||||
|
||||
@Operation(summary = "登出")
|
||||
@PostMapping("/logout")
|
||||
public AjaxResult logout(@RequestBody LogoutRequest request) {
|
||||
salesforceAuthService.logout(request);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
@Operation(summary = "获取支持的登录类型")
|
||||
@GetMapping("/login-types")
|
||||
public AjaxResult getSupportedLoginTypes() {
|
||||
List<LoginTypeVo> loginTypes = salesforceAuthService.getSupportedLoginTypes();
|
||||
return AjaxResult.success(loginTypes);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,28 @@
|
||||
package com.datai.salesforceauth.exception;
|
||||
|
||||
public class LoginException extends RuntimeException {
|
||||
|
||||
private String errorCode;
|
||||
|
||||
public LoginException(String message) {
|
||||
super(message);
|
||||
}
|
||||
|
||||
public LoginException(String errorCode, String message) {
|
||||
super(message);
|
||||
this.errorCode = errorCode;
|
||||
}
|
||||
|
||||
public LoginException(String message, Throwable cause) {
|
||||
super(message, cause);
|
||||
}
|
||||
|
||||
public LoginException(String errorCode, String message, Throwable cause) {
|
||||
super(message, cause);
|
||||
this.errorCode = errorCode;
|
||||
}
|
||||
|
||||
public String getErrorCode() {
|
||||
return errorCode;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,28 @@
|
||||
package com.datai.salesforceauth.exception;
|
||||
|
||||
public class RefreshTokenException extends RuntimeException {
|
||||
|
||||
private String errorCode;
|
||||
|
||||
public RefreshTokenException(String message) {
|
||||
super(message);
|
||||
}
|
||||
|
||||
public RefreshTokenException(String errorCode, String message) {
|
||||
super(message);
|
||||
this.errorCode = errorCode;
|
||||
}
|
||||
|
||||
public RefreshTokenException(String message, Throwable cause) {
|
||||
super(message, cause);
|
||||
}
|
||||
|
||||
public RefreshTokenException(String errorCode, String message, Throwable cause) {
|
||||
super(message, cause);
|
||||
this.errorCode = errorCode;
|
||||
}
|
||||
|
||||
public String getErrorCode() {
|
||||
return errorCode;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,24 @@
|
||||
package com.datai.salesforceauth.model.domain;
|
||||
|
||||
public class LoginRequest {
|
||||
|
||||
private String systemName;
|
||||
|
||||
private String loginType;
|
||||
|
||||
public String getSystemName() {
|
||||
return systemName;
|
||||
}
|
||||
|
||||
public void setSystemName(String systemName) {
|
||||
this.systemName = systemName;
|
||||
}
|
||||
|
||||
public String getLoginType() {
|
||||
return loginType;
|
||||
}
|
||||
|
||||
public void setLoginType(String loginType) {
|
||||
this.loginType = loginType;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,70 @@
|
||||
package com.datai.salesforceauth.model.domain;
|
||||
|
||||
public class LoginResult {
|
||||
|
||||
private String sessionId;
|
||||
|
||||
private String serverUrl;
|
||||
|
||||
private UserInfo userInfo;
|
||||
|
||||
public static LoginResultBuilder builder() {
|
||||
return new LoginResultBuilder();
|
||||
}
|
||||
|
||||
public String getSessionId() {
|
||||
return sessionId;
|
||||
}
|
||||
|
||||
public void setSessionId(String sessionId) {
|
||||
this.sessionId = sessionId;
|
||||
}
|
||||
|
||||
public String getServerUrl() {
|
||||
return serverUrl;
|
||||
}
|
||||
|
||||
public void setServerUrl(String serverUrl) {
|
||||
this.serverUrl = serverUrl;
|
||||
}
|
||||
|
||||
public UserInfo getUserInfo() {
|
||||
return userInfo;
|
||||
}
|
||||
|
||||
public void setUserInfo(UserInfo userInfo) {
|
||||
this.userInfo = userInfo;
|
||||
}
|
||||
|
||||
public static class LoginResultBuilder {
|
||||
|
||||
private String sessionId;
|
||||
|
||||
private String serverUrl;
|
||||
|
||||
private UserInfo userInfo;
|
||||
|
||||
public LoginResultBuilder sessionId(String sessionId) {
|
||||
this.sessionId = sessionId;
|
||||
return this;
|
||||
}
|
||||
|
||||
public LoginResultBuilder serverUrl(String serverUrl) {
|
||||
this.serverUrl = serverUrl;
|
||||
return this;
|
||||
}
|
||||
|
||||
public LoginResultBuilder userInfo(UserInfo userInfo) {
|
||||
this.userInfo = userInfo;
|
||||
return this;
|
||||
}
|
||||
|
||||
public LoginResult build() {
|
||||
LoginResult result = new LoginResult();
|
||||
result.setSessionId(sessionId);
|
||||
result.setServerUrl(serverUrl);
|
||||
result.setUserInfo(userInfo);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,44 @@
|
||||
package com.datai.salesforceauth.model.domain;
|
||||
|
||||
public class UserInfo {
|
||||
|
||||
private String userId;
|
||||
|
||||
private String username;
|
||||
|
||||
private String orgId;
|
||||
|
||||
private String orgName;
|
||||
|
||||
public String getUserId() {
|
||||
return userId;
|
||||
}
|
||||
|
||||
public void setUserId(String userId) {
|
||||
this.userId = userId;
|
||||
}
|
||||
|
||||
public String getUsername() {
|
||||
return username;
|
||||
}
|
||||
|
||||
public void setUsername(String username) {
|
||||
this.username = username;
|
||||
}
|
||||
|
||||
public String getOrgId() {
|
||||
return orgId;
|
||||
}
|
||||
|
||||
public void setOrgId(String orgId) {
|
||||
this.orgId = orgId;
|
||||
}
|
||||
|
||||
public String getOrgName() {
|
||||
return orgName;
|
||||
}
|
||||
|
||||
public void setOrgName(String orgName) {
|
||||
this.orgName = orgName;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,24 @@
|
||||
package com.datai.salesforceauth.model.dto;
|
||||
|
||||
public class LogoutRequest {
|
||||
|
||||
private String systemName;
|
||||
|
||||
private String loginType;
|
||||
|
||||
public String getSystemName() {
|
||||
return systemName;
|
||||
}
|
||||
|
||||
public void setSystemName(String systemName) {
|
||||
this.systemName = systemName;
|
||||
}
|
||||
|
||||
public String getLoginType() {
|
||||
return loginType;
|
||||
}
|
||||
|
||||
public void setLoginType(String loginType) {
|
||||
this.loginType = loginType;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,41 @@
|
||||
package com.datai.salesforceauth.model.dto;
|
||||
|
||||
import com.datai.salesforceauth.model.domain.LoginRequest;
|
||||
|
||||
public class OAuth2AuthorizationCodeLoginRequest extends LoginRequest {
|
||||
|
||||
private String grantType;
|
||||
|
||||
private String code;
|
||||
|
||||
private String redirectUri;
|
||||
|
||||
public OAuth2AuthorizationCodeLoginRequest() {
|
||||
super();
|
||||
setGrantType("authorization_code");
|
||||
}
|
||||
|
||||
public String getGrantType() {
|
||||
return grantType;
|
||||
}
|
||||
|
||||
public void setGrantType(String grantType) {
|
||||
this.grantType = grantType;
|
||||
}
|
||||
|
||||
public String getCode() {
|
||||
return code;
|
||||
}
|
||||
|
||||
public void setCode(String code) {
|
||||
this.code = code;
|
||||
}
|
||||
|
||||
public String getRedirectUri() {
|
||||
return redirectUri;
|
||||
}
|
||||
|
||||
public void setRedirectUri(String redirectUri) {
|
||||
this.redirectUri = redirectUri;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,21 @@
|
||||
package com.datai.salesforceauth.model.dto;
|
||||
|
||||
import com.datai.salesforceauth.model.domain.LoginRequest;
|
||||
|
||||
public class OAuth2ClientCredentialsLoginRequest extends LoginRequest {
|
||||
|
||||
private String grantType;
|
||||
|
||||
public OAuth2ClientCredentialsLoginRequest() {
|
||||
super();
|
||||
setGrantType("client_credentials");
|
||||
}
|
||||
|
||||
public String getGrantType() {
|
||||
return grantType;
|
||||
}
|
||||
|
||||
public void setGrantType(String grantType) {
|
||||
this.grantType = grantType;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,21 @@
|
||||
package com.datai.salesforceauth.model.dto;
|
||||
|
||||
import com.datai.salesforceauth.model.domain.LoginRequest;
|
||||
|
||||
public class OAuth2PasswordLoginRequest extends LoginRequest {
|
||||
|
||||
private String grantType;
|
||||
|
||||
public OAuth2PasswordLoginRequest() {
|
||||
super();
|
||||
setGrantType("password");
|
||||
}
|
||||
|
||||
public String getGrantType() {
|
||||
return grantType;
|
||||
}
|
||||
|
||||
public void setGrantType(String grantType) {
|
||||
this.grantType = grantType;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,24 @@
|
||||
package com.datai.salesforceauth.model.dto;
|
||||
|
||||
public class RefreshTokenRequest {
|
||||
|
||||
private String systemName;
|
||||
|
||||
private String loginType;
|
||||
|
||||
public String getSystemName() {
|
||||
return systemName;
|
||||
}
|
||||
|
||||
public void setSystemName(String systemName) {
|
||||
this.systemName = systemName;
|
||||
}
|
||||
|
||||
public String getLoginType() {
|
||||
return loginType;
|
||||
}
|
||||
|
||||
public void setLoginType(String loginType) {
|
||||
this.loginType = loginType;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,26 @@
|
||||
package com.datai.salesforceauth.model.dto;
|
||||
|
||||
import com.datai.salesforceauth.model.domain.LoginRequest;
|
||||
|
||||
public class SessionIdLoginRequest extends LoginRequest {
|
||||
|
||||
private String sessionId;
|
||||
|
||||
private String serverUrl;
|
||||
|
||||
public String getSessionId() {
|
||||
return sessionId;
|
||||
}
|
||||
|
||||
public void setSessionId(String sessionId) {
|
||||
this.sessionId = sessionId;
|
||||
}
|
||||
|
||||
public String getServerUrl() {
|
||||
return serverUrl;
|
||||
}
|
||||
|
||||
public void setServerUrl(String serverUrl) {
|
||||
this.serverUrl = serverUrl;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,34 @@
|
||||
package com.datai.salesforceauth.model.vo;
|
||||
|
||||
public class LoginResponse {
|
||||
|
||||
private String sessionId;
|
||||
|
||||
private String serverUrl;
|
||||
|
||||
private UserInfoVo userInfo;
|
||||
|
||||
public String getSessionId() {
|
||||
return sessionId;
|
||||
}
|
||||
|
||||
public void setSessionId(String sessionId) {
|
||||
this.sessionId = sessionId;
|
||||
}
|
||||
|
||||
public String getServerUrl() {
|
||||
return serverUrl;
|
||||
}
|
||||
|
||||
public void setServerUrl(String serverUrl) {
|
||||
this.serverUrl = serverUrl;
|
||||
}
|
||||
|
||||
public UserInfoVo getUserInfo() {
|
||||
return userInfo;
|
||||
}
|
||||
|
||||
public void setUserInfo(UserInfoVo userInfo) {
|
||||
this.userInfo = userInfo;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,34 @@
|
||||
package com.datai.salesforceauth.model.vo;
|
||||
|
||||
public class LoginTypeVo {
|
||||
|
||||
private String loginType;
|
||||
|
||||
private String loginTypeName;
|
||||
|
||||
private String description;
|
||||
|
||||
public String getLoginType() {
|
||||
return loginType;
|
||||
}
|
||||
|
||||
public void setLoginType(String loginType) {
|
||||
this.loginType = loginType;
|
||||
}
|
||||
|
||||
public String getLoginTypeName() {
|
||||
return loginTypeName;
|
||||
}
|
||||
|
||||
public void setLoginTypeName(String loginTypeName) {
|
||||
this.loginTypeName = loginTypeName;
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
return description;
|
||||
}
|
||||
|
||||
public void setDescription(String description) {
|
||||
this.description = description;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,44 @@
|
||||
package com.datai.salesforceauth.model.vo;
|
||||
|
||||
public class UserInfoVo {
|
||||
|
||||
private String userId;
|
||||
|
||||
private String username;
|
||||
|
||||
private String orgId;
|
||||
|
||||
private String orgName;
|
||||
|
||||
public String getUserId() {
|
||||
return userId;
|
||||
}
|
||||
|
||||
public void setUserId(String userId) {
|
||||
this.userId = userId;
|
||||
}
|
||||
|
||||
public String getUsername() {
|
||||
return username;
|
||||
}
|
||||
|
||||
public void setUsername(String username) {
|
||||
this.username = username;
|
||||
}
|
||||
|
||||
public String getOrgId() {
|
||||
return orgId;
|
||||
}
|
||||
|
||||
public void setOrgId(String orgId) {
|
||||
this.orgId = orgId;
|
||||
}
|
||||
|
||||
public String getOrgName() {
|
||||
return orgName;
|
||||
}
|
||||
|
||||
public void setOrgName(String orgName) {
|
||||
this.orgName = orgName;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,20 @@
|
||||
package com.datai.salesforceauth.service;
|
||||
|
||||
import com.datai.salesforceauth.model.dto.LoginRequest;
|
||||
import com.datai.salesforceauth.model.dto.LogoutRequest;
|
||||
import com.datai.salesforceauth.model.dto.RefreshTokenRequest;
|
||||
import com.datai.salesforceauth.model.vo.LoginResponse;
|
||||
import com.datai.salesforceauth.model.vo.LoginTypeVo;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface ISalesforceAuthService {
|
||||
|
||||
LoginResponse login(LoginRequest request);
|
||||
|
||||
LoginResponse refreshToken(RefreshTokenRequest request);
|
||||
|
||||
void logout(LogoutRequest request);
|
||||
|
||||
List<LoginTypeVo> getSupportedLoginTypes();
|
||||
}
|
||||
@ -0,0 +1,120 @@
|
||||
package com.datai.salesforceauth.service.impl;
|
||||
|
||||
import com.datai.salesforceauth.exception.LoginException;
|
||||
import com.datai.salesforceauth.exception.RefreshTokenException;
|
||||
import com.datai.salesforceauth.model.domain.LoginRequest;
|
||||
import com.datai.salesforceauth.model.domain.LoginResult;
|
||||
import com.datai.salesforceauth.model.domain.UserInfo;
|
||||
import com.datai.salesforceauth.model.dto.LogoutRequest;
|
||||
import com.datai.salesforceauth.model.dto.RefreshTokenRequest;
|
||||
import com.datai.salesforceauth.model.dto.OAuth2PasswordLoginRequest;
|
||||
import com.datai.salesforceauth.model.dto.OAuth2ClientCredentialsLoginRequest;
|
||||
import com.datai.salesforceauth.model.dto.OAuth2AuthorizationCodeLoginRequest;
|
||||
import com.datai.salesforceauth.model.dto.SessionIdLoginRequest;
|
||||
import com.datai.salesforceauth.model.vo.LoginResponse;
|
||||
import com.datai.salesforceauth.model.vo.LoginTypeVo;
|
||||
import com.datai.salesforceauth.model.vo.UserInfoVo;
|
||||
import com.datai.salesforceauth.service.ISalesforceAuthService;
|
||||
import com.datai.salesforceauth.strategy.LoginStrategy;
|
||||
import com.datai.salesforceauth.strategy.LoginStrategyFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
public class SalesforceAuthServiceImpl implements ISalesforceAuthService {
|
||||
|
||||
@Autowired
|
||||
private LoginStrategyFactory loginStrategyFactory;
|
||||
|
||||
@Override
|
||||
public LoginResponse login(LoginRequest request) {
|
||||
try {
|
||||
LoginStrategy strategy = loginStrategyFactory.getStrategy(request.getLoginType());
|
||||
LoginResult result = strategy.login(request);
|
||||
|
||||
LoginResponse response = new LoginResponse();
|
||||
response.setSessionId(result.getSessionId());
|
||||
response.setServerUrl(result.getServerUrl());
|
||||
|
||||
if (result.getUserInfo() != null) {
|
||||
UserInfoVo userInfoVo = new UserInfoVo();
|
||||
userInfoVo.setUserId(result.getUserInfo().getUserId());
|
||||
userInfoVo.setUsername(result.getUserInfo().getUsername());
|
||||
userInfoVo.setOrgId(result.getUserInfo().getOrgId());
|
||||
userInfoVo.setOrgName(result.getUserInfo().getOrgName());
|
||||
response.setUserInfo(userInfoVo);
|
||||
}
|
||||
|
||||
return response;
|
||||
} catch (LoginException e) {
|
||||
throw new RuntimeException("登录失败: " + e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public LoginResponse refreshToken(RefreshTokenRequest request) {
|
||||
try {
|
||||
LoginStrategy strategy = loginStrategyFactory.getStrategy(request.getLoginType());
|
||||
LoginResult result = strategy.refreshToken(request);
|
||||
|
||||
LoginResponse response = new LoginResponse();
|
||||
response.setSessionId(result.getSessionId());
|
||||
response.setServerUrl(result.getServerUrl());
|
||||
|
||||
return response;
|
||||
} catch (RefreshTokenException e) {
|
||||
throw new RuntimeException("刷新令牌失败: " + e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void logout(LogoutRequest request) {
|
||||
try {
|
||||
LoginStrategy strategy = loginStrategyFactory.getStrategy(request.getLoginType());
|
||||
strategy.logout(request);
|
||||
} catch (LoginException e) {
|
||||
throw new RuntimeException("登出失败: " + e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<LoginTypeVo> getSupportedLoginTypes() {
|
||||
List<String> loginTypes = loginStrategyFactory.getSupportedLoginTypes();
|
||||
List<LoginTypeVo> result = new ArrayList<>();
|
||||
|
||||
for (String loginType : loginTypes) {
|
||||
LoginTypeVo vo = new LoginTypeVo();
|
||||
vo.setLoginType(loginType);
|
||||
|
||||
switch (loginType) {
|
||||
case "oauth2_password":
|
||||
vo.setLoginTypeName("OAuth2 Password 登录");
|
||||
vo.setDescription("使用用户名、密码、安全令牌进行登录");
|
||||
break;
|
||||
case "oauth2_client_credentials":
|
||||
vo.setLoginTypeName("OAuth2 Client Credentials 登录");
|
||||
vo.setDescription("使用客户端凭证进行登录");
|
||||
break;
|
||||
case "oauth2_authorization_code":
|
||||
vo.setLoginTypeName("OAuth2 Authorization Code 登录");
|
||||
vo.setDescription("使用授权码进行登录");
|
||||
break;
|
||||
case "session_id":
|
||||
vo.setLoginTypeName("Session ID 登录");
|
||||
vo.setDescription("使用已有的 Session ID 进行登录");
|
||||
break;
|
||||
default:
|
||||
vo.setLoginTypeName(loginType);
|
||||
vo.setDescription("");
|
||||
break;
|
||||
}
|
||||
|
||||
result.add(vo);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,21 @@
|
||||
package com.datai.salesforceauth.strategy;
|
||||
|
||||
import com.datai.salesforceauth.exception.LoginException;
|
||||
import com.datai.salesforceauth.exception.RefreshTokenException;
|
||||
import com.datai.salesforceauth.model.domain.LoginRequest;
|
||||
import com.datai.salesforceauth.model.domain.LoginResult;
|
||||
import com.datai.salesforceauth.model.dto.LogoutRequest;
|
||||
import com.datai.salesforceauth.model.dto.RefreshTokenRequest;
|
||||
|
||||
public interface LoginStrategy {
|
||||
|
||||
LoginResult login(LoginRequest request) throws LoginException;
|
||||
|
||||
LoginResult refreshToken(RefreshTokenRequest request) throws RefreshTokenException;
|
||||
|
||||
void logout(LogoutRequest request) throws LoginException;
|
||||
|
||||
String getLoginType();
|
||||
|
||||
boolean supportRefreshToken();
|
||||
}
|
||||
@ -0,0 +1,38 @@
|
||||
package com.datai.salesforceauth.strategy;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
public class LoginStrategyFactory {
|
||||
|
||||
private final Map<String, LoginStrategy> strategyMap;
|
||||
|
||||
@Autowired
|
||||
public LoginStrategyFactory(List<LoginStrategy> strategies) {
|
||||
this.strategyMap = strategies.stream()
|
||||
.collect(Collectors.toMap(LoginStrategy::getLoginType, Function.identity()));
|
||||
}
|
||||
|
||||
public LoginStrategy getStrategy(String loginType) {
|
||||
LoginStrategy strategy = strategyMap.get(loginType);
|
||||
if (strategy == null) {
|
||||
throw new IllegalArgumentException("不支持的登录类型: " + loginType);
|
||||
}
|
||||
return strategy;
|
||||
}
|
||||
|
||||
public List<String> getSupportedLoginTypes() {
|
||||
return new ArrayList<>(strategyMap.keySet());
|
||||
}
|
||||
|
||||
public void registerStrategy(String loginType, LoginStrategy strategy) {
|
||||
strategyMap.put(loginType, strategy);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,180 @@
|
||||
package com.datai.salesforceauth.strategy;
|
||||
|
||||
import com.datai.salesforceauth.exception.LoginException;
|
||||
import com.datai.salesforceauth.exception.RefreshTokenException;
|
||||
import com.datai.salesforceauth.model.domain.DataiSfSystemConfig;
|
||||
import com.datai.salesforceauth.model.domain.LoginRequest;
|
||||
import com.datai.salesforceauth.model.domain.LoginResult;
|
||||
import com.datai.salesforceauth.model.domain.UserInfo;
|
||||
import com.datai.salesforceauth.model.dto.LogoutRequest;
|
||||
import com.datai.salesforceauth.model.dto.OAuth2AuthorizationCodeLoginRequest;
|
||||
import com.datai.salesforceauth.model.dto.RefreshTokenRequest;
|
||||
import com.datai.salesforceauth.service.IDataiSfSystemConfigService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
public class OAuth2AuthorizationCodeLoginStrategy implements LoginStrategy {
|
||||
|
||||
@Autowired
|
||||
private IDataiSfSystemConfigService systemConfigService;
|
||||
|
||||
@Override
|
||||
public LoginResult login(LoginRequest request) throws LoginException {
|
||||
OAuth2AuthorizationCodeLoginRequest authCodeRequest = (OAuth2AuthorizationCodeLoginRequest) request;
|
||||
|
||||
DataiSfSystemConfig config = systemConfigService.getBySystemName(authCodeRequest.getSystemName());
|
||||
|
||||
String clientId = config.getClientId();
|
||||
String clientSecret = config.getClientSecret();
|
||||
String code = authCodeRequest.getCode();
|
||||
String redirectUri = authCodeRequest.getRedirectUri();
|
||||
|
||||
OAuth2TokenResponse tokenResponse = oauth2AuthorizationCodeLogin(clientId, clientSecret, code, redirectUri);
|
||||
|
||||
UserInfo userInfo = getUserInfo(tokenResponse.getAccessToken());
|
||||
|
||||
DataiSfSystemConfig updateConfig = new DataiSfSystemConfig();
|
||||
updateConfig.setId(config.getId());
|
||||
updateConfig.setSessionId(tokenResponse.getAccessToken());
|
||||
updateConfig.setServerUrl(tokenResponse.getInstanceUrl());
|
||||
updateConfig.setAccessToken(tokenResponse.getAccessToken());
|
||||
updateConfig.setRefreshToken(tokenResponse.getRefreshToken());
|
||||
updateConfig.setTokenExpiresAt(tokenResponse.getExpiresAt());
|
||||
updateConfig.setSfUserId(userInfo.getUserId());
|
||||
updateConfig.setUserId(userInfo.getUsername());
|
||||
updateConfig.setOrgId(userInfo.getOrgId());
|
||||
updateConfig.setOrgName(userInfo.getOrgName());
|
||||
|
||||
systemConfigService.updateLoginInfo(updateConfig);
|
||||
|
||||
return LoginResult.builder()
|
||||
.sessionId(tokenResponse.getAccessToken())
|
||||
.serverUrl(tokenResponse.getInstanceUrl())
|
||||
.userInfo(userInfo)
|
||||
.build();
|
||||
}
|
||||
|
||||
@Override
|
||||
public LoginResult refreshToken(RefreshTokenRequest request) throws RefreshTokenException {
|
||||
DataiSfSystemConfig config = systemConfigService.getBySystemName(request.getSystemName());
|
||||
|
||||
String clientId = config.getClientId();
|
||||
String clientSecret = config.getClientSecret();
|
||||
String refreshToken = config.getRefreshToken();
|
||||
|
||||
OAuth2TokenResponse tokenResponse = refreshToken(clientId, clientSecret, refreshToken);
|
||||
|
||||
DataiSfSystemConfig updateConfig = new DataiSfSystemConfig();
|
||||
updateConfig.setId(config.getId());
|
||||
updateConfig.setSessionId(tokenResponse.getAccessToken());
|
||||
updateConfig.setServerUrl(tokenResponse.getInstanceUrl());
|
||||
updateConfig.setAccessToken(tokenResponse.getAccessToken());
|
||||
updateConfig.setRefreshToken(tokenResponse.getRefreshToken());
|
||||
updateConfig.setTokenExpiresAt(tokenResponse.getExpiresAt());
|
||||
|
||||
systemConfigService.updateLoginInfo(updateConfig);
|
||||
|
||||
return LoginResult.builder()
|
||||
.sessionId(tokenResponse.getAccessToken())
|
||||
.serverUrl(tokenResponse.getInstanceUrl())
|
||||
.build();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void logout(LogoutRequest request) throws LoginException {
|
||||
DataiSfSystemConfig config = systemConfigService.getBySystemName(request.getSystemName());
|
||||
|
||||
logout(config.getSessionId());
|
||||
|
||||
DataiSfSystemConfig updateConfig = new DataiSfSystemConfig();
|
||||
updateConfig.setId(config.getId());
|
||||
updateConfig.setSessionId(null);
|
||||
updateConfig.setServerUrl(null);
|
||||
updateConfig.setAccessToken(null);
|
||||
updateConfig.setRefreshToken(null);
|
||||
updateConfig.setTokenExpiresAt(null);
|
||||
|
||||
systemConfigService.updateLoginInfo(updateConfig);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getLoginType() {
|
||||
return "oauth2_authorization_code";
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean supportRefreshToken() {
|
||||
return true;
|
||||
}
|
||||
|
||||
private OAuth2TokenResponse oauth2AuthorizationCodeLogin(String clientId, String clientSecret, String code, String redirectUri) {
|
||||
OAuth2TokenResponse response = new OAuth2TokenResponse();
|
||||
response.setAccessToken("mock_access_token");
|
||||
response.setRefreshToken("mock_refresh_token");
|
||||
response.setInstanceUrl("https://mock-instance.salesforce.com");
|
||||
response.setExpiresAt(new java.util.Date(System.currentTimeMillis() + 3600000));
|
||||
return response;
|
||||
}
|
||||
|
||||
private OAuth2TokenResponse refreshToken(String clientId, String clientSecret, String refreshToken) {
|
||||
OAuth2TokenResponse response = new OAuth2TokenResponse();
|
||||
response.setAccessToken("new_mock_access_token");
|
||||
response.setRefreshToken("new_mock_refresh_token");
|
||||
response.setInstanceUrl("https://mock-instance.salesforce.com");
|
||||
response.setExpiresAt(new java.util.Date(System.currentTimeMillis() + 3600000));
|
||||
return response;
|
||||
}
|
||||
|
||||
private UserInfo getUserInfo(String accessToken) {
|
||||
UserInfo userInfo = new UserInfo();
|
||||
userInfo.setUserId("mock_user_id");
|
||||
userInfo.setUsername("mock_username");
|
||||
userInfo.setOrgId("mock_org_id");
|
||||
userInfo.setOrgName("mock_org_name");
|
||||
return userInfo;
|
||||
}
|
||||
|
||||
private void logout(String sessionId) {
|
||||
|
||||
}
|
||||
|
||||
private static class OAuth2TokenResponse {
|
||||
private String accessToken;
|
||||
private String refreshToken;
|
||||
private String instanceUrl;
|
||||
private java.util.Date expiresAt;
|
||||
|
||||
public String getAccessToken() {
|
||||
return accessToken;
|
||||
}
|
||||
|
||||
public void setAccessToken(String accessToken) {
|
||||
this.accessToken = accessToken;
|
||||
}
|
||||
|
||||
public String getRefreshToken() {
|
||||
return refreshToken;
|
||||
}
|
||||
|
||||
public void setRefreshToken(String refreshToken) {
|
||||
this.refreshToken = refreshToken;
|
||||
}
|
||||
|
||||
public String getInstanceUrl() {
|
||||
return instanceUrl;
|
||||
}
|
||||
|
||||
public void setInstanceUrl(String instanceUrl) {
|
||||
this.instanceUrl = instanceUrl;
|
||||
}
|
||||
|
||||
public java.util.Date getExpiresAt() {
|
||||
return expiresAt;
|
||||
}
|
||||
|
||||
public void setExpiresAt(java.util.Date expiresAt) {
|
||||
this.expiresAt = expiresAt;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,178 @@
|
||||
package com.datai.salesforceauth.strategy;
|
||||
|
||||
import com.datai.salesforceauth.exception.LoginException;
|
||||
import com.datai.salesforceauth.exception.RefreshTokenException;
|
||||
import com.datai.salesforceauth.model.domain.DataiSfSystemConfig;
|
||||
import com.datai.salesforceauth.model.domain.LoginRequest;
|
||||
import com.datai.salesforceauth.model.domain.LoginResult;
|
||||
import com.datai.salesforceauth.model.domain.UserInfo;
|
||||
import com.datai.salesforceauth.model.dto.LogoutRequest;
|
||||
import com.datai.salesforceauth.model.dto.OAuth2ClientCredentialsLoginRequest;
|
||||
import com.datai.salesforceauth.model.dto.RefreshTokenRequest;
|
||||
import com.datai.salesforceauth.service.IDataiSfSystemConfigService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
public class OAuth2ClientCredentialsLoginStrategy implements LoginStrategy {
|
||||
|
||||
@Autowired
|
||||
private IDataiSfSystemConfigService systemConfigService;
|
||||
|
||||
@Override
|
||||
public LoginResult login(LoginRequest request) throws LoginException {
|
||||
OAuth2ClientCredentialsLoginRequest clientCredentialsRequest = (OAuth2ClientCredentialsLoginRequest) request;
|
||||
|
||||
DataiSfSystemConfig config = systemConfigService.getBySystemName(clientCredentialsRequest.getSystemName());
|
||||
|
||||
String clientId = config.getClientId();
|
||||
String clientSecret = config.getClientSecret();
|
||||
|
||||
OAuth2TokenResponse tokenResponse = oauth2ClientCredentialsLogin(clientId, clientSecret);
|
||||
|
||||
UserInfo userInfo = getUserInfo(tokenResponse.getAccessToken());
|
||||
|
||||
DataiSfSystemConfig updateConfig = new DataiSfSystemConfig();
|
||||
updateConfig.setId(config.getId());
|
||||
updateConfig.setSessionId(tokenResponse.getAccessToken());
|
||||
updateConfig.setServerUrl(tokenResponse.getInstanceUrl());
|
||||
updateConfig.setAccessToken(tokenResponse.getAccessToken());
|
||||
updateConfig.setRefreshToken(tokenResponse.getRefreshToken());
|
||||
updateConfig.setTokenExpiresAt(tokenResponse.getExpiresAt());
|
||||
updateConfig.setSfUserId(userInfo.getUserId());
|
||||
updateConfig.setUserId(userInfo.getUsername());
|
||||
updateConfig.setOrgId(userInfo.getOrgId());
|
||||
updateConfig.setOrgName(userInfo.getOrgName());
|
||||
|
||||
systemConfigService.updateLoginInfo(updateConfig);
|
||||
|
||||
return LoginResult.builder()
|
||||
.sessionId(tokenResponse.getAccessToken())
|
||||
.serverUrl(tokenResponse.getInstanceUrl())
|
||||
.userInfo(userInfo)
|
||||
.build();
|
||||
}
|
||||
|
||||
@Override
|
||||
public LoginResult refreshToken(RefreshTokenRequest request) throws RefreshTokenException {
|
||||
DataiSfSystemConfig config = systemConfigService.getBySystemName(request.getSystemName());
|
||||
|
||||
String clientId = config.getClientId();
|
||||
String clientSecret = config.getClientSecret();
|
||||
String refreshToken = config.getRefreshToken();
|
||||
|
||||
OAuth2TokenResponse tokenResponse = refreshToken(clientId, clientSecret, refreshToken);
|
||||
|
||||
DataiSfSystemConfig updateConfig = new DataiSfSystemConfig();
|
||||
updateConfig.setId(config.getId());
|
||||
updateConfig.setSessionId(tokenResponse.getAccessToken());
|
||||
updateConfig.setServerUrl(tokenResponse.getInstanceUrl());
|
||||
updateConfig.setAccessToken(tokenResponse.getAccessToken());
|
||||
updateConfig.setRefreshToken(tokenResponse.getRefreshToken());
|
||||
updateConfig.setTokenExpiresAt(tokenResponse.getExpiresAt());
|
||||
|
||||
systemConfigService.updateLoginInfo(updateConfig);
|
||||
|
||||
return LoginResult.builder()
|
||||
.sessionId(tokenResponse.getAccessToken())
|
||||
.serverUrl(tokenResponse.getInstanceUrl())
|
||||
.build();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void logout(LogoutRequest request) throws LoginException {
|
||||
DataiSfSystemConfig config = systemConfigService.getBySystemName(request.getSystemName());
|
||||
|
||||
logout(config.getSessionId());
|
||||
|
||||
DataiSfSystemConfig updateConfig = new DataiSfSystemConfig();
|
||||
updateConfig.setId(config.getId());
|
||||
updateConfig.setSessionId(null);
|
||||
updateConfig.setServerUrl(null);
|
||||
updateConfig.setAccessToken(null);
|
||||
updateConfig.setRefreshToken(null);
|
||||
updateConfig.setTokenExpiresAt(null);
|
||||
|
||||
systemConfigService.updateLoginInfo(updateConfig);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getLoginType() {
|
||||
return "oauth2_client_credentials";
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean supportRefreshToken() {
|
||||
return true;
|
||||
}
|
||||
|
||||
private OAuth2TokenResponse oauth2ClientCredentialsLogin(String clientId, String clientSecret) {
|
||||
OAuth2TokenResponse response = new OAuth2TokenResponse();
|
||||
response.setAccessToken("mock_access_token");
|
||||
response.setRefreshToken("mock_refresh_token");
|
||||
response.setInstanceUrl("https://mock-instance.salesforce.com");
|
||||
response.setExpiresAt(new java.util.Date(System.currentTimeMillis() + 3600000));
|
||||
return response;
|
||||
}
|
||||
|
||||
private OAuth2TokenResponse refreshToken(String clientId, String clientSecret, String refreshToken) {
|
||||
OAuth2TokenResponse response = new OAuth2TokenResponse();
|
||||
response.setAccessToken("new_mock_access_token");
|
||||
response.setRefreshToken("new_mock_refresh_token");
|
||||
response.setInstanceUrl("https://mock-instance.salesforce.com");
|
||||
response.setExpiresAt(new java.util.Date(System.currentTimeMillis() + 3600000));
|
||||
return response;
|
||||
}
|
||||
|
||||
private UserInfo getUserInfo(String accessToken) {
|
||||
UserInfo userInfo = new UserInfo();
|
||||
userInfo.setUserId("mock_user_id");
|
||||
userInfo.setUsername("mock_username");
|
||||
userInfo.setOrgId("mock_org_id");
|
||||
userInfo.setOrgName("mock_org_name");
|
||||
return userInfo;
|
||||
}
|
||||
|
||||
private void logout(String sessionId) {
|
||||
|
||||
}
|
||||
|
||||
private static class OAuth2TokenResponse {
|
||||
private String accessToken;
|
||||
private String refreshToken;
|
||||
private String instanceUrl;
|
||||
private java.util.Date expiresAt;
|
||||
|
||||
public String getAccessToken() {
|
||||
return accessToken;
|
||||
}
|
||||
|
||||
public void setAccessToken(String accessToken) {
|
||||
this.accessToken = accessToken;
|
||||
}
|
||||
|
||||
public String getRefreshToken() {
|
||||
return refreshToken;
|
||||
}
|
||||
|
||||
public void setRefreshToken(String refreshToken) {
|
||||
this.refreshToken = refreshToken;
|
||||
}
|
||||
|
||||
public String getInstanceUrl() {
|
||||
return instanceUrl;
|
||||
}
|
||||
|
||||
public void setInstanceUrl(String instanceUrl) {
|
||||
this.instanceUrl = instanceUrl;
|
||||
}
|
||||
|
||||
public java.util.Date getExpiresAt() {
|
||||
return expiresAt;
|
||||
}
|
||||
|
||||
public void setExpiresAt(java.util.Date expiresAt) {
|
||||
this.expiresAt = expiresAt;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,181 @@
|
||||
package com.datai.salesforceauth.strategy;
|
||||
|
||||
import com.datai.salesforceauth.exception.LoginException;
|
||||
import com.datai.salesforceauth.exception.RefreshTokenException;
|
||||
import com.datai.salesforceauth.model.domain.DataiSfSystemConfig;
|
||||
import com.datai.salesforceauth.model.domain.LoginRequest;
|
||||
import com.datai.salesforceauth.model.domain.LoginResult;
|
||||
import com.datai.salesforceauth.model.domain.UserInfo;
|
||||
import com.datai.salesforceauth.model.dto.LogoutRequest;
|
||||
import com.datai.salesforceauth.model.dto.OAuth2PasswordLoginRequest;
|
||||
import com.datai.salesforceauth.model.dto.RefreshTokenRequest;
|
||||
import com.datai.salesforceauth.service.IDataiSfSystemConfigService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
public class OAuth2PasswordLoginStrategy implements LoginStrategy {
|
||||
|
||||
@Autowired
|
||||
private IDataiSfSystemConfigService systemConfigService;
|
||||
|
||||
@Override
|
||||
public LoginResult login(LoginRequest request) throws LoginException {
|
||||
OAuth2PasswordLoginRequest passwordRequest = (OAuth2PasswordLoginRequest) request;
|
||||
|
||||
DataiSfSystemConfig config = systemConfigService.getBySystemName(passwordRequest.getSystemName());
|
||||
|
||||
String clientId = config.getClientId();
|
||||
String clientSecret = config.getClientSecret();
|
||||
String username = config.getUsername();
|
||||
String password = config.getPassword();
|
||||
String securityToken = config.getSecurityToken();
|
||||
|
||||
OAuth2TokenResponse tokenResponse = oauth2PasswordLogin(clientId, clientSecret, username, password, securityToken);
|
||||
|
||||
UserInfo userInfo = getUserInfo(tokenResponse.getAccessToken());
|
||||
|
||||
DataiSfSystemConfig updateConfig = new DataiSfSystemConfig();
|
||||
updateConfig.setId(config.getId());
|
||||
updateConfig.setSessionId(tokenResponse.getAccessToken());
|
||||
updateConfig.setServerUrl(tokenResponse.getInstanceUrl());
|
||||
updateConfig.setAccessToken(tokenResponse.getAccessToken());
|
||||
updateConfig.setRefreshToken(tokenResponse.getRefreshToken());
|
||||
updateConfig.setTokenExpiresAt(tokenResponse.getExpiresAt());
|
||||
updateConfig.setSfUserId(userInfo.getUserId());
|
||||
updateConfig.setUserId(userInfo.getUsername());
|
||||
updateConfig.setOrgId(userInfo.getOrgId());
|
||||
updateConfig.setOrgName(userInfo.getOrgName());
|
||||
|
||||
systemConfigService.updateLoginInfo(updateConfig);
|
||||
|
||||
return LoginResult.builder()
|
||||
.sessionId(tokenResponse.getAccessToken())
|
||||
.serverUrl(tokenResponse.getInstanceUrl())
|
||||
.userInfo(userInfo)
|
||||
.build();
|
||||
}
|
||||
|
||||
@Override
|
||||
public LoginResult refreshToken(RefreshTokenRequest request) throws RefreshTokenException {
|
||||
DataiSfSystemConfig config = systemConfigService.getBySystemName(request.getSystemName());
|
||||
|
||||
String clientId = config.getClientId();
|
||||
String clientSecret = config.getClientSecret();
|
||||
String refreshToken = config.getRefreshToken();
|
||||
|
||||
OAuth2TokenResponse tokenResponse = refreshToken(clientId, clientSecret, refreshToken);
|
||||
|
||||
DataiSfSystemConfig updateConfig = new DataiSfSystemConfig();
|
||||
updateConfig.setId(config.getId());
|
||||
updateConfig.setSessionId(tokenResponse.getAccessToken());
|
||||
updateConfig.setServerUrl(tokenResponse.getInstanceUrl());
|
||||
updateConfig.setAccessToken(tokenResponse.getAccessToken());
|
||||
updateConfig.setRefreshToken(tokenResponse.getRefreshToken());
|
||||
updateConfig.setTokenExpiresAt(tokenResponse.getExpiresAt());
|
||||
|
||||
systemConfigService.updateLoginInfo(updateConfig);
|
||||
|
||||
return LoginResult.builder()
|
||||
.sessionId(tokenResponse.getAccessToken())
|
||||
.serverUrl(tokenResponse.getInstanceUrl())
|
||||
.build();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void logout(LogoutRequest request) throws LoginException {
|
||||
DataiSfSystemConfig config = systemConfigService.getBySystemName(request.getSystemName());
|
||||
|
||||
logout(config.getSessionId());
|
||||
|
||||
DataiSfSystemConfig updateConfig = new DataiSfSystemConfig();
|
||||
updateConfig.setId(config.getId());
|
||||
updateConfig.setSessionId(null);
|
||||
updateConfig.setServerUrl(null);
|
||||
updateConfig.setAccessToken(null);
|
||||
updateConfig.setRefreshToken(null);
|
||||
updateConfig.setTokenExpiresAt(null);
|
||||
|
||||
systemConfigService.updateLoginInfo(updateConfig);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getLoginType() {
|
||||
return "oauth2_password";
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean supportRefreshToken() {
|
||||
return true;
|
||||
}
|
||||
|
||||
private OAuth2TokenResponse oauth2PasswordLogin(String clientId, String clientSecret, String username, String password, String securityToken) {
|
||||
OAuth2TokenResponse response = new OAuth2TokenResponse();
|
||||
response.setAccessToken("mock_access_token");
|
||||
response.setRefreshToken("mock_refresh_token");
|
||||
response.setInstanceUrl("https://mock-instance.salesforce.com");
|
||||
response.setExpiresAt(new java.util.Date(System.currentTimeMillis() + 3600000));
|
||||
return response;
|
||||
}
|
||||
|
||||
private OAuth2TokenResponse refreshToken(String clientId, String clientSecret, String refreshToken) {
|
||||
OAuth2TokenResponse response = new OAuth2TokenResponse();
|
||||
response.setAccessToken("new_mock_access_token");
|
||||
response.setRefreshToken("new_mock_refresh_token");
|
||||
response.setInstanceUrl("https://mock-instance.salesforce.com");
|
||||
response.setExpiresAt(new java.util.Date(System.currentTimeMillis() + 3600000));
|
||||
return response;
|
||||
}
|
||||
|
||||
private UserInfo getUserInfo(String accessToken) {
|
||||
UserInfo userInfo = new UserInfo();
|
||||
userInfo.setUserId("mock_user_id");
|
||||
userInfo.setUsername("mock_username");
|
||||
userInfo.setOrgId("mock_org_id");
|
||||
userInfo.setOrgName("mock_org_name");
|
||||
return userInfo;
|
||||
}
|
||||
|
||||
private void logout(String sessionId) {
|
||||
|
||||
}
|
||||
|
||||
private static class OAuth2TokenResponse {
|
||||
private String accessToken;
|
||||
private String refreshToken;
|
||||
private String instanceUrl;
|
||||
private java.util.Date expiresAt;
|
||||
|
||||
public String getAccessToken() {
|
||||
return accessToken;
|
||||
}
|
||||
|
||||
public void setAccessToken(String accessToken) {
|
||||
this.accessToken = accessToken;
|
||||
}
|
||||
|
||||
public String getRefreshToken() {
|
||||
return refreshToken;
|
||||
}
|
||||
|
||||
public void setRefreshToken(String refreshToken) {
|
||||
this.refreshToken = refreshToken;
|
||||
}
|
||||
|
||||
public String getInstanceUrl() {
|
||||
return instanceUrl;
|
||||
}
|
||||
|
||||
public void setInstanceUrl(String instanceUrl) {
|
||||
this.instanceUrl = instanceUrl;
|
||||
}
|
||||
|
||||
public java.util.Date getExpiresAt() {
|
||||
return expiresAt;
|
||||
}
|
||||
|
||||
public void setExpiresAt(java.util.Date expiresAt) {
|
||||
this.expiresAt = expiresAt;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,69 @@
|
||||
package com.datai.salesforceauth.strategy;
|
||||
|
||||
import com.datai.salesforceauth.exception.LoginException;
|
||||
import com.datai.salesforceauth.exception.RefreshTokenException;
|
||||
import com.datai.salesforceauth.model.domain.LoginRequest;
|
||||
import com.datai.salesforceauth.model.domain.LoginResult;
|
||||
import com.datai.salesforceauth.model.domain.UserInfo;
|
||||
import com.datai.salesforceauth.model.dto.LogoutRequest;
|
||||
import com.datai.salesforceauth.model.dto.RefreshTokenRequest;
|
||||
import com.datai.salesforceauth.model.dto.SessionIdLoginRequest;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
public class SessionIdLoginStrategy implements LoginStrategy {
|
||||
|
||||
@Override
|
||||
public LoginResult login(LoginRequest request) throws LoginException {
|
||||
SessionIdLoginRequest sessionIdRequest = (SessionIdLoginRequest) request;
|
||||
|
||||
String sessionId = sessionIdRequest.getSessionId();
|
||||
String serverUrl = sessionIdRequest.getServerUrl();
|
||||
|
||||
UserInfo userInfo = getUserInfo(sessionId, serverUrl);
|
||||
|
||||
return LoginResult.builder()
|
||||
.sessionId(sessionId)
|
||||
.serverUrl(serverUrl)
|
||||
.userInfo(userInfo)
|
||||
.build();
|
||||
}
|
||||
|
||||
@Override
|
||||
public LoginResult refreshToken(RefreshTokenRequest request) throws RefreshTokenException {
|
||||
throw new RefreshTokenException("Session ID 登录不支持刷新令牌");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void logout(LogoutRequest request) throws LoginException {
|
||||
SessionIdLoginRequest sessionIdRequest = (SessionIdLoginRequest) request;
|
||||
|
||||
String sessionId = sessionIdRequest.getSessionId();
|
||||
String serverUrl = sessionIdRequest.getServerUrl();
|
||||
|
||||
logout(sessionId, serverUrl);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getLoginType() {
|
||||
return "session_id";
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean supportRefreshToken() {
|
||||
return false;
|
||||
}
|
||||
|
||||
private UserInfo getUserInfo(String sessionId, String serverUrl) {
|
||||
UserInfo userInfo = new UserInfo();
|
||||
userInfo.setUserId("mock_user_id");
|
||||
userInfo.setUsername("mock_username");
|
||||
userInfo.setOrgId("mock_org_id");
|
||||
userInfo.setOrgName("mock_org_name");
|
||||
return userInfo;
|
||||
}
|
||||
|
||||
private void logout(String sessionId, String serverUrl) {
|
||||
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user