2014-04-09 2 views
0

코드 골프 스택 교환에서 programming competition을 실행하려고합니다. 게임 보드에서 동물들을 서로 맞대고 조종하는 작은 제어 프로그램을 작성했습니다. 동물은 대부분 다른 사람들이 쓴 자바 클래스 (CrazyWolf.java, SuicideWolf.java 등)입니다.리플렉션 방지 또는 방지

사람들은 경쟁에서 너무 많은 허점을 발견하여 머리를 돌립니다. 그들 중 일부는 시뮬레이션을 시작하기 전에 경쟁을 방해하기 위해 리플렉션을 사용하는 늑대를 쓰기 시작했습니다.

저는 이것을 두 가지 관점에서 봅니다.

  • 리플렉션에 대해 동일한 패키지의 클래스를 보호 할 수 있습니까?
  • 경쟁자가 자신의 늑대를 반사로부터 보호 할 수 있습니까? 첫 번째 질문에 관해서는

, 나는 스택 오버플로에서 찾을 수있는 가장 가까운 답은 다른 패키지에 대한 액세스를 제한 해결하는 this one했다. 모든 늑대는 동일한 Animal 클래스를 상속하므로 클래스에 액세스 할 수 있어야합니다.

두 번째 질문에 대해서는 아무 것도 발견하지 못했습니다. 나는 사적인 것과 심지어 최종적인 변수에 대해서 알고 있다고 생각했던 모든 것을 뒤적 거리며 반사하는 것처럼 보인다. 필자는 정적 최종 변수를 리플렉션의 영향을받지 않는 상수로 대체하는 컴파일러를 속이는 것에 대한 기사를 찾을 수 있었지만 신뢰할 수없는 것처럼 보이고 정적 및 최종 필드가 필요합니다.

이 문제를 해결하기 위해 어떤 방법을 사용할 수 있습니까? Java 8과 NetBeans 7.4를 사용하고 있습니다.

답변

1

가장 쉬운 방법은 보호 된 샌드 박스 모드에서 실행하고 보안 관리자가 리플렉션을 완전히 종료하는 것입니다. 내 질문이 대답에 링크

Disable Java reflection for the current thread

+0

, 그러나 아마 나는 말을 이해하기에 충분한 노력을하지 않았다

여기에 대한 답변 중 일부는 도움이 될 수 있습니다. 나는 그것을 다시 볼 것이다. 적어도 나에게 검색을위한 좋은 용어를 주셨습니다. – Rainbolt

+0

아하, 네가 답이 아닌 질문에 연결 했으니 까 맞지 않았다. 가장 간단한 방법은 코드를 애플릿으로 실행하는 것입니다. 이미 많은 악용을 막을만큼 보안 수준을 높입니다. 그것의 더 복잡한 다음 구글 보안 관리자와 그것을 구성하는 방법. –