1 / 30

Java avançado

Java avançado. Sessão - Contextualização. Muitas aplicações se faz necessário o acompanhamento da navegação do usuário armazenando informações específicas de cada um.

chana
Télécharger la présentation

Java avançado

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Java avançado

  2. Sessão - Contextualização • Muitas aplicações se faz necessário o acompanhamento da navegação do usuário armazenando informações específicas de cada um. • É comum hoje em dia acessarmos algum site que peça para fazermos nosso login para podermos ter acesso a funcionalidades da aplicação. Esse processo também é conhecido como autenticação. • Mas, como o site sabe, nas requisições seguintes que fazemos, quem somos nós?

  3. Sessão – Protocolo HTTP • O protocolo HTTP utilizado até agora para o acesso à páginas é limitado por não manter detalhes como quem é quem entre uma conexão e outra. • Para resolver isso, foi inventado um sistema para facilitar a vida dos programadores através do cookie.

  4. Cookie - Conceitualização • Um cookie nada mais é que um pedaço de informação que é enviado do servidor para o navegador. • Um cookie é normalmente um par de strings guardado no cliente, seguido de propriedade e valor. • Quando um cookie é salvo no cliente, ele é enviado de volta ao servidor toda vez que o cliente efetuar uma nova requisição. • Desta forma, o servidor consegue identificar aquele cliente sempre com os dados que o cookie enviar.

  5. Cookie • Usar Cookies parece facilitar muito a vida, mas através de um cookie não é possível marcar um cliente com um objeto, somente com Strings. • Imagine gravar os dados do usuário logado através de cookies. • Seria necessário um cookie para cada atributo: usuario, senha, id, data de inscrição, etc. Sem contar a falta de segurança.

  6. Cookie - Limitação • O Cookie também pode estar desabilitado no cliente, sendo que não será possível lembrar nada que o usuário fez.... • Eis que surge a sessão.

  7. Sessão • A sessão nada mais é que um tempo que o usuário permanece ativo no sistema. • A cada página visitada, o tempo de sessão é zerado. • Quando o tempo ultrapassa um limite demarcado no arquivo web.xml, o cliente perde sua sessão • Uma sessão facilita a vida de todos por permitir atrelar objetos de qualquer tipo a um cliente, não sendo limitada somente à strings e é independente de cliente.

  8. Sessão – Tipos de controle • Uma sessão pode ser gerenciada de duas formas: • Gerenciada por cookie • Se os cookies estiverem desabilitados, a sessão não funcionará e devemos recorrer para uma técnica (trabalhosa) chamada url-rewriting.

  9. Sessão – Timeout padrão • Por padrão o arquivo web.xml já possui um tempo definido para sessão, como pode ser visto abaixo. <session-config> <session-timeout> 30 </session-timeout> </session-config>

  10. Sessão – Configurar tempo • Para configurar 3 minutos como o padrão de tempo para o usuário perder a sessão basta incluir o seguinte código no arquivo web.xml: <session-config> <session-timeout> 3 </session-timeout> </session-config>

  11. Sessão gerenciada por cookie • Quando estamos trabalhando com sessão gerenciada por cookie temos que simplesmente nos preocupar com em obter o objeto que representa a sessão, e a manipulação do cookie é feita pelo container. • Mas, CUIDADO. • Se o cookie estiver desabilitado no browse, teremos problemas.

  12. Sessão – Obtendo HttpSession • Para obtermos o objeto sessão em um servlet utilizaremos o método getSession() do objeto request. • HttpSessionsession = request.getSession( ); • Retorna um objeto sessão caso exista, caso contrário, crie um novo e retorne-o. • HttpSessionsession = request.getSession( true/false ); • True • Retorna um objeto sessão caso exista, caso contrário, crie um novo (mesmo que request.getSession( ) ). • False • Retorna um objeto sessão caso exista, caso contrário retorne null.

  13. Sessão – Interface HttpSession • Nós desenvolvedores quando trabalhamos com Sessão, só precisamos nos preocupar em usar a classe HttpSession, o restante o container se encarrega de fazer para gente. • HttpSession permite a manipulação dos elementos de uma sessão. API HttpSession

  14. Sessão – Interface HttpSession • publiclonggetCreationTime() • Para saber qual dia/horário foi criada a sessão. • publicjava.lang.String getId() • Retorna um objeto String que identifica a sessão. • publiclonggetLastAccessedTime() • Para saber o dia/horário da ultima requisição feita naquela sessão. Date acess = new Date(session.getCreationTime()); Formatformatter = newSimpleDateFormat("MM/dd/yy"); System.out.print( formatter.format(acess) );

  15. Sessão – Interface HttpSession • publicvoidsetMaxInactiveInterval(intinterval) • Seta para essa sessão o tempo máximo de inatividade permitido, ou seja, o timeout. • Atenção que aqui não é para todas as sessões, e sim para a sessão corrente. • publicintgetMaxInactiveInterval() • Retorna o tempo de limite definido para a sessão. • publicjava.lang.ObjectgetAttribute(java.lang.String name) • Retorna um determinado objeto colocado na sessão, ou null caso não exista. • Observe que o retorno é um objeto “Object”, portanto faz se necessário um ‘cast’

  16. Sessão – Interface HttpSession • publicjava.util.EnumerationgetAttributeNames() • Retorna um Objeto Enumeration contendo todos os nomes dos atributos colocados na sessão. • publicvoidsetAttribute(java.lang.String name,java.lang.Objectvalue) • Coloca algum objeto na sessão. Enumeration elements = session.getAttributeNames(); while( elements.hasMoreElements() ){ System.out.print( elements.nextElement() ); }

  17. Sessão – Interface HttpSession • publicvoidremoveAttribute(java.lang.String name) • Remove um objeto que foi armazenado na sessão. • publicvoidinvalidate() • Método para terminar a sessão, basicamente retira todos os objetos da sessão corrente. • Ele é chamado ou programaticamente, ou pelo próprio container quando a sessão expira. • publicbooleanisNew() • Retorna true se o clienteaindanão tem o conhecimentodasessão.

  18. Exemplo - manipulação na sessão ... UsuarioDaouserDao = newUsuarioDao(); UsuariouserBD = userDao.getUser(user); if( ( userBD != null) && (userBD.getSenha().equals(password) )){ HttpSessionsession = request.getSession( true ); session.setAttribute("usuario",userBD); response.sendRedirect("/agendaLocalWeb_session_cookie/sistema.jsp"); }else{ String msgErro = "Caro usuário, login inválido."; request.setAttribute("msgErro", msgErro); (getServletContext().getRequestDispatcher("/index.jsp")).forward(request, response); } userDao.closeConn(); ...

  19. Sessão no JSP • O atributos de uma sessão são mantidos em um objeto HttpSession referenciado pela variável session. • Pode-se armazenar valores em uma sessão por meio do método setAttribute() e cuperá-los por meio do método getAttribute().

  20. Sessão no JSP – Atributo session • Diretiva pagesession="true|false” • Um valor true (default) indica que a variável predefinida session(HttpSession) deve ser associada à sessão, se existir, caso contrário uma nova sessão deve ser criada e associada a ela. • Um valor false indica que nenhuma sessão será usada. • Vale ressaltar que quando não especificado o valor do atributo session, o mesmo assume true como valor padrão.

  21. Autenticação • Como implementar uma autenticação do usuário??? • Vamos definir que quando um usuário estiver logado, existirá um objeto que represente-o na sessão. • Caso algum usuário tente acessar alguma página da aplicação e o objeto não exista na sessão, o acesso não deverá ser permitido.

  22. Autenticação • Para validar a autenticação nos servlets, deveremos incluir as seguinte linhas antes de realizarmos qualquer operação. if (request.getSession( ) == null ||request.getSession( ).getAttribute(“usuario”) == null){ request.getRequestDispatcher("/index.jsp").forward(request, response); return; } .... /* operações do servlet */

  23. Autenticação • Para validar a autenticação nas página JSP, deveremos incluir as seguinte linhas antes de realizarmos qualquer operação na página. <% if (session == null ||session.getAttribute("usuario") == null){ request.getRequestDispatcher("/index.jsp").forward(request, response); return; } %>

  24. Autenticação • Outra alternativa seria criar um arquivo jsp com o código abaixo, e incluí-lo dentro de cada uma das páginas existente na aplicação, através da diretiva include. <% if (session == null ||session.getAttribute("usuario") == null){ request.getRequestDispatcher("/index.jsp").forward(request, response); return; } %> Arquivo autentica.jsp

  25. Autenticação <%@pageimport="br.com.unipac.usuario.entity.Usuario;" session="true" %> <%@include file="autenticacao.jsp" %> <htmlxmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>UntitledDocument</title> </head> ... Arquivos * .jsp A diretiva include é usada para incluir um arquivo estático em uma página JSP, analisando os código JSP presente no arquivo a ser incluído.SINTÁXE JSP:<%@ include file="url_relativa" %>

  26. Aplicação de exemplo

  27. Sessão – gerenciada pela url • Em algumas situações o usuário poderá desabilitar o gerenciamento de cookie do browse. • Como conseqüência, torna-se possível o gerenciamento da sessão usuário, pois o servidor não consegue obter o id da sessão. • Para contornar essa situação, será necessário o gerenciamento de sessão através do método de reescrita da sessão.

  28. Sessão – gerenciada pela url • Esta técnica anexa o ID de sessão com um parâmetro de solicitação a todos as URL que se linkam as páginas locais ao servidor da web. • A reescrita de URL tende a demandar mais trabalho da parte de desenvolvedores de sites ,já que todas as referências as URL´s devem ser geradas dinamicamente ,a fim de fluir o ID de sessão apropriado específico de usuário.

  29. Sessão – gerenciamento pela url • Request1, chegou cookie JSESSIONID? • Sim, o container recupera os dados relativos essa sessão e contrói objeto session • Não, antes de criar uma nova Sessão, verifica se veio JSESSIONID pela url (pode ser que o cookie esteja desabilitado no cliente) • Sim, veio cookie na URL, então contrói objeto sessão.Não, Cria um novo objeto sessão. • Não, cria um novo objeto sessão.

  30. Sessão – gerenciamento pela url • Os mecanismos responsáveis pela reescritaURL são os métodosencodeURLe encodeRedirectURLdo objeto Response. • O segundo método é o irmão do sendRedirecte tem a mesma função com o único incremento que adiciona o JSESSIONID ao fim.

More Related