Programmatic JAAS configuration


What's inside this article ⌄
  • How to configure JAAS programmatically
  • Java JAAS configuration code
  • Programmatic JAAS setup
  • Set JAAS login configuration Java

Sometimes you need to set java.security.auth.login.config property programmatically. Here is how you can do it, just modify LoginConfig class to satisfy your needs:

JaasConfigurationExample.class:

 1import javax.security.auth.login.AppConfigurationEntry;
 2import javax.security.auth.login.Configuration;
 3import javax.security.auth.login.LoginContext;
 4
 5public class JaasConfigurationExample {
 6
 7    public void work() {
 8        LoginConfig loginConfig = new LoginConfig(keyTabLocation, servicePrincipalName, debug);
 9        LoginContext lc = new LoginContext("", subject, null, loginConfig);
10    }
11    
12    private static class LoginConfig extends Configuration {
13        private String keyTabLocation;
14        private String servicePrincipalName;
15        private Boolean debug;
16    
17        public LoginConfig(String keyTabLocation, String servicePrincipalName, Boolean debug) {
18            this.keyTabLocation = keyTabLocation;
19            this.servicePrincipalName = servicePrincipalName;
20            this.debug = debug;
21        }
22    
23        @Override
24        public AppConfigurationEntry[] getAppConfigurationEntry(String name) {
25            Map<String, String> options = new HashMap<>();
26            options.put("useKeyTab", "true");
27            options.put("keyTab", keyTabLocation);
28            options.put("principal", servicePrincipalName);
29            options.put("storeKey", "true");
30            options.put("doNotPrompt", "true");
31            if (debug) {
32                options.put("debug", "true");
33            }
34            options.put("isInitiator", "false");
35            return new AppConfigurationEntry[] {
36                    new AppConfigurationEntry(
37                            "com.sun.security.auth.module.Krb5LoginModule",
38                            AppConfigurationEntry.LoginModuleControlFlag.REQUIRED, options)
39                    };
40        }
41    }
42}