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.
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.
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.