JBoss AS 6

Linux e JBoss: Seja Cuidadoso!

Postado em

E ai Galera blz?

Esse post é mais uma dica do que um tutorial.

Em hipótese alguma inicie o JBoss utilizando o usuário root, pois a plataforma Java oferece APIs para execução de códigos nativos do sistema operacional e mecanismos de gerenciamento remoto. No Linux crie um usuário com privilégios adequados para iniciar o serviço do JBoss.

Se quiser ver com isso tudo pode prejudicar o seu ambiente. Pegue a aplicação filebrowser e faça um deploy no JBoss.

Primeiro execute o JBoss utilizando um usuário com privilégios reduzidos e brinque com algumas funcionalidade da aplicação filebrowser.

Agora execute o JBoss com o usuário root e teste novamente o filebrowser. Perceba que com uma aplicação web escrita em Java você pode ser capaz de invadir até uma rede ser as permissões estiverem no nível de root.

Abraços

App: http://www.vonloesch.de/filebrowser.html

 

Configurando um serviço de pooling no JBoss 6

Postado em

Olá caros leitores meu nome é Victor Neves, final de 2012 recebi o convite do grande Maurício Magnani para escrever sobre algum assunto para seu blog. Fiquei meio perdido por não saber o que escrever pois sou desenvolvedor e não trabalho profundamente com JBoss, tudo o que sei é o necessário para botar um projeto WEB no ar e uma coisinha ou outra que a maioria dos outros desenvolvedores não sabem (por causa do tempo que já trabalho com JBoss e por causa da minha séria patologia que é curiosidade)… pelo menos aqui na empresa que trabalho. Sou desenvolvedor java a quase 4 anos, e sempre gostei de utilizar algumas soluções Red Hat como JBoss e Hibernate, menos Linux, por enquanto continuo sendo adepto do Debian em casa e no trabalho hehe

Procurando o que escrever percebi que o Maurício não havia postado nada ainda sobre criação de services no JBoss, então aí vai!

Vamos criar um JBoss MBean service que irá prover um pool de conexão usando o C3P0.

O JBoss oferece a opção de poder criar componentes, serviços, que possam a vir prover algum tipo de serviço. Existem dois tipos de Mbean service: os que dependem de um outro serviço do JBoss e os que não dependem de outro serviço do JBoss.

No exemplo que vamos trabalhar esse serviço é escrito em XML.

Dentro do XML começaremos inserindo


<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE server>

<server>

<mbean code="com.mchange.v2.c3p0.jboss.C3P0PooledDataSource" name="jboss:service=C3P0PooledDataSource">

Onde em code nós definiremos a classe que será usada para o serviço, no caso, iremos implementar a classe C3P0PooledDataSource.

Feito isso, nós devemos agora definir algumas configurações sobre o banco de dados e o datasource configurado. Então colocamos :


<attribute name="JndiName">java:pg_aeroportoDS</attribute>

<attribute name="JdbcUrl">jdbc:postgresql://10.1.1.16:5432/aeroporto</attribute>

<attribute name="DriverClass">org.postgresql.Driver</attribute>

<attribute name="User">aeroporto</attribute>

<attribute name="Password">plutonio</attribute>

Agora vamos analisar, em JndiName colocamos o nome do datasource que será vinculado esse serviço de pooling, aqui estamos trabalhando como se houvesse um datasource chamado pg_aeroporto-ds.xml em nosso diretório deploy , depois configuramos a conexão ao banco, o driver utilizado, usuário e senha.

Obs.: as configurações aqui devem coincidir com as configurações no datasource.

Feito isso, vamos configurar os detalhes básicos de nosso pooling:


<attribute name="AcquireIncrement">5</attribute>

<attribute name="CheckoutTimeout">60</attribute>

<attribute name="IdleConnectionTestPeriod">300</attribute>

<attribute name="MaxPoolSize">40</attribute>

<attribute name="MinPoolSize">5</attribute>

Vejamos, AcquireIncrement determina quantas conexões o C3P0 tentará adquirir quando não houver mais conexões disponíveis, seu valor default é 3 (porém, nunca irá ultrapassar o número máximo de conexões permitidas). CheckoutTimeout determina quanto tempo em millisegundos um cliente irá esperar pela aquisição de ima conexão, seu valor default é 0. IdleConnectionTestPeriod determina um período em segundos que o C3P0 testará se uma conexão está ativa ou inativa, seu valor default é 0, ou seja, nunca testará. MaxPoolSize determina o número máximo de conexões que o pool irá manter por um determinado tempo, sem valor default é 15. MinPoolSize define o número mínimo de conexões que o pool irá manter, seu valor default é 3.

