Java Posts

Slowness when Generating SecureRandom with Java on RHEL 7

Today i had a very weird issue where there is slowness on my app when generating random secure number on my server, the weird thing is that it never happen on my Windows machine. After intensive debugging i found out that below code part is causing the slowness,

    static {
        try {
            secureRandom = SecureRandom.getInstanceStrong();
        } catch (Exception e) {
            secureRandom = new SecureRandom();

Replacing it with below code solve my problem,

    static {
        try {
            secureRandom = SecureRandom.getInstance("SHA1PRNG");
        } catch (Exception e) {
            secureRandom = new SecureRandom();

Deploying Spring Boot with A Dynamic Location to Openshift

I want to create a simple spring boot app, and deploy it to Openshift 4.2. It supposed to be a straigh forward task, but the problem is that it is required to externalize all configuration to a configmaps or secret so no need to recompile the whole app in case of configuration change.

There are several approach of externalizing configuraton to configmaps, one way is put it as a string literal, include on your pod and call on application via environment variables, or deploy the whole configuration file and mount it on your Openshift pod. The last approach is the one that we will be doing now today.

First lets start with deploying our properties to Openshift as configmaps,

oc create cm myapp-api-configmap --from-file=D:\source\my-app\src\main\resources\

We can check and validate the result,

oc get cm

oc describe cm myapp-api-configmap

After that, we can mount corresponding configmap to a specific folder on our Pod, on below example modification is done on DeploymentConfig.yaml and mounting to /deployments/config folder.

kind: DeploymentConfig
        - name: myapp-api-configmap-volume
            name: myapp-api-configmap
            defaultMode: 420
        - name: myapp-api
          image: >-
            - containerPort: 8778
              protocol: TCP
            - containerPort: 8080
              protocol: TCP
            - containerPort: 8443
              protocol: TCP
          resources: {}
            - name: myapp-api-configmap-volume
              mountPath: /deployments/config
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File
          imagePullPolicy: Always
      restartPolicy: Always
      terminationGracePeriodSeconds: 30
      dnsPolicy: ClusterFirst
      securityContext: {}
      schedulerName: default-scheduler

A modification is also needed on my Dockerfile, pointing a new path for my properties file by using “spring.config.location” parameter,


USER jboss
RUN mkdir -p /deployments/image && chown -R jboss:0 /deployments

COPY target/application-1.0.jar /deployments/application.jar
CMD ["java", "-jar", "/deployments/application.jar", "--spring.config.location=file:///deployments/config/"]

Build, deploy,and see that application is now taking configuration from external configuration file.

How to Connect and Uploading Files to Openstack using Java

Currently im involved in a project where i have to use OpenStack Object Store for storing images and files. After Googling for a while, i come up with a solution of using JOSS library to connect to OpenStack, despite OpenStack provide REST API to connect to it directly.

But first, we need to see the API URL that is needed for login to OpenStack. And it can be seen on below screenshot, inside the red box.

After we got the url, next is importing JOSS library to be used in our app. We can import it by using a simple maven command,


And a simple java file, to do a simple upload using a provided credential.

public void uploadImageToDCTest() {
	AccountConfig config = new AccountConfig();

	Account account = new AccountFactory(config).createAccount();

	Container container = account.getContainer("images");
	if(!container.exists()) {

	StoredObject object = container.getObject("jenkins-logo.png");
	object.uploadObject(new File("D:\\jenkins-logo.png"));
	System.out.println("Public URL: "+object.getPublicURL());

Later on, we can check the result on our OpenStack object store page.

[Keycloak] How to Solve “/openid-connect/userinfo” which Gives JWT Response instead of A Simple JSON

Previously expecting a json response from “/openid-connect/userinfo” API , such as below screenshot,

But suddenly someone change configuration somewhere which makes previous response changed into,

Took quite sometime for me to findout which part of Kecloak configuration which makes this happens. Finally i found the proper configuration, it is located on “Fine Grain OpenID Connect Configuration”. Previously it is “RS512”, changing into “unsigned” solve my problem.

Deploying A Simple Hello World App using OpenLiberty S2I to Openshift

For this example im using OpenLiberty version, and install corresponding image to my Openshift registry using below command,

oc import-image openliberty/open-liberty-s2i:

Can check our list of images on our imagestream by using this command,

oc get is

Next is creating a simple hello-world webapps, with below pom

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns=""




And web.xml,

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
        PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    <display-name>My Web Application</display-name>




A simple JSP file,

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <title>Hello World</title>
Hello World

And a simple java file,

package com.edw;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MyServlet  extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws IOException {

And a simple server.xml file,

<?xml version="1.0" encoding="UTF-8"?>
<server description="OpenLiberty Server">
    <httpEndpoint id="defaultHttpEndpoint" host="*" httpPort="9080" httpsPort="9443"/>
    <webApplication location="com.edw-1.0-SNAPSHOT.war"/>

After project is properly setup, we can do a simple mvn build,

mvn clean package

And push our application to Openshift, run below command on the root of your project location

oc new-build --name=my-openliberty-full --image-stream=open-liberty-s2i: --binary=true

oc start-build my-openliberty-full --from-dir=.

oc new-app my-openliberty-full --name=my-openliberty-full

We can access our newly created app directly thru browser,