Pessoal estou criando uma aplicação do zero e acho importante começa-lo com a parte de segurança e acesso bem definidos.
Estou usando o JBoss Seam in Action como literatura e achei algo no link: http://relation.to/10904.lace
Criei um novo projeto EAR usando o Jboss Tools do Eclipse, criei as classes: Usuario e Permissao.
Depois implementei o método: authenticator.authenticate
Até aí tudo perfeito, funcionou… Continuei a ler o livro e verifiquei que tem outra forma de controle de acesso.
Assim:
Modifiquei o components.xml, comentei <security:identity authenticate-method> e inclui <security:jpa-identity-store>
<drools:rule-base name="securityRules">
<drools:rule-files>
<value>/security.drl</value>
</drools:rule-files>
</drools:rule-base>
<security:rule-based-permission-resolver security-rules="#{securityRules}"/>
<!-- <security:identity authenticate-method="#{authenticator.authenticate}" remember-me="true"/> -->
[b] <security:jpa-identity-store user-class="com.clebio.crs.entity.Usuario"
role-class="com.clebio.crs.entity.Perfil"/>
<security:jpa-permission-store user-permission-class="com.clebio.crs.entity.UserPermission"/>[/b]
<event type="org.jboss.seam.security.notLoggedIn">
<action execute="#{redirect.captureCurrentView}"/>
</event>
<event type="org.jboss.seam.security.loginSuccessful">
<action execute="#{redirect.returnToCapturedView}"/>
Também tive que modificar as entidades Usuario e Perfil acrescentando a elas algumas anotações sobre as Roles.
@Entity
public class Usuario implements Serializable{
private static final long serialVersionUID = -6753350298546832436L;
@Id @GeneratedValue
private Long id;
@Length(max = 100)
@UserPrincipal
private String nome;
@UserPassword(hash="SHA")
private String senha;
@Length(max = 100)
private String razao_social;
@Length(max = 14)
private String cpf_cnpj;
@UserRoles
@ManyToMany
@JoinTable(name="USUARIO_PERIL",
joinColumns={@JoinColumn(name="usuario_id")},
inverseJoinColumns={@JoinColumn(name="perfil_id")}
)
private List<Perfil> perfis;
@Version
private Integer version;
Getters e seters....
@Entity
public class Perfil implements Serializable{
private static final long serialVersionUID = -2043396556400492191L;
@Id @GeneratedValue
private Long id;
@RoleName
@Length(max = 100)
private String nome;
private String descricao;
@ManyToMany(mappedBy="perfis")
private List<Usuario> usuarios;
@Version
private Integer version;
Getters e seters....
Pessoal, e agora ??? Quais são os próximos passo, quando se escolhe esse tipo de controle de identificação me parece que
não se usa o método de autenticação criado pelo Seam. Não consegui entender direito a documentação do Seam.
Alguém já teve experiência com isso, qualquer ajuda é bem vinda.
Abraços…