Getting the Login Name of the Currently Logged-In User

This example retrieves the login name of the user that is running the application.

try {
    String loginAppName = "GetLoginNameUnix";

    // If the application is run on NT rather than Unix, use this name
    loginAppName = "GetLoginNameNT";

    // Create login context
    LoginContext lc = new LoginContext(loginAppName,
        new com.sun.security.auth.callback.TextCallbackHandler());

    // Retrieve the information on the logged-in user
    lc.login();

    // Get the authenticated subject
    Subject subject = lc.getSubject();

    // Get the subject principals
    Principal principals[] = (Principal[])subject.getPrincipals().toArray(new Principal[0]);
    for (int i=0; i<principals.length; i++) {
        if (principals[i] instanceof com.sun.security.auth.NTUserPrincipal
              || principals[i] instanceof com.sun.security.auth.UnixPrincipal) {
            String loggedInUserName = principals[i].getName();
        }
    }
} catch (LoginException e) {
    // Login failed
}


The example requires a login configuration file that specifies the login modules to execute when using a particular login-app name. This configuration file specifies two login-app names:

GetLoginNameNT {
    com.sun.security.auth.module.NTLoginModule required;
};

GetLoginNameUnix {
    com.sun.security.auth.module.UnixLoginModule required;
};


The login configuration file is specified at the command line:
> java -Djava.security.auth.login.config=myconfig.config MyApp

你可能感兴趣的:(java,unix,Security,sun)