Метод аутентификации tinyradius приводит к исключению NullPointerException

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

Но если я пытаюсь сделать это, я сталкиваюсь с 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();
            }

    }

И вот исключение:

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)`

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

РЕДАКТИРОВАТЬ: Так что я вроде немного сузил его, я думаю.

Примерно так происходит: 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();

?

Заранее спасибо за помощь!

1 ответ

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

Попробуйте это из target / classes dir:

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.

Другие вопросы по тегам