Java17中java.security.acl.Group不存在,如何用Policy替代?
解决java.security.acl.Group编译错误的方案
首先纠正一个关键误解:java.security.Policy并不是java.security.acl.Group的替代类。java.security.acl包在Java 17及以上版本中被移除,而你代码里通过JNDI查找获取的Group对象,实际对应的是javax.security.auth.Group——这才是正确的替代接口。
具体修改步骤
- 替换导入语句:将原有导入
修改为import java.security.acl.Group;import javax.security.auth.Group; - 保留类型转换代码:原有代码的类型转换无需调整,直接使用
因为JNDI从LDAP等数据源查找返回的组对象,本身就实现了Group g = (Group) JNDIUtils.lookup(context, dn);javax.security.auth.Group接口,类型转换完全兼容。
额外编译配置说明
- 若使用Java 9及以上版本,
javax.security.auth属于java.base模块,默认无需额外配置即可使用; - 若Ant编译时出现模块相关报错,可在javac任务中添加模块参数:
<javac srcdir="${src.dir}" destdir="${build.dir}" includeantruntime="false"> <compilerarg value="--add-modules"/> <compilerarg value="java.base"/> </javac>
内容的提问来源于stack exchange,提问作者crimson_joey
相关产品推荐
相关产品推荐

