Метод аутентификации 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.