État HTTP 404 après le déploiement d'une application Web avec un domaine personnalisé pour Tomcat 6
-
01-10-2019 - |
Question
je développe une application web pour Tomcat 6, et je suis face à face avec un problème que je ne sais pas comment résoudre. Considérons le petit scénario suivant. Imaginez qu'il est nécessaire pour Authentifier les utilisateurs non seulement par utilisateur et mot de passe, l'authentification est accordée que si certaines conditions supplémentaires sont vraies (par exemple l'utilisateur, mot de passe, et ses matchs d'adresse IP). En ce que je compris, Tomcat introduit le concept de domaines. Un JDBCRealm
assez simple d'été pour l'application, car la paire d'utilisateur et le mot de passe a été vérifié que jusqu'au moment. Maintenant, il est nécessaire de vérifier l'adresse IP aussi. J'ai écrit une classe de test simple qui étend la classe 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;
}
}
Et puis j'ai essayé de lier cette classe de domaine en utilisant le 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>
Le déploiement de l'application Web réussit, mais lorsque je tente d'accéder à la page de connexion, Tomcat renvoie une page 404 (je soupçonne que la racine du problème est l'attribut className
dans le nœud Realm
):
HTTP Status 404 -
type Status report
message
description The requested resource () is not available.
Apache Tomcat/6.0.24
Comment puis-je lier un descendant JDBCRealm
personnalisé dans context.xml
? Peut-être que je suis tout à fait tort d'essayer d'utiliser le JDBCRealm
pour cela, mais je ne vois pas la bonne solution de toute façon.
Merci à l'avance.
La solution
Déploiement incorrect du royaume était la cause du problème. De plus, un domaine personnalisé ne convient pas ici. La meilleure façon de vérifier l'adresse IP est en train d'écrire un authentificateur formulaire personnalisé qui ont accès à la requête HTTP. Modification du authentificateur de forme dans le web.xml
, et le déployer permis exactement ce que je avais besoin. Elle élimine également l'obligation de vérifier l'adresse IP à chaque demande, car les ressources sécurisées sont cachées derrière l'autorisation « mur » - cela signifie que si l'autorisation est accordée, elle aussi des moyens que la propriété intellectuelle était valide. Merci à josek pour pointer une bonne solution. J'étais juste un peu confus avec le concept de domaines dans Tomcat.