<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>tutorial</groupId>
<artifactId>Tutorial</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>org.hibernate.java-persistence</groupId>
<artifactId>jpa-api</artifactId>
<version>2.0-cr-1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>3.5.0-Beta-2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-api</artifactId>
<version>2.1.0-b03</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-impl</artifactId>
<version>2.1.0-b03</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.18</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.hibernate.java-persistence</groupId>
<artifactId>jpa-api</artifactId>
<version>2.0-cr-1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.primefaces</groupId>
<artifactId>primefaces</artifactId>
<version>2.2.1</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.primefaces.themes</groupId>
<artifactId>bluesky</artifactId>
<version>1.0.2</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.jboss.seam.security</groupId>
<artifactId>seam-security</artifactId>
<version>3.0.0.Final</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.jboss.seam.security</groupId>
<artifactId>seam-security</artifactId>
<version>3.0.0.Final</version>
</dependency>
<dependency>
<groupId>org.jboss.seam.faces</groupId>
<artifactId>seam-faces</artifactId>
<version>3.0.0.Final</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.ejb</artifactId>
<version>3.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.enterprise</groupId>
<artifactId>cdi-api</artifactId>
<version>1.1.EDR1.1</version>
<scope>provided</scope>
</dependency>
</dependencies>
<repositories>
<repository>
<id>maven2-repository.dev.java.net</id>
<name>Java.net Repository for Maven</name>
<url>http://download.java.net/maven/2</url>
</repository>
<repository>
<id>repository.jboss.org-public</id>
<name>JBoss repository</name>
<url>https://repository.jboss.org/nexus/content/groups/public</url>
</repository>
<repository>
<id>prime-repo</id>
<name>PrimeFaces Maven Repository</name>
<url>http://repository.primefaces.org</url>
<layout>default</layout>
</repository>
</repositories>
</project>
Depois de acrescentar este código, observe no canto direito inferior do eclipse, o maven estará fazendo o download das dependências do projeto sinalizado por "Updating Maven Dependencies", aguarde até terminar.
Agora, vamos criar um pacote no nosso projeto, para isso clique com o botão direito em "src/main/java" e escolha a opção "new/package", na tela "Java Package" em "Name" digite "br.com.tutorial.controller", segue a imagem da tela:
Clique em "Finish".
Adicione mais três pacotes ao projeto:
- br.com.tutorial.dao
- br.com.tutorial.restriction
- br.com.tutorial.role
- br.com.tutorial.model
Dentro do pacote "br.com.tutorial.controller", vamos criar duas classes: LoginController e CadastroController, para isso clique com o botão direito no pacote selecione a opção "new/class" e em name digite "LoginController" como mostra a imagem:
Clique em "Finish".
Agora faça o mesmo e crie as seguintes classes em seus respectivos pacotes:
- CadastroController no pacote br.com.tutorial.controller.
- CadastroDAO no pacote br.com.tutorial.dao.
- Restrictions no pacote br.com.tutorial.restriction.
- User no pacote br.com.tutorial.model.
Depois disso crie uma interface no pacote "br.com.tutorial.role", siga o mesmo procedimento para criar uma classe e substitua o código pelo código abaixo:
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.jboss.seam.security.annotations.SecurityBindingType;
@SecurityBindingType
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.TYPE, ElementType.METHOD, ElementType.CONSTRUCTOR })
public @interface Admin {
}
A estrutura do projeto ficará assim:
Agora vamos substituir o código das classes.
----------------------------------------------------------------------------------------------------------------------------------
- User
package br.com.tutorial.model;
public class User implements org.picketlink.idm.api.User {
private String username;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getKey() {
return null;
}
public String getId() {
return null;
}
}
----------------------------------------------------------------------------------------------------------------------------------
- LoginController
package br.com.tutorial.controller;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.inject.Inject;
import org.jboss.seam.security.Authenticator;
import org.jboss.seam.security.BaseAuthenticator;
import org.jboss.seam.security.Credentials;
import org.jboss.seam.security.Identity;
import br.com.tutorial.model.User;
@ManagedBean
@SessionScoped
public class LoginController extends BaseAuthenticator implements Authenticator {
@Inject
Credentials credentials;
@Inject
Identity identity;
public void setCredentials(Credentials credentials) {
this.credentials = credentials;
}
public Credentials getCredentials() {
return credentials;
}
public void authenticate() {
if ("adm".equals(credentials.getUsername())) {
setStatus(AuthenticationStatus.SUCCESS);
identity.addRole("admin", "USERS", "GROUP");
setUser(new User());
} else {
setStatus(AuthenticationStatus.FAILURE);
}
}
}
----------------------------------------------------------------------------------------------------------------------------------
- CadastroController
package br.com.tutorial.controller;
import javax.enterprise.inject.Model;
import javax.faces.bean.RequestScoped;
import org.jboss.seam.security.annotations.LoggedIn;
import br.com.tutorial.dao.CadastroDAO;
import br.com.tutorial.model.User;
@Model
@LoggedIn
@RequestScoped
public class CadastroController {
User user;
public CadastroController() {
this.user = new User();
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public void save() {
CadastroDAO.save(user);
}
}
----------------------------------------------------------------------------------------------------------------------------------
- Admin
package br.com.tutorial.role;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.jboss.seam.security.annotations.SecurityBindingType;
@SecurityBindingType
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.TYPE, ElementType.METHOD, ElementType.CONSTRUCTOR })
public @interface Admin {
}
----------------------------------------------------------------------------------------------------------------------------------
- Restrictions
package br.com.tutorial.restriction;
import org.jboss.seam.security.Identity;
import org.jboss.seam.security.annotations.Secures;
import br.com.tutorial.role.Admin;
public class Restrictions {
@Secures
@Admin
public boolean isAdmin(Identity identity) {
return identity.hasRole("admin", "USERS", "GROUP");
}
}
----------------------------------------------------------------------------------------------------------------------------------
- CadastroDAO
package br.com.tutorial.dao;
import br.com.tutorial.model.User;
import br.com.tutorial.role.Admin;
@Admin
public class CadastroDAO {
public static void save(User user){
}
}
----------------------------------------------------------------------------------------------------------------------------------
A anotação @Admin é quem faz o serviço de restrições, ela pode ser colocada tanto no escopo de classe quanto no escopo de métodos.
Note que na interface temos uma anotação @Target que te um array de ElementType
(@Target({ ElementType.TYPE, ElementType.METHOD, ElementType.CONSTRUCTOR })), se colcoarmos somente os dois primeiros a página poderá ser acesseda, porém dependendo do lugar que a anotação @Admin estiver será necessário ter as regras estabelecidas na classe "Restrictions".
Na próxima parte mostrarei o código das páginas, farei o deploy da aplicação e os testes.



Nenhum comentário:
Postar um comentário