2014-05-15 2 views
0

J'ai suivi le fichier esapi4java-core-2.0-install-guide.pdf pour Eclipse et je l'ai appliqué dans un environnement Websphere 7.5.'esapi' n'est pas défini dans Websphere 7

Étape 1 - J'ai ajouté le fichier esapi.jar dans les bibliothèques (Projet> Propriétés> Chemin de compilation Java> onglet Bibliothèques> Ajouter des fichiers JAR externes). Étape 2 - J'ai localisé les fichiers de validation .properties dans un dossier sur ma machine. Étape 3 - J'ai choisi d'ajouter esapi pour toutes les configurations d'exécution (Windows> Préférences> Java> JRE installés). J'ai sélectionné WebSphere Application Server v7.0 JRE, sélectionné "Modifier" et ajouté esapi.jar à cette liste de bibliothèques. Sur ce même formulaire, j'ai ajouté l'argument -Dorg.owasp.esapi.resources = "/ path/to/.esapi" à l'invite Default VM Arguments, le chemin d'accès à mes fichiers de validation .properties & esapi.

Voici le code sur la page JSP qui échoue:

<%@ page language="java" %> 
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> 
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> 
<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> 
<%@ page import="java.net.*" %> 

<script type="text/javascript" language="javascript"> 

function validateForm() 
{ 

    var userURL = "http://www.google.com"; 
    var isValidURL = ESAPI.validator().isValidInput("URLContext", userURL, "URL", 255, false); 
    if (isValidURL) { 
     alert("true"); 
    } else { 
    alert("false"); 
    } 
} 

</script> 

Lors de l'exécution de ce morceau de code, je reçois l'erreur: 'ESAPI' est pas défini (ce qui se passe sur l'instruction var isValidURL).

Qu'est-ce qui me manque?

Répondre

1

Je ne vois pas où vous avez importé esapi dans le jsp.

Essayez ceci:

<%@ page language="java" %> 
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> 
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> 
<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> 
<%@ page import="java.net.*, org.owasp.esapi.ESAPI, org.owasp.esapi.Validator" %> 


<script type="text/javascript" language="javascript"> 

function validateForm() 
{ 

    var userURL = "http://www.google.com"; 
    var isValidURL = <% ESAPI.validator().isValidInput("URLContext", userURL, "URL", 255, false); %> 
    if (isValidURL) { 
     alert("true"); 
    } else { 
    alert("false"); 
    } 
} 

</script> 

Notez également, je suggère fortement de faire la validation dans le contrôleur de réception et non dans le jsp ... les frais généraux pour la compilation JSP est assassiner sans ajouter les frais généraux de l'analyse syntaxique contribution. L'autre avertissement que je vais vous donner est que si vous notez la documentation d'esapi, l'appel isValidInput() ignore la canonisation qui est absolument critique. Vous devrez utiliser getValidInput() à la place. Si vous pensez que vous devez utiliser isValidInput(), vous devez vous assurer de passer un appel manuel au canonicalize(), qui est une méthode de la classe Encoder. , S'il vous plaît noter que cette ligne:

var isValidURL = ESAPI.validator().isValidInput("URLContext", userURL, "URL", 255, false); 

fait une erreur critique dans ce ESAPI n'est pas une bibliothèque JavaScript. Cet appel devrait ressembler à ceci:

var isValidURL = <% ESAPI.validator().isValidInput("URLContext", userURL, "URL", 255, false); %> 

Et en général, comme indiqué ci-dessus, vous voulez faire cette validation sur le contrôleur qui utilisera cette jsp en entrée, non pas sur le jsp lui-même. (Les scriptlets sont lents et doivent être évités.)

+0

J'ai ajouté la déclaration d'importation - merci - mais j'obtiens toujours la même erreur. Parce que les instructions d'installation ne sont pas claires (à propos de JRE pour assigner les arguments VM, dont j'ai arbitrairement à WebSphere Application Server v7.0 JRE), j'ai également essayé de définir l'argument VM générique dans Admin Console> Serveurs d'applications> (mon serveur)> Java et la gestion des processus> Définition de processus> Java Virtual Machine. Cela aussi n'a fait aucune différence. J'ai essayé d'ajouter systemproperties dans le fichier server.xml pour pointer sur les deux fichiers .properties - ne fonctionnant toujours pas. Des idées? – Mark

+0

Obtenez-vous une trace de pile ou une erreur de navigateur? Si c'est une trace de pile, ajoutez-la à la question. Si c'est à partir du navigateur, modifiez votre affectation à 'isValidURL' – avgvstvs

+0

avgvstvs - vos corrections ont répondu à mon problème signalé - merci. Maintenant j'ai un nouveau problème. ESAPI.properties est trouvé, mais je reçois l'exception "Uncaught" créée dans l'une des méthodes de service du servlet/WEB-INF/tiles-components/frm/main.jsp dans l'application (myapp) EAR. Exception créée: com.ibm.websphere.servlet.error.ServletErrorReport: java.lang.NoClassDefFoundError: org.apache.commons.fileupload.ProgressListener "J'ai téléchargé et ajouté org.apache.commons.fileupload.jar aux dépendances de mon EAR – Mark

Questions connexes