Single Sign On(SSO) no JBoss 7

O JBoss 7 apresenta um mecanismo que facilita o compartilhamento de sessão entre aplicações dentro do seu container,
apenas configurando o domínio de sso no servidor(standalone.xml) e configurando a válvula para SSO no projeto web(jboss-web.xml), o compartilhamento de sessão será feito automaticamente.

Configuração JBoss

standalone.xml

<subsystem xmlns="urn:jboss:domain:web:1.1" default-virtual-server="default-host" native="false">
    <connector name="http" protocol="HTTP/1.1" scheme="http" socket-binding="http"/>
    <virtual-server name="default-host" enable-welcome-root="false">
        <sso domain="127.0.0.1" reauthenticate="false"/>
    </virtual-server>
</subsystem>
  • Adicionar a configuração dentro do subsistema urn:jboss:domain:web:1.1;
  • Adicionar o domain : 127.0.0.1 no caso de utilização local ou o domínio mesmo ex: sso.emmanuelneri.com.br
Observação
Não utilizar o domínio localhost, utilizar o 127.0.0.1.

Configuração Aplicação

jboss-web.xml

<jboss-web>
    <security-domain>java:/jaas/portal</security-domain>
    <valve>
        <class-name>
            org.apache.catalina.authenticator.SingleSignOn
        </class-name>
        <class-name changeSessionIdOnAuthentication="true">
            org.apache.catalina.authenticator.FormAuthenticator
        </class-name>
    </valve>
</jboss-web>
  • Criar arquivo jboss-web caso não exista;
  • security-domain : Referenciar o realm do JBoss para realizar autenticação;
  • org.apache.catalina.authenticator.SingleSignOn : aciona a válvula de SSO;
  • Caso esteja utilizando FormAuthenticator do JAAS, adicionar org.apache.catalina.authenticator.FormAuthenticator;
Observação
Foi utilizado o JAAS com Form Authenticator para realizar a autenticação nas aplicações.

Utilização

Controller.java

FacesContext.getCurrentInstance().getExternalContext().getUserPrincipal().getName();

Feitos as configurações acima em qualquer aplicação o UserPrincipal estará preenchido com o login do usuário logado.

Controller.java

FacesContext.getCurrentInstance().getExternalContext().invalidateSession();

ou

HttpServletRequest req = (HttpServletRequest) request; 
HttpSession session = req.getSession();
session.invalidade();

Para invalidar a sessão apenas utilizar o método invalidateSession(), que automaticamente será invalidado as sessões em todas aplicações.

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

w

Conectando a %s