+ * KerberosName有个静态块设置defaultRealm为KerberosUtil.getDefaultRealm() + * 如果Config对象重新通过System.setProperty设置过(见refreshConfig()方法),此时也需要刷新一下KerberosName, + * 否则这个defaultRealm还是之前的,如果有其他的kerberos认证的client设置过krb5.conf文件, + * 此时获取的defaultRealm是错误的或者为null,所以需要重置一下defaultRealm保证本次登录访问 + * + * + * 同理如果其它地方使用Kerberos认证出现Login failed时也应该怀疑krb5文件没有刷新和KerberosName没有重置 + * + * @throws Exception + */ + private void resetDefaultRealm() throws Exception { + + Field field = KerberosName.class.getDeclaredField("defaultRealm"); + assert field != null; + field.setAccessible(true); + field.set(KerberosName.class, KerberosUtil.getDefaultRealm()); + } } \ No newline at end of file