Detect if current user is ADMIN using JNA (Windows) Tag(s): JNA Environment Security
JNA (Java Native Access) provides Java programs easy access to native shared libraries (DLLs on Windows) without writing anything but Java code - no JNI or native code is required.
This HowTo detects if the current user is a member the Administrator group. This is done by checking the "well-known" sid.
import com.sun.jna.platform.win32.Advapi32Util;
// https://github.com/twall/jna#readme
// you need 2 jars : jna-3.5.1.jar and platform-3.5.1.jar
public class IsAdmin {
public static void main(String[] args) {
boolean isAdmin = false;
Advapi32Util.Account[] groups = Advapi32Util.getCurrentUserGroups();
for (Advapi32Util.Account group : groups) {
if ("S-1-5-32-544".equals(group.sidString)) {
isAdmin = true;
break;
}
}
if (isAdmin){
System.out.println("Current User is ADMIN");
}
else{
System.out.println("Current User is not ADMIN");
}
}
}Instead of hard-coding the well-known string representation of the Administrator group, we can used the Windows API exposed by JNA to verify the value.
import com.sun.jna.platform.win32.Advapi32;
import com.sun.jna.platform.win32.Advapi32Util;
import com.sun.jna.platform.win32.WinNT.PSIDByReference;
import com.sun.jna.platform.win32.WinNT.WELL_KNOWN_SID_TYPE;
// https://github.com/twall/jna#readme
// you need 2 jars : jna-3.5.1.jar and platform-3.5.1.jar
public class IsAdmin {
public static void main(String[] args) {
boolean isAdmin = false;
Advapi32Util.Account[] groups = Advapi32Util.getCurrentUserGroups();
for (Advapi32Util.Account group : groups) {
PSIDByReference sid = new PSIDByReference();
Advapi32.INSTANCE.ConvertStringSidToSid(group.sidString, sid);
if (Advapi32.INSTANCE.IsWellKnownSid(sid.getValue(),
WELL_KNOWN_SID_TYPE.WinBuiltinAdministratorsSid)) {
isAdmin = true;
break;
}
}
if (isAdmin){
System.out.println("Current User is ADMIN");
}
else{
System.out.println("Current User is not ADMIN");
}
}
}
mail_outline
Send comment, question or suggestion to howto@rgagnon.com
Send comment, question or suggestion to howto@rgagnon.com