Skip to main content

Encode from JavaScript and Decode at Java.


if you have a senerio like you want to send encoded parameter values from your web page 
and decode them  at server side then this blog may be help you.

JavaScript:
Before submit the form I am encoding all the value entered by user so that it can not be read by humanly, for encoding the values I have written a method named encodeBase64

<script>

function encodeBase64(input){
        var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";

        input = escape(input);
        var output = "";
        var chr1, chr2, chr3 = "";
        var enc1, enc2, enc3, enc4 = "";
        var i = 0;
    
        do {
            chr1 = input.charCodeAt(i++);
            chr2 = input.charCodeAt(i++);
            chr3 = input.charCodeAt(i++);
        
            enc1 = chr1 >> 2;
            enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
            enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
            enc4 = chr3 & 63;
        
            if (isNaN(chr2)) {
                enc3 = enc4 = 64;
            } else if (isNaN(chr3)) {
                enc4 = 64;
            }
        
            output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2) + keyStr.charAt(enc3) + keyStr.charAt(enc4);
            chr1 = chr2 = chr3 = "";
            enc1 = enc2 = enc3 = enc4 = "";
        } while (i < input.length);
    
        return output;

 };

 function submit(){

             var userName = document.getElementsByName("userName")[0];
             userName.value = encodeBase64(userName.value);
             
            var password = document.getElementsByName("password")[0];
            password.value = encodeBase64(password.value);
            
            document.getElementById("loginForm").submit();
 }

</script>


HTML:
Simple form in which I am calling submit method on button click which encode the user input value and submit the form.

<form action="/login" id="loginForm" method="POST">
             User Name : <input type="text" name="userName" />
             Password : <input type="password" name="password" />
            <input type="button" onclick="submit()" />
 </form>


JAVA:
There is one method I have written named decodeBase64 which convert the encoded value sent from the client  to the original value that user has input.

NOTE: Make sure the keyStr used in javascript and Java code must be same.

import java.io.*;
import java.net.URLDecoder;
import javax.servlet.*;
import javax.servlet.http.*;

public class login extends HttpServlet {

public static String keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";

 public void doPost(HttpServletRequest request,HttpServletResponse response)
           throws ServletException, IOException{
         PrintWriter out = response.getWriter();
                  out.println("User Name = "+decodeBase64(request.getParameter("userName")));
                  out.println("Password = "+decodeBase64(request.getParameter("password")));

 }


  public String decodeBase64(String input) {

           String output = "";
           if (input != null) {
               int chr1, chr2, chr3;
               int enc1 = 0, enc2 = 0, enc3 = 0, enc4 = 0;
               int i = 0;

               while (i <= input.length()) {
                   try {
                       enc1 = keyStr.indexOf(input.charAt(i++));
                       enc2 = keyStr.indexOf(input.charAt(i++));
                       chr1 = (enc1 << 2) | (enc2 >> 4);
                       output = output + String.valueOf((char) chr1);

                       enc3 = keyStr.indexOf(input.charAt(i++));
                       chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
                       if (enc3 != 64) {
                           output = output + String.valueOf((char) chr2);
                       }

                       enc4 = keyStr.indexOf(input.charAt(i++));
                       chr3 = ((enc3 & 3) << 6) | enc4;
                       if (enc4 != 64) {
                           output = output + String.valueOf((char) chr3);
                       }
                   } catch (Exception e) {
                   }

                   chr1 = chr2 = chr3 = 0;
                   enc1 = enc2 = enc3 = enc4 = 0;
               }
           }
           try {
               return URLDecoder.decode(output, "utf-8");
           } catch (UnsupportedEncodingException ex) {
           }
     return "";
 }
}

Comments

Popular posts from this blog

Change Tomcat JSESSION Cookie Name and Path

Sometime we have a scenario that two different tomcat application running on same domain,  and you want to share a session cookie in between them, there are two problem will come in this scenario i.e: 1. Session Cookie Name : As both the application have same cookie name i.e JSESSIONID , so its difficult to know which JSESSIONID belongs to which application , so in this scenario we need to change the Session cookie name. 2. Cookie Path :  By default tomcat create a session cookie for the app context, due to which we can't share the cookies between two application , so we need to change the cookie path from  context to the root. For doing the above point we can use  ServletContextListener or   web.xml file. 1. ServletContextListener import javax.servlet.SessionCookieConfig; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; public class MyTestListener implements ServletContextListener  {     public void contextInit

Deploy application at ROOT(/) context in Tomcat

Tomcat has its own application with the name "ROOT" that is runing in the main root (/) context path, So when ever you install new tomcat and try to accesss  http://localhost:8080/  then it will show you the default tomcat home page, If you want to deploy you application at  http://localhost:8080/  then there is two way to do this 1. ROOT.war : Create your application war file with the name ROOT.war and place it in the [TOMCAT_HOME]/webapps/ directory and restart tomcat services 2. Server.xml : If you can't change the war file name then in server.xml file there is one context tag  that is use to map your application on any context Remove the ROOT folder directory from [TOMCAT_HOME]/webapps/ Copy your application war file into the same directory , let suppose your application war file name is "app.war". Edit the server.xml file located at [TOMCAT_HOME]/conf/server.xml, and add the context tag < Context path = "/" docBase = "app&