DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:
 
 

  Este é um post disponível para assinantes MVP
Este post também está disponível para assinantes da Java Magazine DIGITAL ou para quem possui Créditos DevMedia.  Clique aqui para saber mais!


VRaptor 3 - Revista Java Magazine 96 - Parte 3

No terceiro artigo da série daremos sequência ao estudo sobre o VRaptor 3 durante o desenvolvimento de uma aplicação web. Veremos aqui como implementar o controle de acesso através do login e permissões e como melhorar a interação do usuário com






Na segunda parte deste minicurso, vimos como deixar o sistema desacoplado utilizando interfaces e como reaproveitar funcionalidades com classes Genéricas. Além disso, aprendemos como é possível facilitar o desenvolvimento da parte visual do sistema utilizando templates e a biblioteca visual jQuery UI.

Qualquer sistema que preze por seus dados e pela integridade da informação necessita de um controle rígido de segurança. No entanto, é comum encontrarmos aplicações web que não possuem um bom controle de acesso ou que apresentam falhas que possibilitam o uso indevido por pessoas mal intencionadas. Diante deste fato surgiram diversos mecanismos de segurança, e com a evolução das tecnologias se torna cada vez mais fácil implementar este controle.

Este será um dos objetivos desta terceira parte da série: demonstrar como implementar um controle de acesso e permissão às ações do sistema. O controle será feito baseando-se no privilégio de cada um dos usuários, que por sua vez poderão ter mais ou menos direito de acesso às funcionalidades de acordo com suas tarefas dentro da organização. A partir disso, iremos possibilitar uma maior interação entre o usuário e a aplicação, deixando-o livre para enviar as capas dos filmes, fotos dos artistas e a do seu perfil, tudo com ajuda do VRaptor.

Como fazer download e upload de arquivos

O VRaptor, através de alguns componentes, facilita bastante a manipulação de arquivos em formato stream. Sem nenhum componente para nos auxiliar nesta tarefa, o trabalho fica um tanto quanto desgastante, e foi pensando nisso que estes componentes foram criados. Com eles não temos a necessidade de movimentar cada byte do arquivo, já que esta tarefa é feita automaticamente através de simples métodos. Assim, tirando proveito destes recursos, será criado um formulário para fazer o upload das capas dos filmes para o servidor, bem como a opção de apresentação destas imagens.

Fazendo upload da capa de um filme

Para iniciarmos a codificação da funcionalidade de upload de imagens, devemos adicionar na entidade Filme um atributo do tipo String (neste caso, imagem) que será responsável por manter o nome do arquivo. Em seguida é necessário criar um formulário com um campo de envio de arquivos, de acordo com a Listagem 1.

 

Listagem 1. exibir.jsp: formulário de envio da imagem do filme.

<form action="${pageContext.request.contextPath}/filme/${filme.id}/imagem"

    enctype="multipart/form-data" method="post">

  <input type="file" name="file"/>

  <input type="submit" value="enviar"/>

</form>

 

Neste formulário, estamos fazendo um POST do arquivo escolhido incluindo o ID do filme na URI. Observe que o formulário deve estar configurado como enctype=“multipart/form-data” para suportar o envio de arquivos anexados, que em nosso caso será uma imagem. Após a configuração da view, devemos configurar o método que receberá esta imagem, como pode ser observado na Listagem 2.

 

Listagem 2. FilmeController.java: método que recebe a imagem do filme em formato stream.

@Post("/filme/{filme.id}/imagem")

public void uploadImage(UploadedFile file, Filme filme) {

  try {

    repository.uploadImage(file, filme);

  } catch (Exception e) {

    result.include("error", e.getMessage());

  }

 

  result.redirectTo(this).exibir(filme);

}

 

No método uploadImage() é recebido como argumento a classe UploadedFile, que faz parte do VRaptor. Esta classe abstrai a manipulação do arquivo enviado facilitando seu transporte entre diferentes localidades. Após receber esta imagem, algumas validações são feitas na camada de negócios para garantir que o arquivo enviado possui a extensão adequada. Passando por esse teste, o nome da imagem é setado usando o ID do filme mais a extensão recuperada. A decisão de utilizar o ID como nome da imagem foi feita pelo fato deste nunca se repetir, sendo assim, cada imagem possuirá um nome único. Além disso, também é feita a verificação da existência do caminho no qual a imagem deverá ser enviada. Se o mesmo não existir, então será criado. Veja toda a lógica na Listagem 3.

 

Listagem 3. FilmeBusiness.java: método que valida e faz a cópia da imagem para o servidor em formato stream.

