Java tutorial
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package com.rootcloud.ejb; import java.security.KeyManagementException; import java.security.KeyStoreException; import java.security.NoSuchAlgorithmException; import java.util.Base64.Encoder; import java.util.Calendar; import javax.crypto.Cipher; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESedeKeySpec; import javax.ejb.Singleton; import javax.ejb.Startup; import javax.net.ssl.HostnameVerifier; import javax.net.ssl.SSLContext; import org.apache.http.HttpEntity; import org.apache.http.HttpStatus; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpPost; import org.apache.http.conn.ssl.NoopHostnameVerifier; import org.apache.http.conn.ssl.SSLConnectionSocketFactory; import org.apache.http.conn.ssl.TrustSelfSignedStrategy; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.ssl.SSLContextBuilder; import org.apache.http.util.EntityUtils; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.json.JSONObject; /** * * @author C0160 */ @Startup @Singleton public class RootCloudBean { //private final String baseurl = "https://s3.rootcloud.com"; //private final String baseurl = "https://saas-uop-pre.irootech.com"; private final String baseurl = "https://saas-uop-delivery-dev.irootechapp.com"; private final String DES_Key = "cf410f8f9a4a42cc7a7f48fc4134e8f9"; private final String username = "13916606120"; private final String password = "606120"; private final String current_app = "A0011"; //private final String current_tenant = "4MSSK01"; //private final String current_tenant = "4X9SN01"; private final String current_tenant = "57L9201"; private String access_token; private String refresh_token; private Integer expires = 300; private Calendar e; private CloseableHttpClient httpClient; protected final Logger log4j = LogManager.getLogger(); public RootCloudBean() { } private CloseableHttpClient createHttpClient() throws KeyManagementException, NoSuchAlgorithmException, KeyStoreException { SSLContext sslContext = SSLContextBuilder.create().loadTrustMaterial(new TrustSelfSignedStrategy()).build(); HostnameVerifier allowAllHosts = new NoopHostnameVerifier(); SSLConnectionSocketFactory connectionFactory = new SSLConnectionSocketFactory(sslContext, allowAllHosts); return HttpClients.custom().setSSLSocketFactory(connectionFactory).build(); } public String encryptThreeDESECB(String src, String key) throws Exception { DESedeKeySpec dks = new DESedeKeySpec(key.getBytes("UTF-8")); SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DESede"); javax.crypto.SecretKey securekey = keyFactory.generateSecret(dks); Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding"); cipher.init(1, securekey); byte b[] = cipher.doFinal(src.getBytes()); Encoder ec = java.util.Base64.getEncoder(); return ec.encodeToString(b); } public void initAccessToken() throws Exception { String url = baseurl + "/auth/login"; String usernameDES = encryptThreeDESECB(username, DES_Key); String passwordDES = encryptThreeDESECB(password, DES_Key); JSONObject jsonObject = new JSONObject(); jsonObject.put("username", usernameDES); jsonObject.put("password", passwordDES); HttpPost httpPost; httpPost = new HttpPost(url); httpPost.setHeader("Content-Type", "application/json;charset=UTF-8"); httpPost.setEntity(new StringEntity(jsonObject.toString(), "UTF-8")); httpClient = createHttpClient(); try { try (CloseableHttpResponse response = httpClient.execute(httpPost)) { if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { e = Calendar.getInstance(); e.add(Calendar.SECOND, expires); HttpEntity httpEntity = response.getEntity(); jsonObject = new JSONObject(EntityUtils.toString(httpEntity, "UTF-8")); access_token = jsonObject.getString("access_token"); refresh_token = jsonObject.getString("refresh_token"); } log4j.info(String.format( "RootCloudBeaninitAccessToken?,access_token:%srefresh_token:%s", access_token, refresh_token)); } } catch (Exception ex) { access_token = null; refresh_token = null; log4j.error("RootCloudBeaninitAccessToken", ex); throw ex; } } private boolean isTokenExpire() { if (access_token == null || refresh_token == null || e == null) { return true; } return e.before(Calendar.getInstance()); } public String updateAlarmStatus(String deviceId, String alarmId, String status) { StringBuilder urlBuilder = new StringBuilder(); urlBuilder.append(baseurl); urlBuilder.append("/service-hzjj-device/api/hzjj/update-alarm/crm?deviceId=").append(deviceId) .append("&alarmId=").append(alarmId).append("&status=").append(status); try { if (isTokenExpire()) { initAccessToken(); } StringBuilder cookieBuilder = new StringBuilder(); cookieBuilder.append( "_ga=GA1.2.1131583934.1534823162; _gid=GA1.2.1073767397.1534823162; Hm_lvt_63a8403da4c50b3dd2f667c37bcf65e1=1534757253,1534837562;"); cookieBuilder.append("access_token=").append(access_token).append(";"); cookieBuilder.append("session_token=").append(refresh_token); HttpPost httpPost; httpPost = new HttpPost(urlBuilder.toString()); httpPost.setHeader("content-type", "application/json"); httpPost.addHeader("cookie", cookieBuilder.toString()); httpPost.addHeader("current_app", current_app); httpPost.addHeader("current_tenant", current_tenant); httpClient = createHttpClient(); CloseableHttpResponse response = httpClient.execute(httpPost); if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { //System.out.println("update-alarm?"); log4j.info(String.format( "RootCloudBeanupdateAlarm?,?1:%s,?2:%s,?3:%s,:%s", deviceId, alarmId, status, "200")); return "200"; } else { log4j.info(String.format( "RootCloudBeanupdateAlarm,?1:%s,?2:%s,?3:%s,:%s", deviceId, alarmId, status, String.valueOf(response.getStatusLine().getStatusCode()))); } } catch (Exception ex) { log4j.error("RootCloudBeanupdateAlarm", ex); } return ""; } }