내가 보안 검사를 구현하는 방법은 다음과 같습니다. 나는 모든 RequestFactory
요청이 이전에 로그인 한 사용자와 연결되어 있는지 확인 서버 측에서
을 (즉, web.xml
파일을이 작업을 수행하려면 war/WEB-INF 디렉토리)에는 서블릿 클래스에 대한 매핑이 있어야합니다. 여기에 web.xml
파일의 항목은 다음과 같습니다
<servlet>
<servlet-name>requestFactoryServlet</servlet-name>
<servlet-class>org.greatlogic.rfexample2.server.RFERequestFactoryServlet</servlet-class>
<init-param>
<param-name>symbolMapsDirectory</param-name>
<param-value>WEB-INF/classes/symbolMaps/</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>requestFactoryServlet</servlet-name>
<url-pattern>/gwtRequest</url-pattern>
</servlet-mapping>
RFERequestFactoryServlet
클래스는 다음과 같은 코드를 포함 : 나는 SC_UNAUTHORIZED
오류를 확인하기 위해 모든 RequestFactory
반응을 차단하는 데 필요한 클라이언트 측에
public class RFERequestFactoryServlet extends RequestFactoryServlet {
@Override
protected void doPost(final HttpServletRequest request, final HttpServletResponse response)
throws IOException, ServletException {
if (!userIsLoggedIn(request)) {
response.sendError(HttpServletResponse.SC_UNAUTHORIZED);
}
else {
super.doPost(request, response);
}
}
private boolean userIsLoggedIn(final HttpServletRequest request) {
boolean result = false;
HttpSession session = request.getSession();
if (session != null) {
User user = (User)session.getAttribute("User");
result = user != null;
}
return result;
}
}
.
이
MyRequestFactory requestFactory = GWT.create(MyRequestFactory.class);
requestFactory.initialize(eventBus, new RFERequestTransport());
내 RFERequestTransport
클래스는 DefaultRequestTransport
클래스 확장 :
public class RFERequestTransport extends DefaultRequestTransport {
private final class RFERequestCallback implements RequestCallback {
private RequestCallback _requestCallback;
private RFERequestCallback(final RequestCallback requestCallback) {
_requestCallback = requestCallback;
}
@Override
public void onError(final Request request, final Throwable exception) {
_requestCallback.onError(request, exception);
}
@Override
public void onResponseReceived(final Request request, final Response response) {
if (response.getStatusCode() == Response.SC_UNAUTHORIZED) {
// the login processing goes here
}
else {
_requestCallback.onResponseReceived(request, response);
}
}
} // end of the RFERequestCallback class
@Override
protected RequestCallback createRequestCallback(final TransportReceiver receiver) {
return new RFERequestCallback(super.createRequestCallback(receiver));
}
}
을 RequestFactory
이 호출 요청 콜백을 만들 때이처럼 RequestFactory#initialize
호출에 RequestTransport
특정를 사용하도록 RequestFactory
객체 말할 필요 내 방법은 RequestCallback
의 자체 버전을 만듭니다. 사용자가 (서블릿에 의해 결정된대로) 로그인 한 경우에는 보통 RequestFactory
처리 만 수행됩니다. 그렇지 않으면 사용자와의 로그인 프로세스를 진행합니다. 로그인 프로세스의 일부로 서버와의 통신을 통해 로그인을 확인합니다 ... 로그인이 성공하면 서버에 객체를 만들고 "사용자"속성에 대한 참조를 저장합니다.이 경우 userIsLoggedIn
에서 확인합니다 메소드를 호출한다.
어떤 종류의 보안 확인을 하시겠습니까?테스트 사용자 인증? – Sam
기본적으로 사용자가 활성 세션인지 확인하고 싶습니다. – outellou