Empfohlene Methoden für Sicherheitsberechtigungen der JavaMail-API

Die JavaMail-API muss bei vielen ihrer Aktivitäten auf bestimmte Konfigurationsdateien zugreifen. Der JavaMail Und JavaBeans Die Binärpakete des Activation Frameworks selbst enthalten bereits die erforderlichen Konfigurationsdateien. Die API JavaMail ermöglicht dem Benutzer, benutzerspezifische und installationsspezifische Konfigurationsdateien zu definieren, um besondere Voraussetzungen zu erfüllen.

Die beiden Positionen, an die Sie diese Konfigurationsdateien kopieren können, sind die Verzeichnisse <user.home> und <java.home>/lib. Wenn die JavaMail-API beispielsweise auf eine Datei mit dem Namen "mailcap" zugreifen muss, wenn sie eine Nachricht sendet, ist der Ablauf wie folgt:
  1. Die API versucht, auf <user.home>/mailcap zuzugreifen.
  2. Schlägt der erste Versuch fehl, weil die Sicherheitsberechtigung nicht ausreicht oder die Datei nicht vorhanden ist, setzt die API die Suche im Verzeichnis <java.home>/lib/mailcap fort.
  3. Falls auch der zweite Versuch scheitert, sucht die API an der Position META-INF/mailcap im Klassenpfad. Diese Position führt zu den Konfigurationsdateien, die in den Dateien "mail-impl.jar" und "activation-impl.jar" enthalten sind.
WebSphere Application Server verwendet die Konfigurationsdateien der JavaMail API, die in den Dateien "mail-impl.jar" und "activation-impl.jar" enthalten sind, und es sind keine Mailkonfigurationsdateien in den Verzeichnissen <user.home> und <java.home>/lib enthalten. Um die ordnungsgemäße Funktionsweise der JavaMail API zu gewährleisten, erteilt WebSphere Application Server allen installierten Anwendungen die Leseberechtigung für die Dateien "mail-impl.jar" und "activation-impl.jar".
Der JavaMail-Code versucht, auf die Konfigurationsdateien in <user.home> und <java.home>/lib zuzugreifen, was zum Auslösen einer Ausnahme in der Zugriffssteuerung führen kann, da in der Standardkonfiguration standardmäßig keine Dateileseberechtigung für diese beiden Positionen erteilt wird. Diese Aktivität beeinträchtigt nicht die Funktion der JavaMail API, führt jedoch möglicherweise dazu, dass eine große Menge an mailbezogenen Sicherheitsausnahmen im Systemprotokoll aufgezeichnet werden. Dadurch können schwer wiegende Fehler, nach denen Sie suchen, verdeckt werden. Im Folgenden sehen Sie ein Beispiel für die Sicherheitsnachricht SECJ0314W:
[02/31/08 12:55:38:188 PDT] 00000058 SecurityManag W   SECJ0314W: Current Java 2 Security policy reported a 
potential violation of Java 2 Security Permission. 
Please refer to Problem Determination Guide for further information.

Permission:

      D:\o063919\java\jre\lib\javamail.providers : access denied (java.io.FilePermission 
D:\o063919\java\jre\lib\javamail.providers read)


Code:

     com.ibm.ws.mail.SessionFactory  in  {file:/D:/o063919/lib/runtime.jar}



Stack Trace:

