com.rootcloud.ejb.RootCloudBean.java Source code

Java tutorial

Introduction

Here is the source code for com.rootcloud.ejb.RootCloudBean.java

Source

/*
 * 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 "";
    }

}