sábado, 6 de junho de 2015

Interceptador


Eu, responsável pela confecção do funcionamento lógico do projeto, usufrui do Spring desde o começo do desenvolvimento do programa. As Controllers já foram feitas, e direcionam corretamente o usuário para a página que ele quiser acessar. Porém, algumas dessas páginas não deveriam ser acessadas por usuários não logados. É necessário a existência de algo que barre o acesso do usuário a certas páginas. Para isso, utilizei o AutorizadorInterceptor.

O AutorizadorInterceptor implementa a interface HandlerInterceptorAdapter para poder utilizar o método preHandle. Este, por sua vez, recebe a requisição e a resposta, além do Controller que será interceptado. O retorno é um booleano que indica se pode continuar com a requisição ou não.

Como as páginas index, login e cadastro não necessitam que o usuário esteja logado para serem acessadas, coloquei a seguinte condição:

if (uri.endsWith("index") || uri.endsWith("login") || uri.endsWith("cadastro") || uri.contains("resources")) {
return true;
}

Assim, se o usuário tentar acessar um link que termine com o nome de uma dessas páginas, ele não será barrado. A pasta resources também pode ser acessada mesmo sem estar logado, pois é nela que ficam as imagens, os CSSs e os JavaScripts.

Além disso, existe outra condição para o usuário poder acessar a página requisitada:

if(request.getSession().getAttribute("usuarioLogado") != null) {
return true;
}

Ou seja, se o usuário estiver logado, ele poderá acessar a página requisitada. O Attribute "usuarioLogado" é dado à sessão pelo LoginController para o usuário que logar com sucesso (login e senhas compatíveis):

@RequestMapping("/logar")
public String efetuaLogin(Usuario usuario, HttpSession session) {
 if(new JpaUsuarioDAO().existeUsuario(usuario)) {
   session.setAttribute("usuarioLogado", usuario);
   return "PaginaUsuario";
 }
 return "redirect:login";
}

E, caso nenhuma dessas requisições sejam atendidas...

response.sendRedirect("login");
return false;

O interceptador barra o acesso do usuário à página requisitada, e o mesmo é redirecionado para a página de login.

Interceptador é uma das poucas classes que não podem ser indicadas via uma anotação. Então, foi necessário indicar o local do Interceptor para o Spring no DispatcherServlet:

<mvc:interceptors>
<bean
class="br.edu.ifsp.spo.t305.teamtoddynho.sportevento.controller.interceptor.AutorizadorInterceptor" />
</mvc:interceptors>

Assim, toda vez que o usuário requisitar o acesso à uma página (ou seja, chamar o método de algum dos Controllers), o Interceptador é chamado, e seu método irá decidir se o usuário esta autorizado ou não. Esta classe é imprescindível para garantir a segurança do site. Na verdade, ela é imprescindível para a existência de um projeto Web dinâmico. Sem ela, qualquer um teria acesso à informações que em teoria deveriam ser confidenciais, como o perfil de um usuário.

Com o Interceptador pronto, o próximo passo é permitir que o usuário cadastre-se, logue, crie uma partida e deslogue. Com o Bruno ainda terminando os DAOs, fico com a missão de realizar os JavaScripts do projeto. Até a próxima quinta, uma boa parte destas funções, se não todas, já estarão prontas.
← Anterior Proxima → Página inicial

0 comentários:

Postar um comentário