Mas vocês estão lembrados de que eu disse que existem dois tipos de MBean services? Pois é, esse serviço de pooling depende do serviço de JNDI. Então devemos colocar no final de nosso arquivo:

<depends>jboss:service=Naming</depends>

Notemos, que esses atributos acima são métodos da classe C3P0PooledDataSource, assim como esses, existem outros métodos nessa classe! 😉

É como se o JBoss instanciasse essa classe por conta própria, populasse esse objeto com os valores que definimos no XML e deixasse esse objeto disponível para uso.

O serviço deve ser salvo com o final -service.xml, então o nome poderia ser c3p0-service.xml e deverá ser salvo no diretório deploy da instância que você está usando.

Nosso serviço de pooling ficaria assim :

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE server>

<server>

<mbean code="com.mchange.v2.c3p0.jboss.C3P0PooledDataSource"
name="jboss:service=C3P0PooledDataSource">
<attribute name="JndiName">java:pg_aeroportoDS</attribute>

<attribute name="JdbcUrl">jdbc:postgresql://10.1.1.16:5432/aeroporto</attribute>

<attribute name="DriverClass">org.postgresql.Driver</attribute>

<attribute name="User">aeroporto</attribute>
<attribute name="Password">plutonio</attribute>
<attribute name="AcquireIncrement">5</attribute>

<attribute name="CheckoutTimeout">60</attribute>

<attribute name="IdleConnectionTestPeriod">300</attribute>

<attribute name="MaxPoolSize">40</attribute>
<attribute name="MinPoolSize">5</attribute>
<depends>jboss:service=Naming</depends>
</mbean>
</server>

Espero que tenham gostado. Abraços Fraternos.

Para saber mais :

http://www.mchange.com/projects/c3p0/

http://access.redhat.com/knowledge/docs/en-US/JBoss_Enterprise_Application_Platform/4.2/html/Server_Configuration_Guide/Using_JMX_as_a_Microkernel-JBoss_MBean_Services.html

JBoss in action – Jamae, Javid & Johnson, Peter. Ed Manning 2009

Configurando o Módulo do Spring Framework no JBoss AS 7.1.2(JBoss EAP 6)

Postado em Atualizado em

Olá amigos,

Atualmente estou trabalhando com Spring Framework 3 em um projeto bem legal.  Por motivos arquiteturiais resolvemos utilizar o Spring ao invés do JavaEE 6. Sendo assim a nossa aplicação possui todas as bibliotecas no diretório WEB-INF/lib  gerando um .war gigante prejudicando o deploy,  pois nós utilizamos o Jenkins para integração contínua, então ao gerarmos o building do projeto o .war é deployado no JBoss AS 7 automaticamente. Conversando o time chegamos a conclusão de que a melhor maneira de resolver isso é a criação de um módulo do Spring no JBoss com todas as bibliotecas que estamos utilizando.

O primeiro passo é baixar a versão do Spring utilizada, que no nosso caso é a 3.1.

Eu baixei o último release: spring-framework-3.1.2.RELEASE.zip

Devemos criar a estrutura de diretórios no JBoss que armazenará as libs do Spring.  A seguinte estrutura deve ser criada:

JBOSS_HOME\modules\org\springframework\spring\main

Copie todas as bibliotecas do Spring que serão utilizadas para esse diretório.

Agora no mesmo diretório JBOSS_HOME\modules\org\springframework\spring\main crie o arquivo  module.xml e e insira as bibliotecas e suas dependências como abaixo:

<?xml version="1.0" encoding="UTF-8"?>

