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:
- Die API versucht, auf <user.home>/mailcap zuzugreifen.
- 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.
- 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.
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";
};