Você está na página 1de 26

Controle de Sesso

Neste tpico abordaremos o controle de sesso, que permite rastrear os dados do usurio enquanto ele se move pelo site

A necessidade do controle de sesso

Como sabemos, o protocolo HTTP stateless

Toda ve que um cliente !a uma requisi"o, ele abre uma nova cone#o com o servidor $eb % servidor no mantm automaticamente in!orma"&es conte#tuais sobre o cliente

Controle de sesso em servlets

Servlets prov(em uma solu"o para o controle de sesso


AP) HttpSession No necessrio manipular coo*ies diretamente ou acrescentar in!orma"&es na +,- .+,- rewriting/

'

1undamentos do controle de sesso

%bter controle de sesso atravs de servlets simples e envolve 0 passos2

Acessar o ob3eto de sesso associado 4 requisi"o ,ecuperar as in!orma"&es associadas a uma sesso Arma enar in!orma"&es na sesso 5escartar dados da sesso
0

Acessando o ob3eto de sesso associado 4 requisi"o atual


.782/

%b3etos de sesso so do tipo HttpSession

+ma espcie de tabela 9as9 que pode arma enar ob3etos .associados a uma c9ave/ +m ob3eto HttpSession recuperado atravs do mtodo getSession() da classe HttpServletRequest

HttpSession session = request.getSession();


6

Acessando o ob3eto de sesso associado 4 requisi"o atual


.282/

Se nen9uma sesso estiver associada 4 requisi"o, getSession() cria uma nova sesso va ia Se voc( pretende tomar uma a"o alternativa se a sesso no e#istir, use o mtodo getSession(false)2

HttpSession session = request.getSession(false); if (session == null) // tomar ao alternativa else // recuperar os dados da sesso
:

,ecuperando as in!orma"&es associadas a uma sesso .782/

Para recuperar uma in!orma"o da sesso, use o mtodo session.getAttri ute(!"e#!) <sse mtodo devolve um $ %ect, portanto voc( deve !a er um type casting para o tipo apropriado % mtodo devolve null se no 9ouver o atributo
;

,ecuperando as in!orma"&es associadas a uma sesso .282/