<module xmlns="urn:jboss:module:1.1" name="org.springframework.spring">
 <resources>
   <resource-root path="org.springframework.aop-3.1.2.RELEASE.jar"/>
   <resource-root path="org.springframework.asm-3.1.2.RELEASE.jar"/>
   <resource-root path="org.springframework.aspects-3.1.2.RELEASE.jar"/>
   <resource-root path="org.springframework.beans-3.1.2.RELEASE.jar"/>
   <resource-root path="org.springframework.context.support-3.1.2.RELEASE.jar"/>
   <resource-root path="org.springframework.context-3.1.2.RELEASE.jar"/>
   <resource-root path="org.springframework.core-3.1.2.RELEASE.jar"/>
   <resource-root path="org.springframework.expression-3.1.2.RELEASE.jar"/>
   <resource-root path="org.springframework.instrument.tomcat-3.1.2.RELEASE.jar"/>
   <resource-root path="org.springframework.instrument-3.1.2.RELEASE.jar"/>
   <resource-root path="org.springframework.jdbc-3.1.2.RELEASE.jar"/>
   <resource-root path="org.springframework.jms-3.1.2.RELEASE.jar"/>
   <resource-root path="org.springframework.orm-3.1.2.RELEASE.jar"/>
   <resource-root path="org.springframework.oxm-3.1.2.RELEASE.jar"/>
   <resource-root path="org.springframework.test-3.1.2.RELEASE.jar"/>
   <resource-root path="org.springframework.transaction-3.1.2.RELEASE.jar"/>
   <resource-root path="org.springframework.web.portlet-3.1.2.RELEASE.jar"/>
   <resource-root path="org.springframework.web.servlet-3.1.2.RELEASE.jar"/>
   <resource-root path="org.springframework.web.struts-3.1.2.RELEASE.jar"/>
   <resource-root path="org.springframework.web-3.1.2.RELEASE.jar"/>

   <!-- Insert resources here -->
 </resources>

 <dependencies>
   <module name="javax.api"/>
   <module name="javax.jms.api"/>
   <module name="javax.annotation.api"/>
   <module name="javax.servlet.api"/>
   <module name="org.apache.commons.logging"/>
   <module name="org.jboss.vfs"/>
 </dependencies>
</module>

No WEB-INF da aplicação crie o arquivo jboss-deployment-structure.xml e declare a dependência do módulo do Spring.

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
  <deployment>
    <dependencies>
      <module name="org.springframework.spring" />
    </dependencies>
  </deployment>
</jboss-deployment-structure>

Realize o deploy da aplicação e verifique se tudo está funcionando corretamente.

Espero que tenha ajudado.

Abraços

Introdução ao PicketLink

Postado em

Sei que já dei uma “introdução” ao PicketLink, mas dessa vez vou fazer um post mais detalhando,  portanto vamos lá :

PicketLink é uma solução de IDM que está sendo construida para antender a plataform JBoss. Identity Management (IDM) descreve o gerenciamento de identidades individuais, sua autenticação, autorização e privilégios/permissões dentro de um contexto de segurança.

Exemplos de IDMs concorrentes do PicketLink:

http://www-01.ibm.com/software/tivoli/products/identity-mgr/
http://www.oracle.com/technetwork/middleware/id-mgmt/overview/index.htm

Uma das perguntas mais frequentes e que até eu mesmo me fazia antes de conheçer o PicketLink mais a fundo é: Qual é a referência entre o PicketLink e o PicketBox?

Picketbox (implementa o JAAS) é API que sustenta quaquer implementação de segurança dentro do JBoss Application Server (JBoss AS). O PicketLink está em cima dessa camada e visa fornecer diversas soluções para gerenciamento de identidade.

O PicketLink agrupa vários projetos por exemplo:

  • IDM: Provide an object model for managing Identities (Users/Groups/Roles) and associated behavior using different identity store backends like LDAP and RDBMS.
  • Federated Identity:  Support SAMLv2, WS-Trust and OpenID.
  • AuthZ: Developer friendly authorization framework
  • XACML:  Oasis XACMLv2 implementation.
  • Negotiation: Provide SPNego/Kerberos based Desktop SSO.

Mais informações podem ser encontradas na página do projeto: http://www.jboss.org/picketlink .

PicketLink Federation (PicketLink Federated Identity)

O projeto PicketLink Federation fornece suporte para Federated Identity e Single Sign On.

É oferecido suporte para as seguintes especificações:

Oasis SAML v2.0
Oasis SAML v1.1
Oasis WS-Trust v1.3
OpenID

Planeja-se suporte para:

OAuth

Para utilizarmos o PicketLink Federation devemos entender alguns conceitos de SAML v2.0.

O que é o SAML?

È um padrão para troca de informações de autorização de usuário pela web de uma forma interoperável(xml). O objetivo é que o usuário se autentique em algum lugar e receba um token (identidade), e com esse token ele consiga acessar qualquer recurso que esteja dentro do contexto de segurança onde o token foi emitido.

Nesse contexto podemos destacar as duas entidades: Identity Provider(IDP) e Service Provider(SP).

A especificação SAML possui uma série de profiles, que funcionam como se fossem casos de uso. Por exemplo um dos profiles que vamos abordar nesse post será o Web Browser SSO Profile, que define um caso de uso para SSO utilizando o browser. Para mais informações sobre os profiles do SAML veja o link abaixo:

