《코어 자바 2》독서 노트(2)
- pubic final class Period
- {
- private final Date start;
- private final Date end;
-
- public Period(Date start, Date end)
- {
- if (start.compareTo(end) > 0)
- throw new IllegalArgumentException(start + "after " + end);
- this.start = start;
- this.end = end;
- }
-
- public Date getStart()
- {
- return start;
- }
- public Date getEnd()
- {
- return end;
- }
- }
이 종 류 는 두 개의 안전 하지 않 은 곳 이 있 습 니 다.먼저 첫 번 째 공격 코드 를 보 겠 습 니 다.
- Date start = new Date();
- Date end = new Date();
- Period p = new Period(start, end);
- end.setYear(78);// p !
외부 와 내부 에서 같은 데 이 터 를 인 용 했 기 때문에 이 문 제 를 해결 하기 위해 서 는 Period 의 구조 함 수 를 수정 해 야 합 니 다.
- public Period(Date start, Date end)
- {
- this.start = new Date(start.getTime());
- this.end = new Date(end.getTime());
- if (start.compareTo(end) > 0)
- throw new IllegalArgumentException(start + "after " + end);
- }
이렇게 내부 의 개인 데 이 터 는 외부 대상 이 가리 키 는 것 과 다 르 면 외부 에 의 해 바 뀌 지 않 는 다.
두 번 째 공격 코드 를 보 겠 습 니 다:
- Date start = new Date();
- Date end = new Date();
- Period p = new Period(start, end);
- p.getEnd().setYear(78);// p !
이것 은 분명히 공유 방법 으로 내부 의 개인 데 이 터 를 노출 시 켰 기 때문에 우 리 는 내부 의 개인 데이터 만 읽 는 버 전(즉,복사)으로 돌아 갈 수 있다.
- public Date getStart()
- {
- return (Date)start.clone();
- }
- public Date getEnd()
- {
- return (Date)end.clone();
- }
2.위의 이 예 를 읽 고 다음 과 같은 코드 세 션 이 생각 났 습 니 다.
- public class Suit
- {
- private final String name;
- private static int nextOrdinal = 0;
- private final int ordinal = nextOrdinal++;
-
- private Suit(String name)
- {
- this.name = name;
- }
- public String toString()
- {
- return name;
- }
- public int compareTo(Object o)
- {
- return o
- }
- public static final Suit CLUBS = new Suit("Clubs");
- public static final Suit DIAMONDS = new Suit("diamonds");
- public static final Suit HEARTS = new Suit("hearts");
- public static final Suit SPADES = new Suit("spades");
-
- private static final Suit[] PRIVATE_VALUES = {CLUBS,DIAMONDS,HEARTS,SPADES};
- public static final List VALUES = Collections.unmodifiedList(Arrays.asList(PRIVATE_VALUES));
-
-
- }
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.