Skip to main content
Version: v11.15.4

Accessing Logged-in User Details using Java Service


In this document, learn how to get the logged-in user information using a Java Service. You write a handler to get user information. For example, get the username, userID, IP address, and browser details. To do this, follow the steps described below.

Step 1: Create a Java Handler in Source​

Write a java handler class by using an existing handler.

Create a service in the src/main/java inside the handlers folder. For example, UserManagementApp/src/main/java/com/wavemaker/appscore/custom/handlers/CustomAuthenticationSuccessHandler.java

For more information to add files in a project, see including resource files.

Step 2: Implementing Success Handler​

note

Create these classes in an IDE and copy it in the path specified in the above screenshot in the CustomAuthenticationSuccessHandler.java file. For more information, see working with IDE.

  • Implement WMAuthenticationSuccessHandler interface and override the method onAuthenticationSuccess. This method invokes on successful login.
public class CustomAuthenticationSuccessHandler implements WMAuthenticationSuccessHandler {

@Override
public void onAuthenticationSuccess(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse,
WMAuthentication wmAuthentication) throws IOException, ServletException
{
}
}
  • Use the following method parameters, including HttpServletRequest, HttpServletResponse, WMAuthentication. It allows accessing the logged-in user information.
  • Create a userMap to capture user information as shown in the example below.
tip

Follow the commented-sections in the CustomAuthenticationSuccessHandler.java file in the following example.

Example​

CustomAuthenticationSuccessHandler.java

package com.wavemaker.appscore.custom.handlers;

import java.io.IOException;

import jakarta.servlet.ServletException;
import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.security.core.Authentication;
import com.wavemaker.runtime.security.WMAuthentication;
import com.wavemaker.runtime.security.handler.WMAuthenticationSuccessHandler;
import java.util.*;


public class CustomAuthenticationSuccessHandler implements WMAuthenticationSuccessHandler {

private static final Logger logger = LoggerFactory.getLogger(CustomAuthenticationSuccessHandler.class);

//Created the useMap to capture the userinfo.
public static final Map<String,String> userMap=new HashMap<String,String>();

@Override
public void onAuthenticationSuccess(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse,
WMAuthentication wmAuthentication) throws IOException, ServletException {

//Accessing the ip address and userid and username

final String userId=wmAuthentication.getUserId();
final String username=wmAuthentication.getPrincipal();
final String ip=httpServletRequest.getRemoteAddr();

//Process the browser info from the header using 'User-Agent'
final String browserDetails = httpServletRequest.getHeader("User-Agent");
final String user = browserDetails.toLowerCase();

String browser = "";

//===============Browser Name Processing===========================
if (user.contains("msie")) {
String substring = browserDetails.substring(browserDetails.indexOf("MSIE")).split(";")[0];
browser = substring.split(" ")[0].replace("MSIE", "IE") + "-" + substring.split(" ")[1];
} else if (user.contains("safari") && user.contains("version")) {
browser = (browserDetails.substring(browserDetails.indexOf("Safari")).split(" ")[0]).split(
"/")[0] + "-" + (browserDetails.substring(
browserDetails.indexOf("Version")).split(" ")[0]).split("/")[1];
} else if (user.contains("opr") || user.contains("opera")) {
if (user.contains("opera"))
browser = (browserDetails.substring(browserDetails.indexOf("Opera")).split(" ")[0]).split(
"/")[0] + "-" + (browserDetails.substring(
browserDetails.indexOf("Version")).split(" ")[0]).split("/")[1];
else if (user.contains("opr"))
browser = ((browserDetails.substring(browserDetails.indexOf("OPR")).split(" ")[0]).replace("/",
"-")).replace(
"OPR", "Opera");
} else if (user.contains("chrome")) {
browser = (browserDetails.substring(browserDetails.indexOf("Chrome")).split(" ")[0]).replace("/", "-");
} else if ((user.indexOf("mozilla/7.0") > -1) || (user.indexOf("netscape6") != -1) || (user.indexOf(
"mozilla/4.7") != -1) || (user.indexOf("mozilla/4.78") != -1) || (user.indexOf(
"mozilla/4.08") != -1) || (user.indexOf("mozilla/3") != -1)) {
browser = "Netscape-?";

} else if (user.contains("firefox")) {
browser = (browserDetails.substring(browserDetails.indexOf("Firefox")).split(" ")[0]).replace("/", "-");
} else if (user.contains("rv")) {
browser = "IE";
} else {
browser = "UnKnown, More-Info: " + browserDetails;
}
//Preparing the userMap
userMap.put("IP",ip);
userMap.put("UserId",userId);
userMap.put("Username",username);
userMap.put("Browser",browser);
}
}

Step 3: Declaring Handler as Bean​

In project-user-spring.xml, add the bean to declare the user-defined handler.

 <bean class="com.wavemaker.appscore.custom.handlers.CustomAuthenticationSuccessHandler" id="customAuthenticationSuccessHandler/>

Step 4: Create a Java Service​

  • Now create a java service and write a simple method to access the userMap by importing the handler class as shown below.

Example​

  • In this example, GetUserInfoService.java Imports CustomAuthenticationSuccessHandler.

package com.test.getuserinfoservice;

import jakarta.servlet.http.HttpServletRequest;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import org.springframework.beans.factory.annotation.Autowired;

import com.wavemaker.runtime.security.SecurityService;
import com.wavemaker.runtime.service.annotations.ExposeToClient;
import com.wavemaker.runtime.service.annotations.HideFromClient;
import com.wavemaker.appscore.custom.handlers.CustomAuthenticationSuccessHandler;
import java.util.*;

@ExposeToClient
public class GetUserInfoService {
@Autowired
private SecurityService securityService;
@Autowired
private CustomAuthenticationSuccessHandler useInfo;
public Map<String,String> getUserInfo()
{
return useInfo.userMap;
}

}

See Also​

How to send emails using Java Service
How to implement forgot password feature using Java Service
How to access REST APIs from Java Service
How to schedule a Java Service