[ https://issues.apache.org/jira/browse/HADOOP-10868?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14127812#comment-14127812 ]
Alejandro Abdelnur commented on HADOOP-10868: --------------------------------------------- *AuthenticationFilter.java*: The following code seems it could be (most of it) push down to each provider impl: {code} if (signerSecretProviderName.equals("string")) { String signatureSecret = config.getProperty(configPrefix + SIGNATURE_SECRET, null); secretProvider = new StringSignerSecretProvider(signatureSecret); } else if (signerSecretProviderName.equals("random")) { secretProvider = new RandomSignerSecretProvider(); randomSecret = true; } else if (signerSecretProviderName.equals("zookeeper")) { Object curatorClientObj = filterConfig.getServletContext() .getAttribute( ZOOKEEPER_SIGNER_SECRET_PROVIDER_CURATOR_CLIENT_ATTRIBUTE); if (curatorClientObj != null && curatorClientObj instanceof CuratorFramework) { secretProvider = new ZKSignerSecretProvider((CuratorFramework) curatorClientObj); } else { secretProvider = new ZKSignerSecretProvider(); } {code} I would have a a function that gives me the Class of the provider, i.e.: {code} private Class<? extends SignerSecretProvider> getProviderClass(String name) { if ("random".equals(name)) { name = RandomSignerSecretProvider.class.getName(); } else if ("string".equals(name)) { name = StringSignerSecretProvider.class.getName(); } else if ("zookeeper".equals(name)) { name = ZookeeperSignerSecretProvider.class.getName(); } name = RandomSignerSecretProvider.class.getName(); } try { return (Class<SignerSecretProvider>) Thread.currentThread(). getContextClassLoader().loadClass(signerSecretProviderName); } catch (Exception ex) { throw new ServletException(ex); } } {code} Then I would use {{ReflectionUtils.newInstance(providerClass, conf)}} to instantiate it. I would add {{ServletContext}} as param to the {{init()}} method which in the case of ZK impl would be used to retrieve the curator from the context or create a new one (all within the ZK impl). For the string impl, the string secret would obtained from the config properties of the {{init()}}. *hadoop-auth/pom.xml*: * curator-test should be with scope 'test' *ZKSignerSecretProvider.java*: * line 334, log message, type 'occured' * the ser/deser of the data we store in zookeeper, please add a version number at the beginning. This will allow us to change things in the future and support rolling upgrades. * once you have a curator client, it will handle reconnections correctly? else the {{createCuratorClient}} should be you have to be redo after a failed attempt. * I don’t like that ZK uses system properties for the auth info, but I guess that is has to be :(. I’ll dig into this a bit while you take care of the other feedback. > Create a ZooKeeper-backed secret provider > ----------------------------------------- > > Key: HADOOP-10868 > URL: https://issues.apache.org/jira/browse/HADOOP-10868 > Project: Hadoop Common > Issue Type: Sub-task > Components: security > Affects Versions: 2.4.1 > Reporter: Robert Kanter > Assignee: Robert Kanter > Attachments: HADOOP-10868.patch, HADOOP-10868.patch, > HADOOP-10868.patch, HADOOP-10868_branch-2.patch, HADOOP-10868_branch-2.patch, > HADOOP-10868_branch-2.patch > > > Create a secret provider (see HADOOP-10791) that is backed by ZooKeeper and > can synchronize amongst different servers. -- This message was sent by Atlassian JIRA (v6.3.4#6332)