应用本身上线有一段时间,期间未发生这种报错,所以思路集中在配置文件,服务器hosts配置方向,后边通过自己的测试服务 正常链接排除的环境因素那么就是程序本身问题,奇怪的点事本身服务运行正常,突然报异常了。
这个就有点奇怪,之后对比了代码发现
Kerberos 配置写法导致
正确的写法
try {
Class.forName(JDBC\_DRIVER);
//登录Kerberos账号
String keytabPath = "/opt/data/kerberos/" + keytab;
Configuration configuration = new Configuration();
configuration.set("hadoop.security.authentication", "Kerberos");
configuration.set("java.security.krb5.conf", "/opt/data/kerberos/krb5.conf");
UserGroupInformation.setConfiguration(configuration);
UserGroupInformation.loginUserFromKeytab(krbUser, keytabPath);
System.out.println("Kerberos 验证通过");
Connection connection = null;
ResultSet rs = null;
PreparedStatement ps = null;
try {
connection = DriverManager.getConnection(CONNECTION\_URL);
ps = connection.prepareStatement("select \* from ods\_inc.k02\_city");
rs = ps.executeQuery();
while (rs.next()) {
System.out.println(rs.getString(1));
}
} catch (Exception e) {
e.printStackTrace();
}
} catch (ClassNotFoundException | IOException e) {
e.printStackTrace();
return "exception";
}
return "finish";
}
产生异常的写法
try {
log.debug(keyTabPath);
log.debug(confPath);
//设置krb配置文件路径,注意一定要放在Configuration前面,不然不生效
System.setProperty("java.security.krb5.conf", confPath);
Configuration conf = new Configuration();
//设置认证模式Kerberos
conf.set("hadoop.security.authentication", "Kerberos");
UserGroupInformation.setConfiguration(conf);
//设置认证用户和krb认证文件路径
UserGroupInformation.loginUserFromKeytab(krbUser, keyTabPath);
log.info("Kerberos 验证成功");
} catch (Exception e) {
e.printStackTrace();
log.error("Kerberos 验证失败", e);
throw new PluginException("Kerberos 验证失败", e);
}
最后
针对以上面试题,小编已经把面试题+答案整理好了
面试专题
除了以上面试题+答案,小编同时还整理了微服务相关的实战文档也可以分享给大家学习
78977308)]
[外链图片转存中…(img-0K1zDnVE-1719278977309)]
[外链图片转存中…(img-bSTsWc0B-1719278977309)]