java.security.AccessControlException 가 throw 된다 ... - xrath.com 에서 번역됨

> ## 애플릿으로 `java.beans.Introspector.setBeanInfoSearchPath()` 를 호출하면(자) `java.security.AccessControlException` 가 throw 된다

> ###
> 증상

> > 애플릿을 Sun JRE 를 사용한 브라우저로 실행하고 있는 경우,`AccessControlException` 가 `Introspector.setBeanInfoSearchPath()` 의 실행중에 throw 됩니다.

> > > `java.security.AccessControlException: access denied (java.util.PropertyPermission * read, write)
> > > at java.security.AccessControlContext.checkPermission(Unknown Source)
> > > at java.security.AccessController.checkPermission(Unknown Source)
> > > at java.lang.SecurityManager.checkPermission(Unknown Source)
> > > at java.lang.SecurityManager.checkPropertiesAccess(Unknown Source)
> > > at java.beans.Introspector.setBeanInfoSearchPath(Unknown Source)
> > > at ....`

> > 같은 애플릿이 Microsoft VM 에서는 실행할 수 있습니다.

> ### 원인

> > `Introspector.setBeanInfoSearchPath()` 메소드의 호출에서는,`BeanInfo` 클래스의 검색에 사용되는 패키지명의 일람을 변경할 수 있습니다. 복수의 애플릿이 VM 로 실행중의 경우, 다른 애플릿에 `BeanInfo` 의 검색을 리다이렉트(redirect) 하기 위해서, 상정외의 패키지로, 신뢰되어 있지 않은 애플릿이 이 메소드를 호출할 가능성이 있습니다. 이것이 시큐리티 홀입니다.

> > 시큐리티에 관한 일을 취급하기 (위해)때문에, JRE 에서는 `java.util.PropertyPermission` 에 대한 시큐리티 체크를 이 메소드에 추가했습니다. 애플릿이 서명되지 않고, 이 메소드에 불려 갔을 경우,`AccessControlException` 가 throw 됩니다.

> ### 해결 방법

> > 회피책은 다음의 머지않아인가입니다.

> > 1. JDK 의 `jarsigner` 툴을 사용해 애플릿에 서명한다. 이것으로 애플릿은 신뢰되는 애플릿으로서 실행되어`Introspector.setBeanInfoSearchPath()` 메소드를 호출하기 위한 액세스권을 얻는다
> > 2. `Introspector.setBeanInfoSearchPath()` 를 호출하지 않게 애플릿의 코드를 개변한다. 예를 들어 `BeanInfo` 검색 패스에 의존하는 대신에, 완전 수식 패키지명을 사용해 `BeanInfo` 를 검색한다

> ### 상세 정보

> 「jarsigner - JAR 서명 및 검증 툴」을 참조해 주세요.