2017-09-24 3 views
1

Ich bin nicht berechtigt, diese Frage zu stellen, es sei denn, ich habe mehr Beschreibung anstelle des Quellcodes geschrieben. Deshalb schreibe ich nur ein paar mehr Text.ActiveMQ extending SimpleAuthenticationPlugin thoews NullPointerException

Ich habe folgende Klasse. Mein Ziel ist es, den BrokerService durch Setzen dieses Plugins zu sichern.

public class MyAuthenticationPlugin extends SimpleAuthenticationPlugin { 
     private String username ="username"; 
     private String password ="password"; 

     public MyAuthenticationPlugin(){ 
      secureME(); 
     } 
     public void secureME(){ 
      Map<String, String> map = new HashMap<String, String>(); 
      map.put(username, password); 
      this.setUserPasswords(map); 
     } 
    } 

Später habe ich versucht, die obige Klasse wie folgt zu verwenden, wo ich eine Nullpointer Ausnahme erhalten: -

public class Server{ 
     private static int ackMode; 
     private static String messageQueueName; 
     private static String messageBrokerUrl; 

     private Session session; 
     private boolean transacted = false; 
     private MessageProducer replyProducer; 
     private MessageProtocol messageProtocol; 
     private String username ="username"; 
     private String password ="password"; 

     static { 
      messageBrokerUrl = "tcp://localhost:61616"; 
      messageQueueName = "client.messages"; 
      ackMode = Session.AUTO_ACKNOWLEDGE; 
     } 

     public Server() { 
      try { 
       //This message broker is embedded 
       BrokerService broker = new BrokerService(); 
       broker.setPersistent(false); 
       broker.setUseJmx(false); 
       broker.addConnector(messageBrokerUrl); 
       // here I'm add my class as plguing 
       MyAuthenticationPlugin[] myAuthenticationPlugin = new 
       MyAuthenticationPlugin[1]; 
       myAuthenticationPlugin[0] = new MyAuthenticationPlugin(); 

       broker.setPlugins(myAuthenticationPlugin); 
       broker.start(); 
      } catch (Exception e) { 
       System.out.println("Exception: "+e.getMessage()); 
       //Handle the exception appropriately 
      } 
     } 

     private void setupMessageQueueConsumer() { 
      ActiveMQConnectionFactory connectionFactory = new 
       ActiveMQConnectionFactory(messageBrokerUrl); 

      connectionFactory.setUserName(username); 
      connectionFactory.setPassword(password); 

      Connection connection; 
      try { 
       connection = connectionFactory.createConnection(username, password); 


       connection.start(); // This line thows exception 
       this.session = connection.createSession(this.transacted, ackMode); 
       Destination adminQueue = this.session.createQueue(messageQueueName); 

       //Setup a message producer to respond to messages from clients, we will get the destination 
       //to send to from the JMSReplyTo header field from a Message 
       this.replyProducer = this.session.createProducer(null); 
       this.replyProducer.setDeliveryMode(DeliveryMode.NON_PERSISTENT); 

       //Set up a consumer to consume messages off of the admin queue 
       MessageConsumer consumer = this.session.createConsumer(adminQueue); 
       consumer.setMessageListener(this); 

       // new BufferedReader(new InputStreamReader(System.in)).readLine(); 

      } catch (JMSException e) { 
       System.out.println("Exception: "+e.getMessage()); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 

     public static void main(String[] args) { 
      new Server(); 
      System.out.println("I'm done. END"); 
     } 
    } 

Hauptsächlich durch Setzen des Benutzername, Passwort, Zugriffsgruppe ist mein Ziel, mein Makler sicher zu befestigen Richtig, etc. Bitte schlage mir vor, wie man Benutzernamen, Passwort, Zugriffsgruppe richtig im BrokerService einstellen kann um sicherer zu machen.

Aktualisierung mit Stack-Trace: -

result = {StackTraceElement[7]@1015} 
    0 = {[email protected]} "org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:49)" 
     declaringClass = "org.apache.activemq.util.JMSExceptionSupport" 
     methodName = "create" 
     fileName = "JMSExceptionSupport.java" 
     lineNumber = 49 
    1 = {[email protected]} "org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1377)" 
     declaringClass = "org.apache.activemq.ActiveMQConnection" 
     methodName = "syncSendPacket" 
     fileName = "ActiveMQConnection.java" 
     lineNumber = 1377 
    2 = {[email protected]} "org.apache.activemq.ActiveMQConnection.ensureConnectionInfoSent(ActiveMQConnection.java:1481)" 
     declaringClass = "org.apache.activemq.ActiveMQConnection" 
     methodName = "ensureConnectionInfoSent" 
     fileName = "ActiveMQConnection.java" 
     lineNumber = 1481 
    3 = {[email protected]} "org.apache.activemq.ActiveMQConnection.start(ActiveMQConnection.java:516)" 
     declaringClass = "org.apache.activemq.ActiveMQConnection" 
     methodName = "start" 
     fileName = "ActiveMQConnection.java" 
     lineNumber = 516 
    4 = {[email protected]} "com.ma.home.Server.setupMessageQueueConsumer(Server.java:57)" 
     declaringClass = "com.ma.home.Server" 
     methodName = "setupMessageQueueConsumer" 
     fileName = "Server.java" 
     lineNumber = 57 
    5 = {[email protected]} "com.ma.home.Server.<init>(Server.java:46)" 
     declaringClass = "com.ma.home.Server" 
     methodName = "<init>" 
     fileName = "Server.java" 
     lineNumber = 46 
    6 = {[email protected]} "com.ma.home.Server.main(Server.java:84)" 
     declaringClass = "com.ma.home.Server" 
     methodName = "main" 
     fileName = "Server.java" 
     lineNumber = 84 
+0

Haben Sie den Stack-Trace? – Logan

+0

Bitte überprüfen Sie den Stack-Trace in der aktualisierten Frage. Um die Ausnahme zu reproduzieren, können Sie den angegebenen Code auch ausführen. Vielen Dank! – masiboo

Antwort

0

Ich habe AuthenticationUser mit allen drei korrekten Parametern wie Benutzername, Passwort, Gruppen hinzuzufügen. Ich habe zuvor keine Gruppen in meinem Code angegeben. Folgender Code wird behoben. Außerdem funktioniert es korrekt.

 public class MyAuthenticationPlugin extends SimpleAuthenticationPlugin { 
      private String username ="username"; 
      private String password ="password"; 
      private String groups = "groups"; 

      Map<String, String> userPasswords = new HashMap<String, String>(); 
      List<AuthenticationUser> authenticationUserList = new ArrayList(); 

      public MyAuthenticationPlugin(){ 
       secureME(); 
      } 
      public void secureME(){ 
       userPasswords.put(username, password); 
       authenticationUserList.add(new AuthenticationUser(username,password, groups)); 
       this.setUserPasswords(userPasswords); 
       this.setUsers(authenticationUserList); 
      } 
    }