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" />
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.
0 comentários:
Postar um comentário