View Javadoc
1   package org.argeo.osgi.useradmin;
2   
3   import java.net.URISyntaxException;
4   import java.net.URL;
5   import java.security.NoSuchAlgorithmException;
6   import java.security.URIParameter;
7   
8   import javax.security.auth.Subject;
9   import javax.security.auth.login.Configuration;
10  import javax.security.auth.login.LoginContext;
11  import javax.security.auth.login.LoginException;
12  
13  public class OsUserUtils {
14  	private static String LOGIN_CONTEXT_USER_NIX = "USER_NIX";
15  	private static String LOGIN_CONTEXT_USER_NT = "USER_NT";
16  
17  	public static String getOsUsername() {
18  		return System.getProperty("user.name");
19  	}
20  
21  	public static LoginContext loginAsSystemUser(Subject subject) {
22  		try {
23  			URL jaasConfigurationUrl = OsUserUtils.class.getClassLoader()
24  					.getResource("org/argeo/osgi/useradmin/jaas-os.cfg");
25  			URIParameter uriParameter = new URIParameter(jaasConfigurationUrl.toURI());
26  			Configuration jaasConfiguration = Configuration.getInstance("JavaLoginConfig", uriParameter);
27  			LoginContext lc = new LoginContext(isWindows() ? LOGIN_CONTEXT_USER_NT : LOGIN_CONTEXT_USER_NIX, subject,
28  					null, jaasConfiguration);
29  			lc.login();
30  			return lc;
31  		} catch (URISyntaxException | NoSuchAlgorithmException | LoginException e) {
32  			throw new RuntimeException("Cannot login as system user", e);
33  		}
34  	}
35  
36  	public static void main(String args[]) {
37  		Subject subject = new Subject();
38  		LoginContext loginContext = loginAsSystemUser(subject);
39  		System.out.println(subject);
40  		try {
41  			loginContext.logout();
42  		} catch (LoginException e) {
43  			// silent
44  		}
45  	}
46  
47  	private static boolean isWindows() {
48  		return System.getProperty("os.name").startsWith("Windows");
49  	}
50  
51  	private OsUserUtils() {
52  	}
53  }