Filtro, JSP, Login

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:

[code] // 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.");
			}[/code]

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?

  1. Vi num site: http://www.javafree.org/artigo/855399/ 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á!

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