public void uploadImage(UploadedFile file, Filme filme) throws Exception {

"



ATENÇÃO! A exibição deste artigo foi interrompida.


  Este é um post disponível para assinantes MVP
Este post também está disponível para assinantes da Java Magazine DIGITAL ou para quem possui Créditos DevMedia.  Clique aqui para saber mais!






    16 COMENTÁRIOS

[Fechar]

Este post é fechado - você precisa ter acesso ao post para incluir um comentário.



Adriano Faria Alves
Boa tarde , como já tinha dito na parte 2 , gostei muito do seu artigo , vi que no seu blog já tem a parte 4 , ela já esta pronta ou vc vai adicionar alguma coisa antes de postar a parte 4 no JM ? Se desse para alterar alguma coisa ainda , seria bom que este projeto tivesse relacionamentos , tipo manytomany para filmes e artistas e onetomany para usuario filmes e usuario artistas.Só que mais focado no controller e jsp , por exemplo , eu tenho dificuldade em gravar uma lista e mostrar uma lista com relacionamentos.So falta isto para o artigo ser nota 10 ! Obrigado !
[há +1 mês] - Responder

 

[autor] Washington Botelho
Oi Adriano,

Infelizmente não será abordado esta parte de relacionamento que diz respeito mais ao Hibernate que ao VRaptor. Porém em meu blog já publiquei o primeiro de 3 posts sobre Hibernate, só você acompanhar.

Se quiser aprender um pouco de como manipular a lista para o controller, este [1] post com jQuery mostra um pouco disso.

Abraço.

[1] http://www.wbotelhos.com.br/2010/12/06/manipulando-listas-com-jquery-e-vraptor-3
[há +1 mês] - Responder
 

Charles Paz De Almeida
Olá Resolvi fazer alguns testes com aplicação modelo, e não obtive sucesso estou com problema ela não está criando o banco de dados.

O que pode ser ?
[há +1 mês] - Responder

 

[autor] Washington Botelho
Oi Charles,

Você precisa criar no mínimo o schema, pois o HBM só cria as tabelas. Você fez isso?
[há +1 mês] - Responder
 

Charles Paz De Almeida
Sim foi feito e a conexão de forma correta.

[há +1 mês] - Responder
 

[autor] Washington Botelho
Outra coisa também Charles,

Só serão criada as tabelas após você acessar a aplicação web. Só iniciar o servidor não ativa o HBM.
[há +1 mês] - Responder
 

Charles Paz De Almeida
Sim consegui acessar pagina de login do sistema ai quando clico em autenticar ele da erro no log avisando sobre a conexão com banco de dados.
[há +1 mês] - Responder
 

Charles Paz De Almeida
Ai verifiquei o banco de dados ele não está sendo criado.
[há +1 mês] - Responder
 

[autor] Washington Botelho
Charles,

Tem algo errado, pois o VRator nem sobe se não houver o schema criado e a JPA conseguir se conectar. Se você acessou a aplicação esta tudo criado.

Verifique se você deu refresh no schema e se esta olhando no lugar correto.
[há +1 mês] - Responder
 

Charles Paz De Almeida
Oi Washington,
descobri o erro era simplesmente o InnoBD do mysql que não estava abilitado ai aplicação rodava e não sicronizava com banco.

O erro ficava meio camuflado nos logs.

Valeu pelo artigo, muito detalhado e fácil.

Obrigado.
[há +1 mês] - Responder
 

[autor] Washington Botelho
Muito bom Charles,

Bons estudos. (:
[há +1 mês] - Responder
 

Charles Paz De Almeida
Washington Botelho, tenho uma dúvida não consegui fazer o projeto funcionar com mysql 5.5 ele apresenta erros.

Qual seria o persistence.xml para substituir para funcionar com esta versão do mysql.

Procurei em listas de discursão ainda niguém conseguiu resolver.

Se puder ajudar agradeço.

[há +1 mês] - Responder
 

[autor] Washington Botelho
Oi Charles,

O persistence é o mesmo, o que pode mudar talvez seja no Hibernate.properties, onde ficam as configurações da conexão.

Essa versão do MySQL creio que tenha algumas peculiaridades quanto ao InnoDB. Tente trocar essa [1] linha por essa [2].

[1] hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect
[2] hibernate.dialect=org.hibernate.dialect.MySQLDialect

Dessa forma será utilizado o Dialeto default do seu banco.
[há +1 mês] - Responder
 

Charles Paz De Almeida
Realmente ainda não consegui fazer funcionar devido hibernate não está aceitando, ele não está criando as tabelas mesmo.

Me parece que um bug com hibernate para essa versão do mysql 5.5?

Vou continuar procurando alguma solução, pois este novo mysql 5.5 é bastante rápido.

Obrigado.
[há +1 mês] - Responder
 

Dyego Souza Do Carmo
Cole aqui seu persistence.xml ... vamos ver se nao falta algo...
[há +1 mês] - Responder
 

Adriano Faria Alves
Bom dia , tive o mesmo problema que o seu , e a solução foi muito simples , trocar o MySQLInnoDBDialect por MySQL5InnoDBDialect no xml.
[há +1 mês] - Responder
 



Publicidade
Autor
Washington Botelho

É desenvolvedor Java EE/SE desde 2007 e aventureiro do mundo Rails. É Bacharel em Sistemas de Informação, certificado OCJA 1.0, OCJP 6 e trabalha na Concrete Solutions.


Space do autor
Estatísticas
Favorito:
Comentários:
Feedback:
Utilidade:
1   0
[Fechar]

Você precisa estar logado para dar um feedback.

Clique aqui para efetuar o login
[Fechar]


Este post está fechado. Saiba mais sobre a assinatura MVP!
web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2012 - Todos os Direitos Reservados a web-03