Подтвердить что ты не робот

Как получить пароль от базовой аутентификации HTTP

Я использую HTTP BASIC Authentication с Java.

Мой сервлет отправляет JMS-сообщение, но мне нужно предоставить пользователю и паролю аутентификацию при создании соединения:

javax.jms.ConnectionFactory.createConnection(String username, String password)

Я могу получить имя пользователя из HttpServletRequest.getUserPrincipal(). Но, похоже, нет способа получить пароль. Как это решить?

4b9b3361

Ответ 1

Пароль, на который вы ссылаетесь, скорее всего отличается от пароля, предоставленного пользователями при входе в систему. Хотя вопрос использования неясен из вопроса, но, похоже, вы пытаетесь использовать имя пользователя/пароль, предоставленные внешними пользователями, для создания соединения с JMS Connection Factory. Это не звучит архитектурно для меня. Вы должны использовать только один учетный ключ для подключения к ConnectionFactory, который должен быть защищен (рассматривайте его как соединения db). Лучше использовать JNDI для поиска ConnectionFactory и обхода файлов управления именем пользователя и паролем.

Однако, если вы должны использовать эту технику, можете использовать следующий код. Я копирую его из проекта Gitblit, поскольку он был открыт в моем eclipse

Использование класса Java8 Base64:

final String authorization = httpRequest.getHeader("Authorization");
    if (authorization != null && authorization.startsWith("Basic")) {
        // Authorization: Basic base64credentials
        String base64Credentials = authorization.substring("Basic".length()).trim();
        String credentials = new String(Base64.getDecoder().decode(base64Credentials),
                Charset.forName("UTF-8"));
        // credentials = username:password
        final String[] values = credentials.split(":",2);

Ответ 2

Имя пользователя и пароль были первоначально отправлены в заголовке HTTP Authorization (закодировано base64), чтобы вы могли использовать это; но если пользователь поддерживает сеанс с использованием файлов cookie, они не обязательно будут отправлять этот заголовок каждый раз.