HTTP Status 404 после развертывания веб-приложения с пользовательской областью в Tomcat 6 - PullRequest
1 голос
/ 25 августа 2010

Я разрабатываю веб-приложение для Tomcat 6 и сталкиваюсь с проблемой, которую не знаю, как решить. Давайте рассмотрим следующий небольшой сценарий. Представьте, что требуется аутентифицировать пользователей не только по имени пользователя и паролю, аутентификация предоставляется только в том случае, если выполняются некоторые дополнительные условия (например, пользователь, пароль и его IP-адрес совпадают). Насколько я понял, Tomcat представил концепцию сфер. Простого JDBCRealm было достаточно для приложения, потому что пара пользователь и пароль проверялась только до настоящего момента. Теперь необходимо также проверить IP-адрес. Я написал простой тестовый класс, который расширяет класс JDBCRealm:

package security;

import org.apache.catalina.realm.JDBCRealm;
import org.apache.log4j.Logger;

import java.security.Principal;
import java.sql.Connection;

public class ApplicationRealm extends JDBCRealm {

    protected final Logger logger = Logger.getLogger(this.getClass());

    @Override
    public synchronized Principal authenticate(Connection connection, String userName, String credentials) {
        logger.info("custom realm test, the authentication will be failed just for testing");
        return null;
    }

}

А потом я попытался связать этот класс областей, используя context.xml:

<?xml version="1.0" encoding="UTF-8"?>
<Context>
    <Realm className="security.ApplicationRealm" connectionName="${user}" connectionPassword="${password}"
        connectionURL="${url}${database}" debug="99" driverName="${driver}" roleNameCol="role" userCredCol="pw"
        userNameCol="login" userRoleTable="users_roles" userTable="users"/>
</Context>

Развертывание веб-приложения прошло успешно, но когда я пытаюсь получить доступ к странице входа в систему, Tomcat возвращает страницу 404 (я подозреваю, что причиной проблемы является атрибут className в узле Realm):

HTTP Status 404 -
type Status report
message
description The requested resource () is not available.
Apache Tomcat/6.0.24

Как связать пользовательский JDBCRealm потомок в context.xml? Может быть, я совершенно не прав, пытаясь использовать для этого JDBCRealm, но все равно не вижу правильного решения.

Заранее спасибо.

1 Ответ

0 голосов
/ 28 августа 2010

Неправильное развертывание области было причиной проблемы.Более того, пользовательское царство здесь не подходит.Лучший способ проверки IP-адреса - написание аутентификатора пользовательской формы, который имеет доступ к HTTP-запросу.Изменение аутентификатора формы в web.xml и его развертывание позволили именно то, что мне было нужно.Это также устраняет необходимость проверять IP-адрес при каждом запросе, поскольку защищенные ресурсы скрыты за «стенкой» авторизации - это означает, что если авторизация предоставлена, это также означает, что IP был действительным.Спасибо JoseK за нахождение хорошего решения.Меня просто немного смутило понятие о сферах в Tomcat.

...