Java Reflection 객체 생성
Reflection Attack
- 생성자를 private 로 선언해서 외부 생성을 막으려고 해도 reflection 을 사용하면 외부에서 생성 가능하도록 할수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import java.lang.reflect.*;
class Test{
// private 이므로 외부 생성 불가
private Test()
{
System.out.println("Test");
}
}
class Main{
public static void main(String[] args) throws ClassNotFoundException,
InstantiationException, IllegalAccessException, ReflectiveOperationException{
Class<Test> kclass = Test.class;
Constructor<Test> cons = kclass.getDeclaredConstructor(); // 생성자를 가져옴
cons.setAccessible(true); // 생성자를 public 으로 변경
Object object = cons.newInstance(); // 생성 가능
}
}
- 리플랙션을 통해서 객체는 언제든 생성 가능하다
- 기본 생성자가 없더라도 생성 가능
- private 로 선언하더라도 setAccessible 을 사용해 변경후 생성 가능