Filtro, JSP, Login

1 resposta
K

Olá,

Estou desenvolvendo uma aplicação para Web com JSP. Nessa aplicação exitem três tipos de usuário: Cliente, Administrador-Gerente e Adminsitrador-Analista.

Para representá-los, fiz três classes Java com getters e setters: User,java, Client,java e Administrador.java, sendo que as duas últimas estendem a primeira.
Dentro de User,java, tenho uma variável que diferencia o usuário entre Cliente e Administrador.
Dentro de Administrator.java, tenho uma variável que diferencia o admin entre Gerente e Analista.

Cada um desses tipos de usuário tem acesso a determinadas páginas, por exemplo:
Cliente: clientHome.jsp
Admisistrador-Gerente: managerHome.jsp, newProject.jsp
Admisistrador-Analista: analystHome.jsp

Andei pesquisando no Google e aqui no GUJ e vi que uma boa opção para se fazer a autenticação das sessões dos usuários ao se requisitar uma determinada página é usando filtros.

No entanto, tenho algumas dúvidas:

1) No checkLogin.jsp, depois que eu verifiquei o usuário e a senha de acordo com o banco de dados, devo criar a sessão e redirecioná-lo para o local certo, ok? Estou fazendo o seguinte switch:

// redirect user to a certain page depending on his type
				switch (dbUser.getUserType()) {

				case User.Type.ADMIN:

					Administrator dbAdm = new Administrator();
					dbAdm.setStringID(user);
					dbAdm = (Administrator) hibernate.load(dbAdm);
					
					if (dbAdm.getLevel() == Administrator.Level.MANAGER) {
						session.setAttribute("user", dbAdm);
						session.setAttribute("type", "manager");
						response.sendRedirect("/managerHome.jsp");

					} else if (dbAdm.getLevel() == Administrator.Level.ANALYST) {
						session.setAttribute("user", dbAdm);
						session.setAttribute("type", "analyst");
						response.sendRedirect("/analystHome.jsp");
					}
					break;
		
				case User.Type.CLIENT:
					
					Client dbClient = new Client();
					dbClient.setStringID(user);
					dbClient = (Client) hibernate.load(dbClient);
										
					session.setAttribute("user", dbClient);
					session.setAttribute("type", "client");
					response.sendRedirect("/clientHome.jsp");
					break;
				
				default:
					out.println("Error identifying user type.");
				}

Como podem ver, estou passando o objeto todo para a sessão. Isso é necessário? É desse jeito que se faz? Ou posso apenas passar o tipo como uma stirng mesmo? Como vou identificar uma sessão?

2) Vi num site: [url]http://www.javafree.org/artigo/855399/[/url] um exemplo parecido com o meu. Nesse caso, o programador faz um arquivo que mapeia cada jsp para as pessoas que têm permissão. Essa é a melhor maneira de se fazer? Não seria mais interessante criar uma pasta para cada tipo de usuário com os jsps dentro e fazer um filtro/filter-mapping para cada pasta/usuário? Há outra alternativa?

Muito obrigada desde já!

1 Resposta

joca_java

Sugiro que você estude um pouco mais sobre autenticação como por exemplo JAAS, JDBC Realm…

Vai um link legal sobre JDBC Realms http://linux-sxs.org/internet_serving/c619.html

Aqui no GUJ também tem um tutorial de JAAS http://www.guj.com.br/java.tutorial.artigo.184.1.guj

[]´s

Criado 31 de dezembro de 2008
Ultima resposta 31 de dez. de 2008
Respostas 1
Participantes 2