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)

Reply via email to