pamapi/src/main/java/com/pollex/pam/config/ApplicationProperties.java | ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程 | |
pamapi/src/main/java/com/pollex/pam/security/provider/EServiceAuthenticationProvider.java | ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程 | |
pamapi/src/main/java/com/pollex/pam/service/SendMsgService.java | ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程 | |
pamapi/src/main/java/com/pollex/pam/service/dto/SMSDetail.java | ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程 | |
pamapi/src/main/java/com/pollex/pam/service/dto/SendSMSRequest.java | ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程 | |
pamapi/src/main/java/com/pollex/pam/service/dto/SendSMSResponse.java | ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程 | |
pamapi/src/main/java/com/pollex/pam/service/util/HttpRequestUtil.java | ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程 | |
pamapi/src/main/java/com/pollex/pam/web/rest/TestSendMsgResource.java | ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程 | |
pamapi/src/main/resources/config/application-dev.yml | ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程 |
pamapi/src/main/java/com/pollex/pam/config/ApplicationProperties.java
@@ -18,6 +18,7 @@ private String eServiceLoginUrl; private String eServiceLoginFunc; private String eServiceLoginSys; private SMS sms; public boolean isMockLogin() { return mockLogin; @@ -74,4 +75,51 @@ public void seteServiceLoginSys(String eServiceLoginSys) { this.eServiceLoginSys = eServiceLoginSys; } public SMS getSms() { return sms; } public void setSms(SMS sms) { this.sms = sms; } public static class SMS { private String url; private String sourceCode; private String sender; private String smsType; public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getSourceCode() { return sourceCode; } public void setSourceCode(String sourceCode) { this.sourceCode = sourceCode; } public String getSender() { return sender; } public void setSender(String sender) { this.sender = sender; } public String getSmsType() { return smsType; } public void setSmsType(String smsType) { this.smsType = smsType; } } } pamapi/src/main/java/com/pollex/pam/security/provider/EServiceAuthenticationProvider.java
@@ -8,6 +8,7 @@ import com.pollex.pam.security.token.EServiceAuthenticationToken; import com.pollex.pam.service.LoginRecordService; import com.pollex.pam.service.dto.EServiceResponse; import com.pollex.pam.service.util.HttpRequestUtil; import com.pollex.pam.web.rest.errors.EServiceErrorException; import org.apache.http.conn.ssl.NoopHostnameVerifier; import org.apache.http.conn.ssl.SSLConnectionSocketFactory; @@ -21,7 +22,6 @@ import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.security.authentication.AuthenticationServiceException; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.Authentication; import org.springframework.security.core.AuthenticationException; @@ -105,7 +105,7 @@ private ResponseEntity<EServiceResponse> loginByEService(String account, String paxxword) throws JsonProcessingException, GeneralSecurityException { RestTemplate restTemplate = getTrustAllRestTemplate(); settingMessageConvertesToSpecifyType(restTemplate, MediaType.ALL); settingMessageConvertersToSpecifyType(restTemplate, MediaType.ALL); String urlTemplate = UriComponentsBuilder.fromHttpUrl(applicationProperty.geteServiceLoginUrl()) .queryParam("func", applicationProperty.geteServiceLoginFunc()) @@ -140,7 +140,7 @@ return new RestTemplate(requestFactory); } private void settingMessageConvertesToSpecifyType(RestTemplate restTemplate, MediaType mediaType) { private void settingMessageConvertersToSpecifyType(RestTemplate restTemplate, MediaType mediaType) { List<HttpMessageConverter<?>> messageConverters = new ArrayList<>(); MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); converter.setSupportedMediaTypes(Collections.singletonList(mediaType)); pamapi/src/main/java/com/pollex/pam/service/SendMsgService.java
¤ñ¹ï·sÀÉ®× @@ -0,0 +1,59 @@ package com.pollex.pam.service; import com.fasterxml.jackson.core.JsonProcessingException; import com.pollex.pam.config.ApplicationProperties; import com.pollex.pam.service.dto.SMSDetail; import com.pollex.pam.service.dto.SendSMSRequest; import com.pollex.pam.service.dto.SendSMSResponse; import com.pollex.pam.service.util.HttpRequestUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import java.nio.charset.StandardCharsets; import java.security.KeyManagementException; import java.security.KeyStoreException; import java.security.NoSuchAlgorithmException; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.Base64; import java.util.Base64.Encoder; import java.util.Collections; import java.util.UUID; @Service public class SendMsgService { private final static Logger log = LoggerFactory.getLogger(SendMsgService.class); private final Encoder encoder = Base64.getEncoder(); @Autowired ApplicationProperties applicationProperties; public SendSMSResponse sendMsgBySMS(String subject, String toMobile, String content) throws Exception{ final String SMS_URL = applicationProperties.getSms().getUrl(); SendSMSRequest sendSMSRequest = new SendSMSRequest(); sendSMSRequest.setpKey(UUID.randomUUID().toString()); sendSMSRequest.setSourceCode(applicationProperties.getSms().getSourceCode()); sendSMSRequest.setSender(applicationProperties.getSms().getSender()); sendSMSRequest.setMsgTypeSet(applicationProperties.getSms().getSmsType()); sendSMSRequest.setSendTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:00"))); sendSMSRequest.setSubject(subject); sendSMSRequest.setActivityId(""); SMSDetail smsDetail = new SMSDetail(); smsDetail.setMobile(toMobile); smsDetail.setContent(encoder.encodeToString(content.getBytes(StandardCharsets.UTF_8))); sendSMSRequest.setDetail(Collections.singletonList(smsDetail)); ResponseEntity<SendSMSResponse> responseEntity = HttpRequestUtil.postWithJson(SMS_URL, sendSMSRequest, SendSMSResponse.class); return responseEntity.getBody(); } } pamapi/src/main/java/com/pollex/pam/service/dto/SMSDetail.java
¤ñ¹ï·sÀÉ®× @@ -0,0 +1,26 @@ package com.pollex.pam.service.dto; import com.fasterxml.jackson.annotation.JsonProperty; public class SMSDetail { private String mobile; private String content; @JsonProperty("mobile") public String getMobile() { return mobile; } public void setMobile(String mobile) { this.mobile = mobile; } @JsonProperty("content") public String getContent() { return content; } public void setContent(String content) { this.content = content; } } pamapi/src/main/java/com/pollex/pam/service/dto/SendSMSRequest.java
¤ñ¹ï·sÀÉ®× @@ -0,0 +1,99 @@ package com.pollex.pam.service.dto; import com.fasterxml.jackson.annotation.JsonProperty; import java.util.List; public class SendSMSRequest { private String pKey; private String sourceCode; private String sender; private String sendTime; private String subject; private String activityId; private String mmsPath; private String msgTypeSet; private List<SMSDetail> detail; @JsonProperty("p_key") public String getpKey() { return pKey; } public void setpKey(String pKey) { this.pKey = pKey; } @JsonProperty("source_code") public String getSourceCode() { return sourceCode; } public void setSourceCode(String sourceCode) { this.sourceCode = sourceCode; } @JsonProperty("sender") public String getSender() { return sender; } public void setSender(String sender) { this.sender = sender; } @JsonProperty("send_time") public String getSendTime() { return sendTime; } public void setSendTime(String sendTime) { this.sendTime = sendTime; } @JsonProperty("subject") public String getSubject() { return subject; } public void setSubject(String subject) { this.subject = subject; } @JsonProperty("activity_id") public String getActivityId() { return activityId; } public void setActivityId(String activityId) { this.activityId = activityId; } @JsonProperty("mms_path") public String getMmsPath() { return mmsPath; } public void setMmsPath(String mmsPath) { this.mmsPath = mmsPath; } @JsonProperty("msg_type_set") public String getMsgTypeSet() { return msgTypeSet; } public void setMsgTypeSet(String msgTypeSet) { this.msgTypeSet = msgTypeSet; } @JsonProperty("detail") public List<SMSDetail> getDetail() { return detail; } public void setDetail(List<SMSDetail> detail) { this.detail = detail; } } pamapi/src/main/java/com/pollex/pam/service/dto/SendSMSResponse.java
¤ñ¹ï·sÀÉ®× @@ -0,0 +1,50 @@ package com.pollex.pam.service.dto; import com.fasterxml.jackson.annotation.JsonProperty; public class SendSMSResponse { @JsonProperty("p_key") private String pKey; @JsonProperty("return_code") private String returnCode; @JsonProperty("msg_batchNo") private String msgBatchNo; @JsonProperty("error_msg") private String errorMsg; public String getpKey() { return pKey; } public void setpKey(String pKey) { this.pKey = pKey; } public String getReturnCode() { return returnCode; } public void setReturnCode(String returnCode) { this.returnCode = returnCode; } public String getMsgBatchNo() { return msgBatchNo; } public void setMsgBatchNo(String msgBatchNo) { this.msgBatchNo = msgBatchNo; } public String getErrorMsg() { return errorMsg; } public void setErrorMsg(String errorMsg) { this.errorMsg = errorMsg; } } pamapi/src/main/java/com/pollex/pam/service/util/HttpRequestUtil.java
¤ñ¹ï·sÀÉ®× @@ -0,0 +1,112 @@ package com.pollex.pam.service.util; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.http.conn.ssl.NoopHostnameVerifier; import org.apache.http.conn.ssl.SSLConnectionSocketFactory; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.ssl.SSLContexts; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.http.*; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.web.client.RestTemplate; import javax.net.ssl.SSLContext; import java.security.KeyManagementException; import java.security.KeyStoreException; import java.security.NoSuchAlgorithmException; import java.security.cert.X509Certificate; import java.util.Map; import java.util.Set; public final class HttpRequestUtil { private static final Logger log = LoggerFactory.getLogger(HttpRequestUtil.class); private HttpRequestUtil() {} public static <T> ResponseEntity<T> getWithJson(String url, Class<T> responseType) throws KeyStoreException, NoSuchAlgorithmException, KeyManagementException { return getWithJson(url, responseType, null); } public static <T> ResponseEntity<T> getWithJson(String url, Class<T> responseType, Map<String, String> addedHeaders) throws KeyStoreException, NoSuchAlgorithmException, KeyManagementException { RestTemplate restTemplate = getTrustAllRestTemplate(); HttpHeaders headers = new HttpHeaders(); setHeaders(headers, addedHeaders); HttpEntity<String> httpEntity = new HttpEntity<>(headers); log.debug("HttpRequestUtil get url: {}", url); log.debug("httpEntity = {}", httpEntity); return restTemplate.exchange(url, HttpMethod.GET, httpEntity, responseType); } public static ResponseEntity<String> postWithJson(String url, Object jsonData, Map<String, String> headers) throws KeyStoreException, NoSuchAlgorithmException, JsonProcessingException, KeyManagementException { return postWithJson(url, jsonData, String.class, headers); } public static ResponseEntity<String> postWithJson(String url, Object jsonData) throws KeyStoreException, NoSuchAlgorithmException, JsonProcessingException, KeyManagementException { return postWithJson(url, jsonData, String.class, null); } public static <T> ResponseEntity<T> postWithJson(String url, Object jsonData, Class<T> responseType) throws KeyStoreException, NoSuchAlgorithmException, JsonProcessingException, KeyManagementException { return postWithJson(url, jsonData, responseType, null); } public static <T> ResponseEntity<T> postWithJson(String url, Object jsonData, Class<T> responseType, Map<String, String> addedHeaders) throws JsonProcessingException, KeyStoreException, NoSuchAlgorithmException, KeyManagementException { String parameters = new ObjectMapper().writeValueAsString(jsonData); //妿æå¸¶Base64,debugå°åºä¾æè½æå¾æ if(parameters.length() < 1000){ log.debug("parameters : {}",parameters); } RestTemplate restTemplate = getTrustAllRestTemplate(); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); setHeaders(headers, addedHeaders); HttpEntity<String> entity = new HttpEntity<>(parameters, headers); return restTemplate.exchange(url, HttpMethod.POST, entity, responseType); } private static void setHeaders(HttpHeaders headers, Map<String, String> addedHeaders) { if(addedHeaders != null && addedHeaders.size() > 0) { Set<String> keys = addedHeaders.keySet(); for (String key : keys) { String headerValue = addedHeaders.get(key); headers.set(key, headerValue); log.info("http cust header key: {}", key); log.info("http cust header headerValue: {}", headerValue); } } } private static RestTemplate getTrustAllRestTemplate() throws KeyStoreException, NoSuchAlgorithmException, KeyManagementException { SSLContext sslContext = SSLContexts.custom() .loadTrustMaterial(null, (X509Certificate[] x509Certs, String s) -> true) .build(); SSLConnectionSocketFactory csf = new SSLConnectionSocketFactory(sslContext, new NoopHostnameVerifier()); CloseableHttpClient httpClient = HttpClients.custom() .setSSLSocketFactory(csf) .build(); HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(); requestFactory.setHttpClient(httpClient); requestFactory.setConnectTimeout(300000); requestFactory.setReadTimeout(300000); return new RestTemplate(requestFactory); } } pamapi/src/main/java/com/pollex/pam/web/rest/TestSendMsgResource.java
¤ñ¹ï·sÀÉ®× @@ -0,0 +1,23 @@ package com.pollex.pam.web.rest; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @Deprecated @RestController @RequestMapping("/api/test/sendMsg") public class TestSendMsgResource { @PostMapping("/bySMS") public ResponseEntity<Void> bySMS(@RequestBody Object param) { } @PostMapping("/byEmail") public ResponseEntity<Void> byEmail(@RequestBody Object param) { } } pamapi/src/main/resources/config/application-dev.yml
@@ -119,3 +119,8 @@ e-service-login-url: https://eserviceuat.pcalife.com.tw/sso/chatbotValidate e-service-login-func: ValidateUsrLogin e-service-login-sys: epos sms: url: https://vtwlifewinbo66.pru.intranet.asia/MesgQueueMgmnt/rest/smsSendMsgResource source-code: ePos sender: POS sms-type: 0017