Boas Práticas Permissões de Segurança da API JavaMail

Em muitas de suas atividades, a API JavaMail necessita acessar certos arquivos de configuração. Os próprios pacotes binários JavaMail e JavaBeans Activation Framework já contêm os arquivos de configuração necessários. No entanto, a API do JavaMail permite que o usuário defina arquivos de configuração específicos do usuário e específicos da instalação para atender a requisitos especiais.

Os dois locais onde você deve colocar esses arquivos de configuração são os diretórios <user.home> e <java.home>/lib. Por exemplo, se a API JavaMail precisar acessar um arquivo denominado mailcap ao enviar uma mensagem, ela:
  1. Tentará acessar <user.home>/mailcap.
  2. Se a primeira tentativa falhar devido a falta de permissão de segurança ou a um arquivo não existente, a API procurará em <java.home>/lib/mailcap.
  3. Se a segunda tentativa também falhar, a API procurará no local META-INF/mailcap no caminho da classe. Na realidade, esse local conduz aos arquivos de configuração contidos nos arquivos mail-impl.jar e activation-impl.jar.
O Servidor de Aplicativos usa os arquivos de configuração JavaMail API que estão contidos nos arquivos mail-impl.jar e activation-impl.jar e não há nenhum arquivo de configuração de correio nos diretórios <user.home> e <java.home>/lib. Para garantir um funcionamento correto da API JavaMail, o Servidor de Aplicativos concede a permissãoleitura de arquivo de ambos arquivos mail-impl.jar e activation-impl.jar a todos os aplicativos instalados.
O código JavaMail tenta acessar os arquivos de configuração em <user.home> e <java.home>/lib, que pode causar a emissão de um controle de acesso, já que, por padrão, a configuração padrão não concede permissão de leitura do arquivo para esses dois locais. Essa atividade não afeta o funcionamento correto da API de JavaMail, mas você pode ver uma grande quantidade de exceções de segurança relacionadas ao correio relatadas no log do sistema, o que pode dificultar a localização de erros prejudiciais que você esteja procurando. Este é um exemplo da mensagem de segurança, SECJ0314W:
[02/31/08 12:55:38:188 PDT] 00000058 SecurityManag W   SECJ0314W: Current Java 2 Security policy reported a 
violação potencial da Permissão de Segurança Java 2. 
Consulte o Guia de Determinação de Problemas para obter informações adicionais.

Permissão:

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


Código:

     com.ibm.ws.mail.SessionFactory em {arquivo:/D:/o063919/lib/runtime.jar}



Rastreio de Pilha:

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)
Nota: Se essa situação for um problema, considere adicionar mais permissão de acesso de leitura para mais locais. Isto deve eliminar a maioria das exceções de segurança inofensivas relacionadas a JavaMail, se não todas, do arquivo de log.
As permissões requeridas por JavaMail são as seguintes:
grant codeBase "file:${application}" {
  // Permitir acesso aos arquivos de configuração padrão
  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";
  // Se utilizando um provedor de correio isolado, 
  // incluir permissões de leitura de arquivo adicional para cada jar definido
  // para o provedor de correio isolado
  // permission java.io.FilePermission "path${/}mail.jar, "read";
  
  // Permitir conexão com servidor de correio utilizando SMTP
  permission java.net.SocketPermission "*:25", "connect,resolve";
  // Permitir conexão com servidor de correio utilizando SMTPS
  permission java.net.SocketPermission "*:465", "connect,resolve";
  
  // Permitir conexão com servidor de correio utilizando IMAP
  permission java.net.SocketPermission "*:143", "connect,resolve";
  // Permitir conexão com servidor de correio utilizando IMAPS
  permission java.net.SocketPermission "*:993", "connect,resolve";
  
  // Permitir conexão com servidor de correio utilizando POP3
  permission java.net.SocketPermission "*:110", "connect,resolve";
  // Permitir conexão com servidor de correio utilizando POP3S
  permission java.net.SocketPermission "*:995", "connect,resolve";
  
  // Permitir que System.getProperties() seja utilizado
  // permission java.util.PropertyPermission "*", "read,write";
  // Caso contrário, usar o seguinte para permitir leitura de propriedades de sistema
  permission java.util.PropertyPermission "*", "read";
};

Ícone que indica o tipo de tópico Tópico de Referência



Ícone de registro de data e hora Última atualização: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=rmai_security
Nome do arquivo: rmai_security.html