public boolean addUser(User user) throws ClassNotFoundException, SQLException {
try {
readWriteLock.writeLock().lock();
String sql ="INSERT INTO User VALUES ("+0+",'"+user.getName()+"','"+user.getType()+"',AES_ENCRYPT('"+user.getPassword()+"','') ) ";
Connection connection = DBConnection.getConnection();
Statement stm = connection.createStatement();
int res = stm.executeUpdate(sql);
return res > 0;
} finally {
readWriteLock.writeLock().unlock();
}
}
异常
java.rmi.UnmarshalException: Error unmarshaling return; nested exception is:
java.lang.ClassNotFoundException: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException (no security manager: RMI class loader disabled)
无法纠正我的错误... 我远程调用这个方法.. 我不知道如何使用java
加密这样的密码答案 0 :(得分:0)
因此该方法在RMI服务器上失败并显示MySQLSyntaxErrorException
,并且正在发送异常,但您没有在RMI客户端上安装MySQL JDBC驱动程序,因此它无法解析异常类,当它被ClassNotFoundException
替换时,真正的错误消息会丢失。
您有几个选择:
将MySQL JDBC驱动程序添加到RMI客户端的类路径中 由于RMI客户端不需要MySQL访问,这似乎是错误的解决方案。
在RMI服务器上捕获异常,并抛出一个JDK内置异常,例如: SQLSyntaxErrorException
。
该类将存在于RMI客户端上,因此您可以看到真正的错误。
在RMI服务器上捕获异常,将错误消息记录在服务器上的日志文件中,然后抛出完全一般的异常,例如: RuntimeException("Error adding user. See log file on server")
。
这将隐藏客户端的RMI服务器内部,这有助于保护服务器免受黑客攻击。