OWASP AppSec Brasil

A segunda edição da versão brasileira principal conferência mundial de segurança de software vai acontecer em 2010. Será nos dias 16 a 19 de novembro em Campinas e terá como keynotes:

Para mais detalhes, veja o site da OWASP AppSec Brasil 2010.

110 dias para
AppSec Brasil 2010

Links

Outros sites de interesse:
   OWASP
   Build Security In

Acesse também:
    www.sapao.net

Termos de uso

O conteúdo deste site está sujeito à licença Creative Commons.

Creative Commons License

Atividade recente no site

Início‎ > ‎

Não comparar classes por nome

Em algumas situações pode ser necessário verificar se dois objetos são instâncias da mesma classe. Como a máquina virtual permite que classes diferentes tenham o mesmo nome (se estiverem em pacotes diferentes), a comparação não deve ser feita com base no nome das classes.

Caso a comparação deva ser feita com base no nome da classe (por exemplo, para verificar se o objeto é da classe Foo), deve-se proceder como o exemplo a seguir:

if(obj.getClass() == this.getClassLoader().loadClass("com.bar.Foo")){
  // a classe do objeto é "com.bar.Foo"
} else {
  // a classe do objeto não é a classe que
  // esta aplicação chama de "com.bar.Foo"
}

É importante notar que esta comparação funciona na maioria dos casos, já que a JVM normalmente usa o mesmo classloader para todas as classes de uma aplicação. No entanto, podem ocorrer problemas nos casos em que a classe seja:

  1. carregada como extensão do Java;
  2. carregada a partir de um serviço remoto.

Caso seja necessário verificar se dois objetos são instâncias da mesma classe, o código abaixo pode ser usado:

if(a.getClass() == b.getClass()){
  // objetos são da mesma classe
} else {
  // objetos são de classes diferentes
}