SAM's CallbackHandler
является причиной ваших проблем.
Первый it.jaspic.sec.TokenConfigProvider
пренебрегает обработчик, переданный ему среды выполнения:
public ServerAuthConfig getServerAuthConfig(String layer, String appContext, CallbackHandler handler) throws AuthException {
return serverAuthConfig;
}
Затем it.jaspic.sec.TokenServerConfig
использует свой собственный обработчик, который в основном делает ничего:
public TokenServerConfig() throws AuthException {
// ...
handler = new CallbackHandler() {
@Override
public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
// just logs its arguments
}
};
}
Следовательно, it.jaspic.sec.TokenSAM#validateRequest
не смог коммуницировать идентификатор вызывающего абонента во время выполнения. Так как он по-прежнему ошибочно возвращает AuthStatus.SUCCESS
, это довольно неопределенное поведение с этого момента, по крайней мере, до JASPIC. Это забавно, как если бы контейнер Servlet пытался удержать обе стороны в этом случае, почитая как SAM AuthStatus
, предлагающий успешный обмен сообщениями об аутентификации, с одной стороны, так и <security-constraint>
приложения - с другой. Следует признать, что 401
, 403
или, возможно, еще лучше, ответ 500
, указывающий на механизм аутентификации, не подчиняющийся его контракту, мог быть менее запутанным.
Очевидным решением является передача обработчика в SAM. Очевидно, что API не очень помогает, но для использования одного случая с одним слоем/единственным приложением для проверки подлинности с использованием механизма аутентификации должно быть достаточно лениво создать экземпляр ServerAuthConfig
с обработчиком, когда он сначала запрашивается через время выполнения через getServerAuthConfig
призывание:
public synchronized ServerAuthConfig getServerAuthConfig(String layer, String appContext, CallbackHandler handler) {
if (serverAuthConfig == null) {
serverAuthConfig = new TokenServerConfig(handler);
}
return serverAuthConfig;
}
И, конечно же, новый конструктор под названием выше (который имеет только хранить аргумент обработчика) должен быть введен в it.jaspic.sec.TokenServerConfig
.
Эти два изменения должны сделать конечную точку /services/user/userA
доступной.
Просим предоставить дополнительную информацию, например. статус ответа (если вы его вообще получите) и любые соответствующие записи в журнале. Кроме того, я сомневаюсь, что вам нужен элемент '' в вашем 'web.xml'. –
Uux