http://docs.oasis-open.org/security/saml/v2.0/saml-profiles-2.0-os.pdf

O próximo conceito a ser entendido é o SAML protocol binding, que são mapeamentos (canais) padrões para trocas de mensagens SAML entre o IDP e o SP.
Por exemplo no profile(caso de uso) Web Browser SSO é utilizado o HTTP Binding, então toda a troca de informações entre IDP e SP será realizada utilizando HTTP Binding. Existem também outros bindings como SAML SOAP Binding ou Reverse SOAP (PAOS) Binding. Para mais informações sobre o SAML protocol binding veja o link abaixo:

http://docs.oasis-open.org/security/saml/v2.0/saml-bindings-2.0-os.pdf

Finalmente chegamos ás assertions que são as informações de autenticação e alguns atributos do contexto de segurança.

http://docs.oasis-open.org/security/saml/v2.0/saml-core-2.0-os.pdf
http://saml.xml.org/assertions

A parte sobre Authentication Context e Metadata ainda não está totalmente implementada.

 

Ps: Eu vou continuar editando esse post e colocando mais informações (ultimo update  30/06/12)

Encrypt Keystore Password no JBoss AS 6.1 / 5.1

Postado em Atualizado em

Olá a todos 😀

Hoje vamos aprender como encriptar a senha do keystore/certificado que fica configurado no connector HTTPs no server.xml do JBoss. Em configurações normais quando habilitamos o HTTPs configuramos a caminho e password dos certificados em texto puro no connector mas essa não é um boa pŕatica, veja abaixo:

<Connector protocol="HTTP/1.1" SSLEnabled="true"
    port="${jboss.web.https.port}" address="${jboss.bind.address}"
    scheme="https" secure="true" clientAuth="false"
    keystoreFile="${jboss.server.home.dir}/conf/example.keystore"
    keystorePass="changeit" sslProtocol = "TLS" />

Se você quiser encriptar a senha da keystore então a sintaxe acima não é necessária. A sintaxe correta seria:

<Connector port="${jboss.web.https.port}" address="${jboss.bind.address}"
   maxThreads="100" minSpareThreads="5" maxSpareThreads="15"
   scheme="https" secure="true" clientAuth="false"
   sslProtocol="TLS"
   securityDomain="java:/jaas/encrypt-keystore-password"
   SSLImplementation="org.jboss.net.ssl.JBossImplementation" >
</Connector>

O próximo passo é configurar MBean JaasSecurityDomain. Você precisa criar o arquivo JBOSS_HOME/server//deploy/security-service.xml e adicionar o conteúdo abaixo:

<server>
   <mbean code="org.jboss.security.plugins.JaasSecurityDomain"
      name="jboss.security:service=PBESecurityDomain">
      <constructor>
         <arg type="java.lang.String" value="encrypt-keystore-password"></arg>
      </constructor>
      <attribute name="KeyStoreURL">resource:example.keystore</attribute>
      <attribute name="KeyStorePass">{CLASS}org.jboss.security.plugins.FilePassword:${jboss.server.home.dir}/conf/keystore.password</attribute>
      <attribute name="Salt">mysaltmagnani</attribute>
      <attribute name="IterationCount">13</attribute>
      <!--
        <attribute name="KeyStoreType">pkcs12</attribute>
       -->
   </mbean>
</server>

Você pode alterar o valor de salt e iterationCount conforme a sua necessidade.

O próximo passo é criar o arquivo de senha. Execute o seguinte comando:

[mmagnani@dhcp-32 conf]$ pwd
/home/mmagnani/WorkSpace/jboss-org/jboss-6.1.0.Final/server/blog/conf
[mmagnani@dhcp-32 conf]$ java -cp ../../../lib/jbosssx.jar org.jboss.security.plugins.FilePassword mysaltmagnani 13 password keystore.password

O arquivo keystore.password foi criado.

Agora para finalizar temos que dizer ao container web para iniciar serviço PBESecurityDomain(security-service.xml) que havíamos criado.

Edite o arquivo JBOSS_HOME/server//deploy/jbossweb.sar/META-INF/jboss-beans.xml e adicione PBESecurityDomain abaixo:

<?xml version="1.0" encoding="UTF-8"?>
<deployment xmlns="urn:jboss:bean-deployer:2.0">

   <bean name="WebServer"
         class="org.jboss.web.tomcat.service.deployers.TomcatService">

     ....

       <depends>jboss.security:service=PBESecurityDomain</depends>

     ....

  </bean>
