2012-10-16 3 views
0
그것은, Guice 지원 핸들러의 특별한 종류와 처리 요청의 단일 지점을 정의 아래와 같이 할 수 있습니다

: 기본적으로GWT :: 프로세스 서버 오류

@Singleton 
public class GuiceRemoteServiceServlet extends RemoteServiceServlet { 
    @Inject 
    private Injector injector; 

    @Override 
    public String processCall(String payload) throws SerializationException { 
     RPCRequest req = RPC.decodeRequest(payload, null, this); 

     RemoteService service = getServiceInstance(
       req.getMethod().getDeclaringClass()); 

     return RPC.invokeAndEncodeResponse(service, req.getMethod(), 
       req.getParameters(), req.getSerializationPolicy()); 

    } 

    @SuppressWarnings({"unchecked"}) 
    private RemoteService getServiceInstance(Class serviceClass) { 
     return (RemoteService) injector.getInstance(serviceClass); 
    } 
} 

, 이것은 이상적인 장소입니다 사용자가 인증되었는지 확인하는 것과 같은 보안 관련 작업을 수행합니다. 사용자가 에 인증되었는지 확인하려면 서버에 대한 모든 요청이 필요합니다. 따라서 일반적으로 메소드 validateUser을 추가합니다.이 메소드는 true/false를 반환하거나 예외를 throw합니다. 이 메소드는 위의 코드에서 processCall 내에서 호출됩니다.

이제 질문은 - 클라이언트 쪽에서이 인증 응답을 어떻게 처리합니까? 단일 장소에 입력하고 모든 서비스에서 기본적으로이 사용자 유효성 검사를 사용하도록 설정했는지 확인하고 싶습니다. 새로운 서비스는 보안 관련 코드를 추가하지 않고 "보안"되어야합니다. 따라서 "onFailure"메소드 또는 이와 유사한 메소드에이 코드를 복사/붙여 넣기 할 필요가 없습니다.

의견이 있으십니까?

답변

1

기본 RPC 메커니즘 (예 : gwtp이 아님)을 사용하는 경우에는 추상 AsyncCallback을 만들고 onFailure 메서드를 구현하여 전역 서버 오류를 처리 할 수 ​​있습니다. 다른 예외의 경우 호출자가 구현할 수있는 다른 메서드에 위임 할 수 있습니다.

서버를 호출 할 때마다 AsyncCallback 대신이 새 콜백을 사용하면됩니다. 매번 onFailure 메소드를 구현할 필요가 없기 때문에 수행하는 것도 좋은 방법입니다.

RequestFactory가 이것을 사용하면 Receiver은 추상이므로 사용자가 생성 할 때 onSuccess 메소드를 정의하기 만하면됩니다.

+0

좋은 지적이지만, 나는이 방법을 사용하기로 결정했다. 그러나 일반적인 예외 처리를 위해서 또 다른 추상 클래스를 사용하는 것은 좋지 않다. – jdevelop