2015-11-17 2 views
1

Я по-прежнему пытаюсь внедрить пользовательский модуль входа JASPIC для Wildfly 9. Если вход успешно завершен, все работает так, как ожидалось. Но я бы ожидал ответа HTTP 403, если логин не был успешным. Так что я написал этот маленький тест:JASPIC Войти с Wildfly 9 Отправить код возврата HTTP

@Test 
public void invalidCredentials() throws IOException, SAXException { 
    try { 
     WebConversation webConversation = new WebConversation(); 
     GetMethodWebRequest request = new GetMethodWebRequest(deployUrl + "LoginServlet"); 
     request.setParameter("token", "invalid"); 
     WebResponse response = webConversation.getResponse(request); 
     fail("Got " + response.getResponseCode() + " expected 403!"); 
    } catch (final HttpException e) { 
     assertEquals(403, e.getResponseCode()); 
    } 
} 

Результат таков:

Failed tests: 
    JaspicLoginTest.invalidCredentials:114 Got 200 expected 403! 

Я попытался это три варианта завершения метода validateRequest в ServerAuthModule после недопустимой аутентификации:

return AuthStatus.SEND_FAILURE; 
return AuthStatus.FAILURE; 
throw new AuthException(); 

Но ни одно из вышеизложенного не вызывает ответ HTTP-ответа об отказе аутентификации (403). Является ли это снова ошибкой Wildfly? Или мне нужно создать этот код возврата другим способом?

+1

а) 'FAILURE' для' ClientAuthModule's. «ValidateRequest» SAM (vr) может возвращать «SEND_FAILURE» или бросать «AuthException», чтобы указать на ошибку во время выполнения. b) Да, вы должны сами установить статус HTTP для ответа. То, что происходит в противном случае, не является стандартным и нелегко определить заранее, так как vr может быть вызван до 3 раз для одного запроса. c) Значения «AuthStatus» по своей сути не связаны с кодами состояния HTTP. Это, например, штраф, чтобы вернуть 'SEND_FAILURE' * и * подавать ответ« 200 »клиенту. d) рассмотреть возможность чтения спецификации; это намного понятнее, чем Javadocs. – Uux

ответ

1

Ok, очевидно, можно взять объект MessageInfo и может сделать такие, как:

public AuthStatus validateRequest(MessageInfo messageInfo, 
            Subject clientSubject, 
            Subject serviceSubject) throws AuthException{ 
    //Invalid case: 
    HttpServletResponse response = 
         (HttpServletResponse) messageInfo.getResponseMessage(); 
    response.setStatus(HttpServletResponse.SC_FORBIDDEN); 
    return AuthStatus.SEND_FAILURE; 
}