Bloquear o acesso ao Servlet diretamente

Pessoal,

Tenho uma página JSP de cadastro que faz uma chamada - através de um form - para um Servlet que lê os parametros passados da JSP para o Servlet. Perfeito, isso funciona, mas caso eu acesse o endereço do Servlet diretamente, uma tela com o erro de NullPointerException é exibida.

Eu gostaria que se o usuário tentasse acessar o Servlet diretamente, sem ir pela página de cadastro, ele seja redirecionado para outra pagina.

Como eu faço isso?
Estou fazendo da maneira correta?

Obrigado

Alguém tem alguma ideia? Só quero que o acesso ao Servlet seja permitido através de um redirecionamento do JSP, pois senão os dados do parametros estarão NULL e a tela com o NULLpointexception é exibida… alguma ideia?

se você estiver trabalhando com um usuário logado, você pode verificar dentro da servlet se a sessão é ativa e se ele pode realizar a função (nivel de acesso), se não tiver nenhum desses, xuta que é macumba!

ele não esta logado ainda, é uma tela de cadastro de usuario. eu tenho como ver se um request está em branco ou algo do tipo?

essa é uma opção. Como o usuário ainda não está logado, verifique justamente isso, se ele não estiver, chuta ele pra fora, faça o redirect via servlet mesmo

como eu vejo se o request está null? e estou fazendo isso da maneira correta? com o JSP passando tudo para o Servlet e o Servlet apenas verificando os dados e passando para outra camada?

Verifica se tem alguem logado aqui, se não tiver, redireciona
HttpSession session = request.getSession(true);

olha esse link aqui

mas eu crio um sessão mesmo sem o usuario estar logado?
é a melhor maneira, amigo?

existem n formas de se fazer isso, uma delas seria verificar se a sessão é ativa, outra seria você enviar um parâmetro via request para saber se pode ou não acessar. Estas são formas bem conhecidas, tudo depende de como você quer tratar a informação, você pode até mesmo colocar as 2 formas em prática, por exemplo, se uma sessao estiver ativa, verificar se o atributo consta, se ambos forem verdadeiros, então ele realiza a solicitação, caso algum seja falso, então redirecionar para aonde você deseja.

eu gostaria apenas de redicionar o usuario para a página inicial, quando ele fosse acessar o servlet diretamente… mas todos os parametros seriam nulos?
eu poderia comparar “request == null” e redirecionar no inicio do servlet?

estou perdido nessa parte… gostaria de fazer da maneira mais simples possivel

posta o teu servlet aí

eu não estou com o codigo aqui, mas de noite eu postarei

usando session, eu não poderia sobrecarregar o servidor sem necessidade?
eu quero algo do tipo: se o usuario não vier da pagina de cadastro, o Servlet (addUser) redireciona automaticamente para a pagina de cadastro. o Servlet só pode ser acessado se vier da pagina de cadastro…

alguém?

[code] protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String name = request.getParameter(“name”);
String mail = request.getParameter(“mail”);
String password = request.getParameter(“password”);
String retype = request.getParameter(“retype-password”);
String birthday = request.getParameter(“birthday”);

    User user = new User(name, mail, password, new GregorianCalendar());
    UserDAO dao = UserDAO.getInstance();
    if (dao.create(user)) {
        response.setContentType("text/html; charset=utf-8");
        PrintWriter out = response.getWriter();
        try {
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Servlet CreateAccount</title>");
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>" + request.getParameter("name") + "</h1>");
            out.println("</body>");
            out.println("</html>");
        } finally {
            out.close();
        }
    }
}[/code]

esse é o meu código…
se eu acesso ele diretamente, vai dar erro, pois ele procura pelos parametros, como faço para redirecionar?

valeu

ninguem sabe? :frowning:

Isso deve resovler o problema, se o usuário tentar acessar o teu servlet sem vir daquela página, ele vai ser redirecionado para onde tu quer, caso contrário, ele vai fazer o que tem que ser feito.

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)  
            throws ServletException, IOException {  

        if (!request.getRequestURL().toString().equals(&quot;&lt;&lt;aqui vem o endereço de onde ele deve aceitar&gt;&gt;&quot;)){
              //se não for igual a url que tem que ser faça isso
             response.sendRedirect(&quot;/NomeDoTeuProjeto/endereçoAondeTemQueIr&quot;);
        } else {
        String name = request.getParameter(&quot;name&quot;);  
        String mail = request.getParameter(&quot;mail&quot;);  
        String password = request.getParameter(&quot;password&quot;);  
        String retype = request.getParameter(&quot;retype-password&quot;);  
        String birthday = request.getParameter(&quot;birthday&quot;);  
         
        User user = new User(name, mail, password, new GregorianCalendar());  
        UserDAO dao = UserDAO.getInstance();  
        if (dao.create(user)) {  
            response.setContentType(&quot;text/html; charset=utf-8&quot;);  
            PrintWriter out = response.getWriter();  
            try {  
                out.println(&quot;&lt;html&gt;");  
                out.println("&lt;head&gt;");  
                out.println("&lt;title&gt;Servlet CreateAccount&lt;/title&gt;");  
                out.println("&lt;/head&gt;");  
                out.println("&lt;body&gt;");  
                out.println("&lt;h1&gt;" + request.getParameter("name") + "&lt;/h1&gt;");  
                out.println("&lt;/body&gt;");  
                out.println("&lt;/html&gt;");  
            } finally {  
                out.close();  
            }  
        }  
        }
    }  

perfeito, mas se o endereço que ele deve aceitar possuir parametros nele? a pagina é: criar.jsp, mas pode ser criar.jsp?erro=1 ou criar.jsp?erro=2 e outros diversos “erro=?”

eu tenho como por uma expressao regular ou algo do tipo que aceite tudo com “create.jsp”?

aí basta tu trabalhar com a String. Se tu quiser que seja exatamente aquilo, então acabou ali, caso contrário, você pode utilizar o contains() da String
essa função busca uma sequencia de caracteres

String a = "abcd";
System.out.println(a.contains("ab"));
//resultado == true
System.out.println(a.contains("jd"));
//resultado == false

amigo, o codigo:

if (!request.getRequestURL().toString().equals("<<aqui vem o endereço de onde ele deve aceitar>>")){ //se não for igual a url que tem que ser faça isso response.sendRedirect("/NomeDoTeuProjeto/endereçoAondeTemQueIr"); }

não funcionou, ele sempre pega a string do servlet… nunca pega da página que redireciona para o servlet, sabe por que?