2011-01-23 3 views
0

내 GWT 앱 (2.1.0)을 사용하면 다양한 데이터 결합 방법을 선택할 수 있습니다. 평균, 분산 등을 찾을 수 있습니다. 어떤 방법을 사용할지를 지정하는 enum으로이 효과를 얻을 수 있습니다.런타임시 GWT 코드에 대한 액세스 제어

이제 개별 클라이언트에 대한 사용자 지정 메서드를 코딩하려고합니다. 예를 들어 누군가가 MODE 기능을 요청할 수 있습니다.

하나의 해결책은 열거 형에 MODE를 추가하고 getMode() 함수를 작성하여 앱에 추가하는 것입니다. 문제는 10,000 개의 사용자 지정 옵션이 있습니다. 괜찮아요. 쓰고 10,000 가지 방법이 있지만 모든 클라이언트에 모든 10,000 개의 기능을 보내고 싶지는 않습니다. 사실, 한 클라이언트가 개인 데이터를 포함 할 수있는 다른 클라이언트의 메서드 구현을 볼 수 없도록하고 싶습니다.

GWT.runAsync는 이러한 모든 방법을 사용자가 요청할 경우에만 다운로드되는 다른 청크로 나눌 수 있습니다. 해당 코드를 다운로드하기 전에 일종의 권한 검사를 실행하는 방법이 있습니까? 예를 들어 누군가 열거 형 환경 설정의 값을 변경하여 (개인) 코드를 다운로드하도록 트릭하려고하지 않습니다.

저는 이것을 Java GAE에서 실행하고 있습니다. 나는 cachedjs 파일을 다운로드하기 전에 권한 검사를 할 필터를 작성할 수 있지만, 모든 컴파일 후에 GWT 파일의 이름이 바뀌기 때문에 의미있는 방식으로 다른 청크에 대한 액세스를 제어하는 ​​방법을 생각할 수 없습니다.

분명히하는 것이 좋겠습니다. 어떤 포인터 주셔서 감사합니다!

답변

1

에 전화를 걸려면, 내가 서버에 개인 알고리즘 구현을 했을까 . 누군가는 당신의 소스를 쉽게 볼 수 있었지만 (난독 화되었지만) 지연된 소스 (또한 난독 화 된 것)를 다운로드 할 수있었습니다. 당신이 (runAsync)를 결합 연기를 사용하는 경우

, 당신이 당신의 주요 .cache.html 파일의 상단에 다음과 같이 표시됩니다

// spacing modified for readability 
var $strongName = '02F159CD1F48EEB372B36E0BA704A0BE'; 
function __gwtStartLoadingFragment(frag) { 
    return $moduleBase + 'deferredjs/' + $strongName + '/' + frag + '.cache.js'; 
} 

것을 보면, 하나는 다운로드 경로를 확인할 수 있습니다 지연 코드의 소스. 서버에서 허용하는 경우 (특정 조각에 대한 사용 권한을 확인하는 것이 어려울 수 있기 때문에) 제공됩니다.

코드를 서버에 보관하는 경우 결과를 보내기 전에 rpc 서비스를 만들고 서버에서 사용 권한을 확인할 수 있습니다. 많은 서비스 메소드를 원하지 않으면, 디스패치 메소드 이름과 계산 데이터를 작성하십시오. 클라이언트에 대한 알고리즘을 실행해야하는 경우


는, 당신은 쉽게 RPC 서비스를 통해 동적으로 서비스를 제공하고 클라이언트에의 평가()를 수행하여 코드를 보호하기 위해 만들 수 있습니다. GWT 대신 Javascript로 알고리즘을 구현해야합니다 (나머지 코드는 여전히 GWT 임).

1)과 같은 형태의 서버 구현과 서비스 방법을 만들기 :

public String getAlgorithmCode(String name) { 
    // locate the code. store it in a file, database, cache it in memory, etc. 
    // ... 
    return javascriptSourceCode; 
} 

2) 페이지에 자바 스크립트를로드합니다. GWT 코드에서만 이것을 사용하기 때문에 현재 프레임에서 eval() 할 수 있지만 $ wnd에로드하려면이 기사를 확인하십시오.

http://blog.lexspoon.org/2009/03/many-scopes-of-javascripts-eval.html

같은 명명 규칙 및 함수 서명을 사용하여 자바 스크립트 구현을 작성하는 경우, 당신은 단지 JSNI를 사용하여 호출 할 수 있습니다.

3)이 메서드를 호출 할 때 함수가 정의되어 있는지 확인할 수 있습니다.

존재하지 않는 경우 서비스를 사용하십시오.

이 존재하는 경우, 여기 Calling dynamic function with dynamic parameters in Javascript

+0

불행히도 코드는 수백 번 실행되기 때문에 클라이언트에 있어야합니다. 정말 특정 조각에 대한 사용 권한을 확인하는 것과 같은 일을해야합니다. 이것은 여전히 ​​최선의 해답 일 수 있습니다 - 특정 조각에 대한 사용 권한을 확인하는 것은 문제가 될 정도로 다루기 힘들 수 있습니다! –

+0

알고리즘을 순수 자바 스크립트로 구현하고 JSNI를 통해 호출 할 수 있습니까? 그게 효과가 있다면 접근법을 제안 할 수 있습니다. – andykellr

+0

어쨌든 나는 그것을 게시 할 것이다. 다른 사람이 유용하다고 생각할 수도 있습니다. – andykellr

0

테스트에서 runAsync() 전화를 마무리하십시오.

if (testPermission()) { 
    GWT.runAsync(...); 
} 

또는 당신이 당신의 소스 코드의 보안에 대해 정말 염려되는 경우 서비스

myService.testPermissions(user, new AsyncCallback() { 
    @Override 
    public void onFailure(Throwable caught) { 
    ... 
    } 

    public void onSuccess(Boolean hasPermission) { 
    GWT.runAsync(...); 
    } 
}); 
+0

설명 된대로 적용하지만 testPermissions이 경우 클라이언트이기 때문에, 누군가가 그 코드를 건너 뛸 수 있습니다 오른쪽, 코드 다운로드로 바로 이동 사용하여 전화를? –

+0

그들이 문제를 해결한다면 예. 아무 권한이없는 사용자가 소스 파일을 다운로드 할 수 없도록하려면 JS 파일에 대한 액세스를 거부하거나 논리 서버 측을 이동하여 서버에서이를 적용해야합니다. –