Dan Smith created GEODE-1535: -------------------------------- Summary: NullPointerException from SampleJsonAuthorization with valid credentials Key: GEODE-1535 URL: https://issues.apache.org/jira/browse/GEODE-1535 Project: Geode Issue Type: Bug Components: security Reporter: Dan Smith
I'm trying to configure a client to connect with authorization using the SampleJsonAuthorization class. I got the below NPE when trying to connect. {code} com.gemstone.gemfire.cache.client.ServerOperationException: remote server on 172.16.115.238(72978:loner):60610:2e0de43c: : While performing a remote put at com.gemstone.gemfire.cache.client.internal.PutOp$PutOpImpl.processAck(PutOp.java:445) at com.gemstone.gemfire.cache.client.internal.PutOp$PutOpImpl.processResponse(PutOp.java:355) at com.gemstone.gemfire.cache.client.internal.PutOp$PutOpImpl.attemptReadResponse(PutOp.java:540) at com.gemstone.gemfire.cache.client.internal.AbstractOp.attempt(AbstractOp.java:378) at com.gemstone.gemfire.cache.client.internal.ConnectionImpl.execute(ConnectionImpl.java:274) at com.gemstone.gemfire.cache.client.internal.pooling.PooledConnection.execute(PooledConnection.java:328) at com.gemstone.gemfire.cache.client.internal.OpExecutorImpl.executeWithPossibleReAuthentication(OpExecutorImpl.java:937) at com.gemstone.gemfire.cache.client.internal.OpExecutorImpl.execute(OpExecutorImpl.java:155) at com.gemstone.gemfire.cache.client.internal.OpExecutorImpl.execute(OpExecutorImpl.java:110) at com.gemstone.gemfire.cache.client.internal.PoolImpl.execute(PoolImpl.java:700) at com.gemstone.gemfire.cache.client.internal.PutOp.execute(PutOp.java:102) at com.gemstone.gemfire.cache.client.internal.ServerRegionProxy.put(ServerRegionProxy.java:175) at com.gemstone.gemfire.internal.cache.LocalRegion.serverPut(LocalRegion.java:3061) at com.gemstone.gemfire.internal.cache.LocalRegion.cacheWriteBeforePut(LocalRegion.java:3188) at com.gemstone.gemfire.internal.cache.ProxyRegionMap.basicPut(ProxyRegionMap.java:230) at com.gemstone.gemfire.internal.cache.LocalRegion.virtualPut(LocalRegion.java:5845) at com.gemstone.gemfire.internal.cache.LocalRegionDataView.putEntry(LocalRegionDataView.java:132) at com.gemstone.gemfire.internal.cache.LocalRegion.basicPut(LocalRegion.java:5240) at com.gemstone.gemfire.internal.cache.LocalRegion.validatedPut(LocalRegion.java:1557) at com.gemstone.gemfire.internal.cache.LocalRegion.put(LocalRegion.java:1544) at com.gemstone.gemfire.internal.cache.AbstractRegion.put(AbstractRegion.java:288) at TestClient.test(TestClient.java:20) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) at org.junit.runners.ParentRunner.run(ParentRunner.java:363) at org.junit.runner.JUnitCore.run(JUnitCore.java:137) at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:119) at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:42) at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:234) at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:74) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144) Caused by: java.lang.NullPointerException at org.apache.shiro.authz.permission.WildcardPermission.implies(WildcardPermission.java:205) at com.gemstone.gemfire.security.templates.SampleJsonAuthorization.authorizeOperation(SampleJsonAuthorization.java:216) at com.gemstone.gemfire.internal.security.AuthorizeRequest.putAuthorize(AuthorizeRequest.java:143) at com.gemstone.gemfire.internal.security.AuthorizeRequest.putAuthorize(AuthorizeRequest.java:132) at com.gemstone.gemfire.internal.cache.tier.sockets.command.Put65.cmdExecute(Put65.java:271) at com.gemstone.gemfire.internal.cache.tier.sockets.BaseCommand.execute(BaseCommand.java:142) at com.gemstone.gemfire.internal.cache.tier.sockets.ServerConnection.doNormalMsg(ServerConnection.java:797) at com.gemstone.gemfire.internal.cache.tier.sockets.ServerConnection.doOneMessage(ServerConnection.java:924) at com.gemstone.gemfire.internal.cache.tier.sockets.ServerConnection.run(ServerConnection.java:1173) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at com.gemstone.gemfire.internal.cache.tier.sockets.AcceptorImpl$1$1.run(AcceptorImpl.java:519) at java.lang.Thread.run(Thread.java:745) {code} This is my security.json file. Note that connecting through gfsh works {code} { "roles": [ { "name": "cluster", "operationsAllowed": [ "CLUSTER:MANAGE", "CLUSTER:WRITE", "CLUSTER:READ" ] }, { "name": "data", "operationsAllowed": [ "DATA:MANAGE", "DATA:WRITE", "DATA:READ", "CLUSTER:READ" ] } ], "users": [ { "name": "root", "password": "123", "roles": [ "cluster", "data" ] }, { "name": "dan", "password": "123", "roles": [ "data" ] } ] } {code} And here is my client configuration {code} import java.util.Properties; import com.gemstone.gemfire.LogWriter; import com.gemstone.gemfire.distributed.DistributedMember; import com.gemstone.gemfire.management.internal.security.ResourceConstants; import com.gemstone.gemfire.security.AuthInitialize; import com.gemstone.gemfire.security.AuthenticationFailedException; public class MyAuthInitialize implements AuthInitialize { @Override public void init(final LogWriter systemLogger, final LogWriter securityLogger) throws AuthenticationFailedException { } @Override public Properties getCredentials(final Properties securityProps, final DistributedMember server, final boolean isPeer) throws AuthenticationFailedException { Properties props = new Properties(); props.put(ResourceConstants.USER_NAME, "root"); props.put(ResourceConstants.PASSWORD, "123"); return props; } @Override public void close() { } public static AuthInitialize create() { return new MyAuthInitialize(); } } public class TestClient { @Test public void test() { ClientCacheFactory factory = new ClientCacheFactory(); factory.set("security-client-auth-init", "MyAuthInitialize.create"); factory.addPoolServer("localhost", 40404); // factory.setPoolMultiuserAuthentication(true); ClientCache cache = factory.create(); Region region = cache.createClientRegionFactory(ClientRegionShortcut.PROXY).create("region"); region.put("A","B"); region.put("C", "D"); } } {code} -- This message was sent by Atlassian JIRA (v6.3.4#6332)