HttpSession session = request.getSession(); Some&lass value = (Some&lass) session.getAttri ute(!some'dentifier!); if (value == null) ( print)essageAttri ute*ot+ound(); , else ( doSomet-ing.it-(value); ,

Arma enando in!orma"&es na sesso .782/

Para arma enar in!orma"&es na sesso, use o mtodo setAttri ute() % mtodo setAttri ute() substitui qualquer valor anterior do atributo Sinta#e2

session.setAttri ute(!"e#!/ value);

>

Arma enando in!orma"&es na sesso .282/

<#emplo2

HttpSession session = request.getSession(); Some&lass value = (Some&lass)session.getAttri ute(!some'dentifier!); if (value == null) ( value = ne0 Some&lass(...); session.setAttribute("someIdentifier", value); , doSomet-ing.it-(value);

7?

5escartando dados da sesso

@uando voc( termina de usar os dados da sesso, 9 tr(s coisas a !a er2

,emover somente os dados que seu servlet criou2 removeAttri ute(!"e#!) ,emover toda a sesso2 invalidate() 1a er o logout do usurio e remover todas as sess&es que pertencem a ele2 logout()

77

<#emplo2 loAin8loAout em uma aplica"o Beb

Aplica"o que !a o loAin e o loAout de um usurio em uma aplica"o Beb Autentica e autori a o usurio a reali ar alAuma opera"o na aplica"o Tabela de usurios2

m#sql1 create ta le usuarios ( login 2AR&HAR(34) *$5 *677/ sen-a 2AR&HAR(84)/ primar# "e# (login) );

72

<#emplo2 loAin8loAout em uma aplica"o Beb

ConteCdo

PAina de loAin .inde#D3sp/ EavaFeans para o usurio .+suarioD3ava/ 5A% para acesso a tabela de usurios .+suario5A%D3ava/ Servlet de autentica"o .-oAinD3ava/ PAina de boas vindas a aplica"o .aplicacaoD3sp/ -oAout no sistema .-oAoutD3ava/
7'

<#emplo2 loAin8loAout em uma aplica"o Beb .inde#D3sp/ .782/


9:;page content5#pe=!te<t/-tml! page=ncoding=!65+>8!:1 9?@$&5AB= -tml1 9:; tagli uri=!-ttpC//%ava.sun.com/%sp/%stl/core! prefi<=!c!:1 9-tml1 9-ead1 9meta -ttp>equiv=!&ontent>5#pe! content=!te<t/-tml; c-arset=65+>8!1 9title17ogin9/title1 9/-ead1 9 od#1 9center1 9-D17ogin no Sistema9/-D1 9form action=!login! met-od=!post!1 9ta le order=!D!1 9tr19td17oginC9/td19td19input t#pe=!te<t! name=!login! /19/td19/tr1 9tr19td1Sen-aC9/td19td19input t#pe=!pass0ord! name=!sen-a!/19/td19/tr1
70

<#emplo2 loAin8loAout em uma aplica"o Beb .inde#D3sp/ .282/


9tr19td colspan=!3!1 9cCc-oose1 9cC0-en test=!E(not empt# msg,!1 9font color=!red!1E(msg,9/font1 9/cC0-en1 9cCot-er0ise1'nforme seu login e sen-a 9/cCot-er0ise1 9/cCc-oose19/td1 9/tr1 9tr19td colspan=!3!19input t#pe=!su mit! value=!7ogin! /19/td1 9/tr1 9/ta le1 9/form1 9/center1 9/ od#1 9/-tml1
76

<#emplo2 loAin8loAout em uma aplica"o Beb .+suarioD3ava/


pac"age model; pu lic class 6suario ( private String login; private String sen-a; pu lic 6suario() ( , pu lic String get7ogin() ( return login; , pu lic void set7ogin(String login) ( t-is.login = login; , pu lic String getSen-a() ( return sen-a; , pu lic void setSen-a(String sen-a) ( t-is.sen-a = sen-a; , ,
7:

<#emplo2 loAin8loAout em uma aplica"o Beb .+suario5A%D3ava/


.782/
pac"age model; import import import import import %ava.sql.&onnection; %ava.sql.BreparedStatement; %ava.sql.ResultSet; %ava.sql.SF7=<ception; control.&onnection+actor#;

pu lic class 6suario@A$ ( private static final String SF7GA65$R'HARG6S6AR'$ = !select I from usuarios 0-ere login=J and sen-a=J!; private &onnection connection; pu lic 6suario@A$() t-ro0s SF7=<ception ( t-is.connection = ne0 &onnection+actor#().get&onnection(); ,
7;

<#emplo2 loAin8loAout em uma aplica"o Beb .+suario5A%D3ava/


.282/
pu lic oolean autoriKar(6suario user) t-ro0s SF7=<ception ( oolean autoriKado = false; tr# ( BreparedStatement stmt = connection.prepareStatement(SF7GA65$R'HARG6S6AR'$); stmt.setString(D/user.get7ogin()); stmt.setString(3/user.getSen-a()); ResultSet rs = stmt.e<ecuteFuer#(); if (rs.ne<t()) autoriKado = true; stmt.close(); rs.close(); , catc- (SF7=<ception e) ( t-ro0 e; , return autoriKado; ,
7=

<#emplo2 loAin8loAout em uma aplica"o Beb .-oAinD3ava/ .78'/


pac"age control; import import import import import import %ava.io.'$=<ception; %ava.sql.SF7=<ception; %ava<.servlet.I; %ava<.servlet.-ttp.I; model.6suario; model.6suario@A$;

/II I Servlet implementation class 7ogin I/ pu lic class 7ogin e<tends HttpServlet ( pu lic void doBost(HttpServletRequest request/ HttpServletResponse response) t-ro0s Servlet=<ception/ '$=<ception ( String login = request.getBarameter(!login!); String sen-a = request.getBarameter(!sen-a!);
7>

<#emplo2 loAin8loAout em uma aplica"o Beb .-oAinD3ava/ .28'/


String target = !aplicacao.%sp!; if (login.equals(!!)) ( target = !inde<.%sp!; request.setAttri ute(!msg!/ !+ornea o login de acesso ao sistema!); , else ( 6suario user = ne0 6suario(); user.set7ogin(login); user.setSen-a(sen-a); tr# ( 6suario@A$ udao = ne0 6suario@A$(); if (udao.autoriKar(user)) ( HttpSession sessao = request.getSession(); sessao.setAttri ute(!usuario!/ user); ,

2?

<#emplo2 loAin8loAout em uma aplica"o Beb .-oAinD3ava/ .'8'/


else ( target = !inde<.%sp!; request.setAttri ute(!msg!/ !7ogin/sen-a invLlido(s)!); , , catc- (SF7=<ception e) ( target = !inde<.%sp!; request.setAttri ute(!msg!/ e.get)essage()); , , Request@ispatc-er rd = request.getRequest@ispatc-er(target); rd.for0ard(request/ response); , ,

27

<#emplo2 loAin8loAout em uma aplica"o Beb .aplicacaoD3sp/ .782/


9:;page content5#pe=!te<t/-tml! page=ncoding=!65+>8!:1 9:;page import=!model.6suario! :1 9: 6suario user = (6suario) session.getAttri ute(!usuario!); if (user == null) ( request.setAttri ute(!msg!/ !Bermisso negada? +ornea login/sen-a!); Request@ispatc-er rd = request.getRequest@ispatc-er(!inde<.%sp!); rd.for0ard(request/response); return; , :1

22

<#emplo2 loAin8loAout em uma aplica"o Beb .aplicacaoD3sp/ .282/


9?@$&5AB= -tml1 9-tml1 9-ead1 9meta -ttp>equiv=!&ontent>5#pe! content=!te<t/-tml; c-arset=65+>8!1 9title1Aplicao9/title1 9/-ead1 9 od#1 9-D1Mem vindo ao sistema/ E(usuario.login,?9/-D1 9a -ref=!logout!17ogout9/a1 9/ od#1 9/-tml1

2'

<#emplo2 loAin8loAout em uma aplica"o Beb .-oAoutD3ava/ .782/


pac"age control; import %ava.io.'$=<ception; import %ava<.servlet.Request@ispatc-er; import %ava<.servlet.Servlet=<ception; import %ava<.servlet.-ttp.I; /II I Servlet implementation class 7ogout I/ pu lic class 7ogout e<tends HttpServlet ( pu lic void doBost(HttpServletRequest request/ HttpServletResponse response) t-ro0s Servlet=<ception/ '$=<ception ( doNet(request/ response); ,
20

<#emplo2 loAin8loAout em uma aplica"o Beb .-oAoutD3ava/ .282/


pu lic void doNet(HttpServletRequest request/ HttpServletResponse response) t-ro0s Servlet=<ception/ '$=<ception ( HttpSession sessao = request.getSession(false); if (sessao ?= null) sessao.invalidate(); Request@ispatc-er rd = request.getRequest@ispatc-er(!inde<.%sp!); rd.for0ard(request/ response); , ,

26

,e!er(ncias

HA--, GH F,%$N, -D 1ree %nline Iersion o! Core Servlets and EavaServer PaAes .second edition/ in P51D 5isponJvel em2 9ttp288pd!DcoreservletsDcom8D

2: