2010-08-25 4 views
1

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

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 для этого, но я все равно не вижу правильного решения.

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

+0

Проверьте журналы на наличие стеков. –

+0

что в журналах? (tomcat/logs) – Bozho

+0

@ Thorbjørn Ravn Andersen, я пытался проверять журналы раньше, но кажется, что ничего не записывается в журнал. –

ответ

0

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