2013-04-17 1 views
3

MVEL 식 평가를 샌드 박스에 넣으려고합니다. 불행히도, 기본적으로 MVEL은 표현식 언어로 java.lang. * 클래스를 모두 포함하므로 사용자는 "Runtime.exit()"를 호출하여 전체 시스템을 종료 할 수 있습니다.MVEL : 표현식에서 java.lang. * 클래스를 유지하는 방법?

addImport()로 명시 적으로 추가하지 않은 모든 클래스를 제외하려면 어떻게해야합니까?

VariableResolvers의 헤드 또는 테일을 만들 수 없었습니다.

답변

2

알고있는 한, 지원되지 않습니다.

저는 얼마 전에 회사의 프로젝트에서이 필요성에 직면했습니다. 유형 및 메소드에 대한 액세스를 제어하는 ​​사용자 정의 정책을 구성하는 방법을 소개하기 위해 MVEL을 상당히 변경해야했습니다. 문제는 정규화 된 이름으로 모든 클래스에 액세스 할 수 있으므로 기본 가져 오기를 제거하는 문제 만은 아니 었습니다. 불행히도 사용할 수 있도록 코드를 소유하고 있지 않습니다.

+1

이것은 너무 나쁩니다. MVEL이 정말 마음에 듭니다. – ccleve

0

MVEL에서 이러한 호출을 제한하기 위해 AspectJ를 사용해 보셨습니까?

+0

이것이 어떻게 도움이되는지 잘 모르시겠습니까? 어떤 종류의 보안 샌드 박스를 구현합니까? – ccleve

-1
ParserContext ctx = new ParserContext(); 

ctx.addImport("System", String.class); 
ctx.addImport("Runtime", String.class); 
+0

답변이 삭제 될 위험이 있습니다. 여기서 일어나는 일과 이것이 제기 된 질문에 어떻게 대답 하는지를 설명 할 필요가 있습니다. –

관련 문제