2010-12-29 2 views
3

현재 Google App Engine에 배포 할 GWT 2.1 애플리케이션을 개발 중입니다. 새 RequestFactory를 사용하여 서버 통신을 실현하고 싶습니다.GWT 2.1의 RequestFactory를 사용하여 보안 제약 조건을 처리하는 방법은 무엇입니까?

이제 내 문 제는이 컨텍스트에서 세부적인 보안 문제를 처리하는 방법입니다. RequestContext 스터브에서 선언 된 서버 동작 중 일부는 (원격 호출의 매개 변수에 따라) 특정 사용자로 제한되어야합니다. 전화가 승인되지 않은 경우 클라이언트에 로그인 페이지를 표시하여 (예 : 다른 사용자로 로그인 할 수 있도록) 싶습니다.

비용 예제에서는 로그인 페이지에 자동 리디렉션을 구현하는 방법을 알고 있지만이 예제에서는 보안 모델이 매우 간단합니다. 사용자가 기록 된 경우에만 클라이언트가 서블릿에 액세스 할 수 있습니다 in.

내 서버 측 서비스에서 사용자 지정 UnAuthorizedException을 발생시켜야합니까? 이 예외는 어디에서 가로채는 것이 좋습니까? (비용 예제의 GaeAuthFilter와 같은 서블릿 필터에서이 작업을 수행 할 수 있습니까?)

답변

5

또한이 문제에 대한 해결책을 찾고 다음을 생각해 냈습니다. 사물의 사용자 인터페이스 측면 (예 : 로그인 페이지로의 리디렉션)을 완전히 처리하지는 않지만 무단 액세스로부터 데이터 영역을 보호합니다.

public class MyRequestFactoryServlet extends RequestFactoryServlet 
{ 
    @Override 
    protected void doPost(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException 
    { 
     if (! userIsLoggedIn(req)) 
     { 
      throw new ServletException("not logged in"); 
     } 
     else 
     { 
      super.doPost(req, res); 
     } 
    } 

    @Override 
    protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException 
    { 
     if (! userIsLoggedIn(req)) 
     { 
      throw new ServletException("not logged in"); 
     } 
     else 
     { 
      super.doGet(req, res); 
     } 
    } 

    protected boolean userIsLoggedIn(HttpServletRequest req) 
    { 
     // insert your custom code here for checking session for valid login token 
     User user = (User) req.getSession().getAttribute("LOGGED_IN_USER"); 
     return user != null && user.isEnabled(); 
    } 

그런 다음 RequestFactoryServlet 대신 web.xml에서 MyRequestFactoryServlet을 사용합니다.

로그인의 UI 측면을 처리하기 위해 내 앱의 방문 페이지에서 GWT RPC를 사용하여 유효한 로그인을 확인합니다. 사용자가 로그인하지 않으면 사용자 이름/암호를 묻는 메시지가 나타납니다. 위의 코드는 백엔드를 다른 URL로 직접 점프하거나 서블릿에 수동으로 데이터를 게시하여 로그인 페이지를 우회하려는 사용자로부터 보호합니다.

+0

응답 해 주셔서 감사합니다. 안드로이드에 동일한 RF를 사용할 때 이것이 어떻게 구현 될지 궁금합니다. 나는 같은 requestfactories 및 객체를 안드로이드에서 사용하며 세션 속성을 설정하는 방법을 잘 모릅니다. 이거 처리 했니? – Patrick

관련 문제