sexta-feira, 11 de novembro de 2011

Seam Security e JSF 2.0

Olá pessoal,

O seam 3 foi modularizado e precisei usar o módulo Seam Security em um projeto JSF 2.0 e tive alguns problemas para configurar pois a documentação, por ser uma tecnologia nova ainda, não está muito convincente.

Bem, vamos ao que interessa.

Para o projeto que faremos abaixo será utilizado:

 - Eclipse Helios
 - Maven 3
 - JBoss AS 6
 - JDK 1.6

É importante que o plugin do Maven esteja instalado no seu Eclipse, segue o link de instalação se ainda não o tiver: http://m2eclipse.sonatype.org/sites/m2e

Para iniciarmos um projeto no Eclipse clique em "New/Other" e na janela "New", digite "maven" em "Wizards" e escolha a opção "Maven Project" como mostra a figura abaixo:


Clique em "Next".

Na próxima tela selecione a opção "Create a simple project (skip archetype selection)".




















Clique em "Next".

Preencha a próxima tela com as seguintes informações:




















Clique em "Finish".

A estrutura será a seguinte:



Agora devemos criar a pasta "WEB-INF" dentro da pasta "webapp", para isso clique com o botão direito em "webapp" e clique em "new/other/folder", digite "folder" em wizard, selcione a opção "General/folder", clique em "Next", em "Folder name"  digite "WEB-INF" (maiúsculo). A estrutura ficará da seguinte forma:



Dentro da pasta "WEB-INF" serão colocados três arquivos: web.xml, faces-config.xml e beans.xml, abaixo segue o código dos três segue abaixo:

web.xml:
<web-app id="WebApp_ID" version="2.5"

xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name>VirtualStore</display-name>
<context-param>
<param-name>primefaces.THEME</param-name>
<param-value>bluesky</param-value>
</context-param>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
</web-app>


faces-config.xml:
<?xml version="1.0" encoding="UTF-8"?>

<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
version="2.0">

</faces-config>

beans.xml:
<beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:s="urn:java:ee" xmlns:security="urn:java:org.jboss.seam.security"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://jboss.org/schema/cdi/beans_1_0.xsd">

<interceptors>
<class>org.jboss.seam.security.extension.SecurityInterceptor</class>
</interceptors>
</beans>

Segue a estrutura abaixo:


Agora iremos criar duas páginas: login.xhtml e cadastro.xhtml. Para isso clique com o botão direito em cima da pasta "webapp" e selecione "new/other", em "Wizard" digite "xhtml" e selecione a opção "XHTML Page" e clique em "Next". 

Nesta tela, em "File name" digite "login" e clique em "Next".

Nesta tela escolha a opção "Blank JSF Page" e clique em "Finish".

A estrutura ficará assim:


O código da página será o serguinte:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:ui="http://java.sun.com/jsf/facelets"> 

<h:head></h:head> 
<body> 

</body> 
</html>

Repita o procedimento e crie a página "cadastro.xhtml".