</deployment>

Inicie o JBoss e verifique se o HTTPs está funcionando corretamente. Para gerar o certificado eu utilizei o comando abaixo:

keytool -genkeypair -keystore example.keystore -storepass password -keypass password -keyalg RSA -validity 180 -alias example -dname "cn=Mauricio Magnani,o=Home,c=BR"

Espero que tenha ajudado, Abraços.

Ciphers no JBoss AS 6.1

Postado em Atualizado em

Em criptografia, um cipher (ou cifra) é um algoritmo para realizar a criptografia ou descriptografia. No JBoss podemos definir quais cifras desejamos utilizar, e por segurança podemos excluir as cifras mais fracas, lembrando que o JBoss não implementa SSL, simplesmente usa a implementação de SSL que é fornecida pela JVM ou OpenSSL(quando o conector de APR é utilizado). Se você estiver usando connector HTTP, então o SSL é implementado através do Java Secure Socket Extension (JSSE).  Para listar as cifras diponíveis na JVM, compile e execute a classe abaixo:


import javax.net.ssl.SSLSocketFactory;

public class DummySSLSocketFactory
 {

   public static void main(String[] args)
   {
      SSLSocketFactory factory = (SSLSocketFactory) SSLSocketFactory.getDefault();
      String[] ciphers = factory.getDefaultCipherSuites();
      for (int i = 0; i < ciphers.length; i++)
      {
        System.out.println(ciphers[i]);
      }
    }
 }

 $ javac DummySSLSocketFactory.java
 $ java DummySSLSocketFactory

 SSL_RSA_WITH_RC4_128_MD5
 SSL_RSA_WITH_RC4_128_SHA
 TLS_RSA_WITH_AES_128_CBC_SHA
 TLS_DHE_RSA_WITH_AES_128_CBC_SHA
 TLS_DHE_DSS_WITH_AES_128_CBC_SHA
 SSL_RSA_WITH_3DES_EDE_CBC_SHA
 SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA
 SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA
 SSL_RSA_WITH_DES_CBC_SHA
 SSL_DHE_RSA_WITH_DES_CBC_SHA
 SSL_DHE_DSS_WITH_DES_CBC_SHA
 SSL_RSA_EXPORT_WITH_RC4_40_MD5
 SSL_RSA_EXPORT_WITH_DES40_CBC_SHA
 SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA
 SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA
 TLS_EMPTY_RENEGOTIATION_INFO_SCSV

Para determinar quais cifras serão utilizadas, basta especificar essa informação no atributo “ciphers” do connector HTTP no arquivo JBOSS_HOME/server/all/deploy/jbossweb.sar/server.xml.


<Connector protocol="HTTP/1.1" SSLEnabled="true"
 port="8443" address="${jboss.bind.address}"
 scheme="https" secure="true" clientAuth="false"
 keystoreFile="${jboss.server.home.dir}/conf/example.keystore"
 keystorePass="123456"
 ciphers="SSL_RSA_WITH_RC4_128_MD5,SSL_RSA_WITH_RC4_128_SHA,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA,SSL_RSA_WITH_DES_CBC_SHA"
 sslProtocol = "TLS" />

Para testar o funcionamento do certificado e verificar as cifras habilitadas pode-se utilizar o openssl via linha de comando, já que o JBoss não ofereçe nenhuma ferramenta para essa finalidade. Veja os passos abaixo.

  keytool -genkey -alias example -keyalg RSA -keystore keystore.jks -keysize 2048

 


<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" scheme="https"
 secure="true" address="${jboss.bind.address}" clientAuth="false"
 ciphers="SSL_RSA_WITH_RC4_128_MD5,SSL_RSA_WITH_RC4_128_SHA,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA,SSL_RSA_WITH_DES_CBC_SHA"
 keystoreFile="${jboss.server.home.dir}/conf/keystore.jks"
 keystorePass="123456" sslProtocol="TLS"/>

Para testar execute:

 openssl s_client -connect localhost:8443 -showcerts

Fonte:

UTF-8 e URIs no JBoss AS 6.1

Postado em Atualizado em

Como todos vocês devem saber o contêiner web default do JBoss é o Apache Tomcat. Por padrão o Tomcat não utiliza codificação UTF-8 na URI, isso significa que aplicações rodando sob o JBoss que realizam solicitações GET e contém caracteres UTF-8 codificados (caracteres japoneses por exemplo) não serão decodificadas com precisão pelo servidor.