java.security.AccessControlException: access denied (java.io.FilePermission D:\o063919\java\jre\lib\javamail.providers read)
	at java.security.AccessControlContext.checkPermission(AccessControlContext.java(Compiled Code))
	at java.security.AccessController.checkPermission(AccessController.java(Compiled Code))
	at java.lang.SecurityManager.checkPermission(SecurityManager.java(Compiled Code))
	at com.ibm.ws.security.core.SecurityManager.checkPermission(SecurityManager.java(Compiled Code))
	at java.lang.SecurityManager.checkRead(SecurityManager.java(Compiled Code))
	at java.io.FileInputStream.<init>(FileInputStream.java(Compiled Code))
	at java.io.FileInputStream.<init>(FileInputStream.java:89)
	at javax.mail.Session.loadFile(Session.java:1004)
	at javax.mail.Session.loadProviders(Session.java:861)
	at javax.mail.Session.<init>(Session.java:191)
	at javax.mail.Session.getInstance(Session.java:213)
	at com.ibm.ws.mail.SessionFactory.getObjectInstance(SessionFactory.java:67)
	at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:314)
	at com.ibm.ws.naming.util.Helpers.processSerializedObjectForLookupExt(Helpers.java:894)
	at com.ibm.ws.naming.util.Helpers.processSerializedObjectForLookup(Helpers.java:701)
	at com.ibm.ws.naming.jndicos.CNContextImpl.processResolveResults(CNContextImpl.java:1937)
	at com.ibm.ws.naming.jndicos.CNContextImpl.doLookup(CNContextImpl.java:1792)
	at com.ibm.ws.naming.jndicos.CNContextImpl.doLookup(CNContextImpl.java:1707)
	at com.ibm.ws.naming.jndicos.CNContextImpl.lookupExt(CNContextImpl.java:1412)
	at com.ibm.ws.naming.jndicos.CNContextImpl.lookup(CNContextImpl.java:1290)
	at com.ibm.ws.naming.util.WsnInitCtx.lookup(WsnInitCtx.java:145)
	at javax.naming.InitialContext.lookup(InitialContext.java:361)
	at emailservice.com.onlinebank.bpel.EmailService20060907T224337EntityAbstractBase$JSE_6.
execute(EmailService20060907T224337EntityAbstractBase.java:32)
	at com.ibm.bpe.framework.ProcessBase6.executeJavaSnippet(ProcessBase6.java:256)
	at emailservice.com.onlinebank.bpel.EmailService20060907T224337EntityBase.invokeSnippet
(EmailService20060907T224337EntityBase.java:40)
Notiz: Wenn diese Situation ein Problem darstellt, erwägen Sie, weitere Lesezugriffsberechtigungen für weitere Standorte hinzuzufügen. Auf diese Weise werden die meisten, vielleicht sogar alle nicht schwer wiegenden Sicherheitsausnahmebedingungen von JavaMail aus der Protokolldatei entfernt.
Die folgenden Berechtigungen sind für JavaMail erforderlich:
grant codeBase "file:${application}" {
  // Allow access to default configuration files
  permission java.io.FilePermission "${java.home}${/}jre${/}lib${/}javamail.address.map", "read";
  permission java.io.FilePermission "${java.home}${/}jre${/}lib${/}javamail.providers", "read";
  permission java.io.FilePermission "${java.home}${/}jre${/}lib${/}mailcap", "read";
  permission java.io.FilePermission "${java.home}${/}lib${/}javamail.address.map", "read";
  permission java.io.FilePermission "${java.home}${/}lib${/}javamail.providers", "read";
  permission java.io.FilePermission "${java.home}${/}lib${/}mailcap", "read";
  permission java.io.FilePermission "${user.home}${/}.mailcap", "read";
  permission java.io.FilePermission "${was.install.root}${/}lib${/}activation-impl.jar", "read";
  permission java.io.FilePermission "${was.install.root}${/}lib${/}mail-impl.jar", "read";
  permission java.io.FilePermission "${was.install.root}${/}plugins${/}com.ibm.ws.prereq.javamail.jar", "read";
  // If using an isolated mail provider, 
  // add additional file read permissions for each jar defined
  // for the isolated mail provider
  // permission java.io.FilePermission "path${/}mail.jar, "read";
  
  // Allow connection to mail server using SMTP
  permission java.net.SocketPermission "*:25", "connect,resolve";
  // Allow connection to mail server using SMTPS
  permission java.net.SocketPermission "*:465", "connect,resolve";
  
  // Allow connection to mail server using IMAP
  permission java.net.SocketPermission "*:143", "connect,resolve";
  // Allow connection to mail server using IMAPS
  permission java.net.SocketPermission "*:993", "connect,resolve";
  
  // Allow connection to mail server using POP3
  permission java.net.SocketPermission "*:110", "connect,resolve";
  // Allow connection to mail server using POP3S
  permission java.net.SocketPermission "*:995", "connect,resolve";
  
  // Allow System.getProperties() to be used
  // permission java.util.PropertyPermission "*", "read,write";
  // Otherwise use the following to allow system properties to be read
  permission java.util.PropertyPermission "*", "read";
};