tinyradius authenticate方法导致NullPointerException

时间:2016-07-12 16:39:50

标签: java exception exception-handling nullpointerexception radius

从标题中可以想象,我想使用TinyRadius java库与Radius服务器进行通信。 我知道Radius服务器的目的是检查是否允许用户输入或使用某个网络。但我不需要授予某人访问新工作的权限,我只想知道,是否允许用户访问。

但如果我尝试这样做,我会遇到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 个答案:

答案 0 :(得分: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。

相关问题