[Resolvido] Session + Filter + Struts

2 respostas
caraujocruz

Bom dia Pessoal,
Estou desenvolvendo um helpdesk web usando struts e estou travado na permissão de acesso.
Meu sistema tem dois tipos de usuários ( administradores e usuários ) , se for administrador é igual a 1 no BD e usuário 0, preciso colocar o login na session
e quando o usuário logar verificar se a permissão e igual a 1 se for ele acessa qualquer pagina senão ele só acessa a de usuário.

Filter …

public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
			
		HttpServletRequest req = (HttpServletRequest) request;
		HttpServletResponse resp = (HttpServletResponse) response;
		
		//Abre uma session !
		HttpSession session = req.getSession();
		session.getAttribute("checkLogin");
		Login login =  (Login) session.getAttribute("checkLogin");
		
		if(login.getPermissao() == 0){
			//Força da o erro 401.
			resp.sendError(HttpServletResponse.SC_UNAUTHORIZED);

//A pagina de usuario nao esta dentro do filter no web.xml entao se for 0 ele vai da erro so quando tentar acessar a pagina de admin.

			
		}
		
		chain.doFilter(request, response);
		
	}

Action.

public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {

		
		LoginForm formulario = (LoginForm) form;
		Login login = formulario.getLogin();
		
		HttpSession session = request.getSession();
		session.setAttribute("checkLogin", login);
			
		return mapping.findForward("login");

Form que verifica se os campos estão preenchidos e se o usuário existe no BD (existeUsuario).

public class LoginForm extends ActionForm {

	private Login login = new Login();

	public Login getLogin() throws SQLException {

		return login;

	}

	@Override
	public ActionErrors validate(ActionMapping mapping,
			HttpServletRequest request) {

		ActionErrors erros = new ActionErrors();
		try {

			if (login.getUsuario() == null || login.getUsuario().equals("")) {
				erros.add("nome", new ActionMessage("erro.campoNome"));
			}

			else if (login.getSenha() == null || login.getSenha().equals("")) {
				erros.add("senha", new ActionMessage("erro.campoSenha"));
			}

			else if (!new chamadoDao().existeUsuario(login)) {
				erros.add("naoexiste", new ActionMessage("erro.naoexiste"));
			}

		} catch (SQLException e) {

			e.printStackTrace();
		}

		return erros;

	}

Estou online se precisar de mais informações sobre o sistema.

Desde já agradeço …

Carlos

2 Respostas

caraujocruz

Pessoal alguma idéia ?
estou tentando criar um metodo que verifica a permissao sem sucesso !

caraujocruz

Consegui resolver …
criei o método abaixo e no meu LoginAction eu pergunto se é true ou false e mudo o valor da variavel permissao.

public boolean verificaPermissao(Login login) throws SQLException{
		
		PreparedStatement stmt = connect.prepareStatement(  "select usuario" +
															", permissao" +
															"from tb_usuarios " +
															"where usuario=? " +
															"and permissao=1");		
		stmt.setString(1, login.getUsuario());
		
		ResultSet rs = stmt.executeQuery();
		
		try{
			if(!rs.next()){
				
				return false;
			}
				
		return true;
		
		}finally{
			
			rs.close();
			stmt.close();
			connect.close();
		}
	}

LoginAction.

public class LoginAction extends Action {

	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {

		
		LoginForm formulario = (LoginForm) form;
		Login login = formulario.getLogin();
		
		if(new chamadoDao().verificaPermissao(login) == true){
			login.setPermissao(1);
		}

		HttpSession session = request.getSession();
		session.setAttribute("checkLogin", login);
				
		return mapping.findForward("login");

	}

valew ,

Criado 9 de fevereiro de 2010
Ultima resposta 9 de fev. de 2010
Respostas 2
Participantes 1