Para corrigir esse problema edite o arquivo:

jboss-6.1.0.Final\server\<profile>\deploy\jbossweb.sar\server.xml

Adicione o atributo URIEncoding=”UTF-8″ no connector desejado. Veja abaixo um exemplo para os connectors HTTP e AJP:


<Connector port="8080" address="${jboss.bind.address}"
  maxThreads="250" maxHttpHeaderSize="8192"
  emptySessionPath="true" protocol="HTTP/1.1"
  enableLookups="false" redirectPort="8443" acceptCount="100"
  connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="UTF-8"/>

<Connector port="8009" address="${jboss.bind.address}" protocol="AJP/1.3"
  emptySessionPath="true" enableLookups="false" redirectPort="8443" URIEncoding="UTF-8"/>

Abraços

Como Utilizar o JBoss na porta 80

Postado em Atualizado em

Quando iniciei o meu aprendizado no JBoss tive muitas dúvidas e uma delas foi: Como posso rodar o JBoss na porta 80? Depois de algumas pesquisas observei que normalmente existem duas opções:

1 – Iniciar o JBoss como root

Isso não é recomendado em hipótese alguma.
Em sistemas operacionais Linux/Unix é necessário ser root para que as aplicações escutem em portas TCP / UDP abaixo de 1024.

2 – Utilizar o JBoss com o mod_jk, mod_proxy ou mod_cluster

Pode-se utilizar um proxy e redirecionar as requisições para JBoss. Essas soluções já foram abordadas em artigos anteriores.

Existem também alguns balanceadores como:

Na dúvida consulte uma pessoa experiente que possa indicar as melhores práticas.

Abraços

Blogs sobre JBoss em Português

Postado em Atualizado em

E ai galera blz? Eu sempre acompanho a comunidade JBoss em relação ao artigos, publicações, tutoriais, etc. Vou deixar abaixo a lista de alguns blogs de pessoas que estão fazendo ou fizeram um trabalho bem legal ajudando a comunidade:

Meus parabéns a todos acima. Com a ajuda de vocês a tecnologia JBoss cresce cada vez mais na nossa língua 🙂

Bom existem muitos brasileiros que contribuem com código, até alguns da lista acima mas tentei citar especificamente o pessoal que escreve artigos.

Acho legal também o trabalho do infoblogs que ajuda a divulgar as publicações e o blog da Caelum que sempre divulga as tecnologias JBoss.

Coloquei somente os que conheço… se esqueci de algum por favor me corrijam que eu adiciono nessa lista 🙂

Abraços e Obrigado a toda comunidade JBoss da língua Portuguesa.

Limitando o Número de Sessões no JBoss AS 6.1

Postado em Atualizado em

Existe uma maneira bem simples de limitar o número de sessões ( entenda-se usuários ) no JBoss. Para essa finalidade existe o atributo maxActiveSessions  que deve ser adicionado ao context.xml do jbossweb.sar. Siga os passos abaixo:

Edite o arquivo context.xml:

jboss-6.1.0.Final\server\default\deploy\jbossweb.sar\context.xml

Adicione o atributo maxActiveSessions:

<Context cookies="true" crossContext="true">

<Manager pathname="" />

<InstanceListener>org.jboss.web.tomcat.service.NamingListener</InstanceListener>

<Manager maxActiveSessions="2"/>

</Context>

Configuramos o JBoss para ter no máximos dois usuário conectados, quando o terceiro usuário se conectar a exceção “Exception initializing page context java.lang.IllegalStateException: createSession: Too many active sessions” será lançada  gerando o código HTTP 500.

Para realizar os testes tente realizar o login no jmx-console em três navegadores diferente.  Veja abaixo:

  • Google Chrome

  • Mozilla Firefox

  • Internet Explorer

Perceba que com o Google Chrome e Mozilla Firefox o JBoss já possui dois usuários conectados ao tentarmos acessar pelo Interner Explorer a página fica em branco pois o número máximo de sessões foi atingindo.

Caso seja necessário customizar a página de erro, os atributos abaixo devem ser adicionados no web.xml da aplicação desejada:

<error-page>
  <error-code>500</error-code>
  <location>error_500.jsp</location>
</error-page>

<error-page>
  <exception-type>java.lang.IllegalStateException</exception-type>
  <location>error_exception.jsp</location>
</error-page>

Veja abaixo a página customizada:

Espero que tenha ajudado.

Abraços