0

Как вы можете себе представить из названия, я хочу общаться с сервером Radius с помощью библиотеки java TinyRadius. Я знаю, что цель Radius Server - проверить, разрешено ли пользователю вводить или использовать определенную сеть. Но мне не нужно предоставлять кому-то доступ к newtwork, я просто хочу знать, будет ли пользователю разрешено или нет.Результаты аутентификации метода tinyradius в NullPointerException

Но если я попытаюсь это сделать, я столкнулся с исключением NullPointerException, и я не знаю, почему быть честным? Поэтому первым вот мой код:

public static void main (String[] args) throws IOException{ 

    String user = null; 
    String password = null; 
    ServerSocket listener = new ServerSocket(9090); 

    try{ 
     while(true){ 
      Socket socket = listener.accept(); 
      try{ 
       BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
       PrintWriter out = new PrintWriter(socket.getOutputStream(), true); 
       while(user == null || password == null){ 
        user = input.readLine(); 
        password = input.readLine(); 
        } 

       String host = "AddressOfRadiusServer"; 
       String shared = "SharedSecretIDontWantToShow"; 
       String newUser = user; 
       String newPass = password; 

       //Shows that password and user are defenitely not null 
       System.out.println(user); 
       System.out.println(password); 


       RadiusClient rc = new RadiusClient(host, shared); 
       System.out.println("Packet sent"); 

       //This is the Line where the Exception is thrown 
       if (rc.authenticate(user, password)) { 
       out.println("Result: Successfull"); 
       out.println("CLOSE"); 
       } else { 
       out.println("Result: Failure"); 
       out.println("CLOSE"); 

       } 

       rc.close(); 
       user = null; 
       password = null; 
       }catch(Exception e){ 
        e.printStackTrace(); 
        } 
       finally{ 
        socket.close(); 
        } 
      } 
     }catch(Exception e){ 
      e.printStackTrace(); 
      } 
     finally{ 
      listener.close(); 
      } 

    } 

И Heres исключений:

Exception in thread "main" java.lang.ExceptionInInitializerError 
at org.tinyradius.packet.RadiusPacket.<init>(RadiusPacket.java:998) 
at org.tinyradius.packet.RadiusPacket.<init>(RadiusPacket.java:90) 
at org.tinyradius.packet.AccessRequest.<init>(AccessRequest.java:50) 
at org.tinyradius.util.RadiusClient.authenticate(RadiusClient.java:64) 
at haw.landshut.ServerFinal.main(ServerFinal.java:43)` 

Caused by: java.lang.NullPointerException 
at java.io.Reader.<init>(Reader.java:78) 
at java.io.InputStreamReader.<init>(InputStreamReader.java:72) 
at org.tinyradius.dictionary.DictionaryParser.parseDictionary(DictionaryParser.java:53) 
at org.tinyradius.dictionary.DefaultDictionary.<clinit>(DefaultDictionary.java:48)` 

Я не знаю, почему это происходит, потому что ни пароль, ни пользователь является недействительным. Поэтому я не знаю, что здесь не так.

EDIT: Так что я немного сузил его, я думаю.

Нечто подобное происходит: https://examples.javacodegeeks.com/java-basics/exceptions/java-lang-exceptionininitializererror-how-to-handle-exception-initializer-error/

В этом классе библиотеки tinyradius: https://github.com/ctran/TinyRadius/blob/master/src/main/java/org/tinyradius/dictionary/DefaultDictionary.java

Я не уверен, как это исправить. Будет ли это работать, если я изменю

private static DefaultDictionary instance = null; 

в

private static DefaultDictionary instance = new DefaultDirecory(); 

?

Заранее благодарим за вашу помощь!

ответ

0

Вам необходимо добавить файл default_dictionary на tinyradius.jar.

Попробуйте это, из целевых/классы реж:

jar uf ../../target/tinyradius-1.0.2.jar org/tinyradius/dictionary/default_dictionary 

Или обновить pom.xml:

<build> 
    ... 
    <resources> 
    <resource> 
     <directory>${basedir}/src/main/java</directory> 
     <filtering>false</filtering> 
     <includes> 
     <include>org/tinyradius/dictionary/default_dictionary</include> 
     </includes> 
    </resource> 
    </resources> 
</build> 

и снова запустите MVN.

Смежные вопросы