/**
  * Load the preferred JCE provider for ESAPI based on the <b>ESAPI.properties</b> property {@code
  * Encryptor.PreferredJCEProvider}. If this property is null (i.e., unset) or set to an empty
  * string, then no JCE provider is inserted at the "preferred" position and thus the Java VM
  * continues to use whatever the default it was using for this (generally specified in the file
  * {@code $JAVA_HOME/jre/security/java.security}).
  *
  * @return The actual preference position at which the provider was added, (which is expected to
  *     be 1) or -1 if the provider was not added because it is already installed at some other
  *     position. -1 is also returned if the {@code Encryptor.PreferredJCEProvider} was not set or
  *     set to an empty string, i.e., if the application <i>has</i> no preferred JCE provider.
  * @exception NoSuchProviderException - thrown if the provider class could not be loaded or added
  *     to the {@code SecurityManager} or any other reason for failure.
  * @see <a
  *     href="http://owasp-esapi-java.googlecode.com/svn/trunk/documentation/esapi4java-core-2.0-symmetric-crypto-user-guide.htm">
  *     ESAPI 2.0 Symmetric Encryption User Guide</a>
  */
 public static int loadESAPIPreferredJCEProvider() throws NoSuchProviderException {
   String prefJCEProvider = ESAPI.securityConfiguration().getPreferredJCEProvider();
   try {
     // If unset or set to empty string, then don't try to change it.
     if (prefJCEProvider == null || prefJCEProvider.trim().length() == 0) {
       // Always log, per NSA suggestion.
       logger.always(Logger.SECURITY_AUDIT, "No Encryptor.PreferredJCEProvider specified.");
       return -1; // Unchanged; it is, whatever it is.
     } else {
       return insertProviderAt(prefJCEProvider, 1);
     }
   } catch (NoSuchProviderException ex) {
     // Will already have logged with exception msg.
     String msg = "failed to load *preferred* " + "JCE crypto provider, " + prefJCEProvider;
     logger.always(Logger.SECURITY_AUDIT, msg); // Per NSA suggestion.
     logger.error(Logger.SECURITY_FAILURE, msg);
     throw ex;
   }
 }
 /**
  * Returns a <code>String</code> containing the real path for a given virtual path. For example,
  * the path "/index.html" returns the absolute file path on the server's filesystem would be
  * served by a request for "http://host/contextPath/index.html", where contextPath is the context
  * path of this ServletContext..
  *
  * <p>The real path returned will be in a form appropriate to the computer and operating system on
  * which the servlet container is running, including the proper path separators. This method
  * returns <code>null</code> if the servlet container cannot translate the virtual path to a real
  * path for any reason (such as when the content is being made available from a <code>.war</code>
  * archive).
  *
  * @param path a <code>String</code> specifying a virtual path
  * @return a <code>String</code> specifying the real path, or null if the translation cannot be
  *     performed
  */
 public String getRealPath(String path) {
   return ESAPI.securityConfiguration().getResourceFile(path).getAbsolutePath();
 }