质量推广提醒 - JDK23:重新指定的 Subject.getSubject API
内容提要
OpenJDK Quality Group鼓励使用OpenJDK构建的FOSS项目进行测试,以提高发布质量。JDK 17弃用了Security Manager,影响了Subject::doAs和Subject::getSubject等API。从JDK 23开始,主题授权和Subject API的行为取决于允许Security Manager。建议使用新的JAAS API作为替代方案。可以使用jdeprscan工具来识别弃用的API。存储Subject在AccessControlContext中的代码应进行迁移。有关更多详细信息,请参阅JDK 23发布说明。
关键要点
-
OpenJDK Quality Group鼓励使用OpenJDK构建的FOSS项目进行测试,以提高发布质量。
-
JDK 17弃用了Security Manager,影响了Subject::doAs和Subject::getSubject等API。
-
从JDK 23开始,主题授权和Subject API的行为取决于允许Security Manager。
-
建议使用新的JAAS API作为替代方案,Subject::callAs替代Subject::doAs,Subject::current替代Subject::getSubject。
-
使用jdeprscan工具可以识别弃用的API,建议尽快迁移相关代码。
-
存储Subject在AccessControlContext中的代码应尽快迁移,以免在Security Manager被移除后失效。
-
有关更多详细信息,请参阅JDK 23发布说明。
延伸问答
JDK 23中Subject.getSubject API的行为有什么变化?
在JDK 23中,Subject.getSubject API的行为取决于是否允许Security Manager,如果未设置或设置为disallow,将抛出UnsupportedOperationException。
如何迁移到新的JAAS API?
可以使用Subject.callAs替代Subject.doAs,使用Subject.current替代Subject.getSubject,尽快迁移相关代码。
为什么JDK 17弃用了Security Manager?
JDK 17弃用了Security Manager是为了简化安全管理,相关的API也被弃用以准备将来的移除。
如何使用jdeprscan工具?
jdeprscan工具可以扫描JAR文件以识别使用了弃用API的代码,帮助开发者进行迁移。
在JDK 23中,如何保持旧代码的兼容性?
可以通过在命令行中设置-Djava.security.manager=allow来临时允许Security Manager,以保持旧代码的兼容性。
存储Subject在AccessControlContext中的代码需要做什么?
存储Subject在AccessControlContext中的代码应尽快迁移,以免在Security Manager被移除后失效。