2016-04-29 14 views
0

私は現在、ユーザー名とパスワードの2つの入力を含むフォームに、submitという形のcaptcha(<div>)とinputが動作する問題がありますボタンとして。このサブミットボタンが押されたら、キャプチャが空であるかどうかチェックしたいと思う。空でない場合は、ユーザーを認証する他のjavaコードを呼び出す必要があります。jspと同じフォームでJavaコードとJavaScriptコードを呼び出す方法

<html> 
    <head> 
    <!-- more scripts/google api js are here --> 
    <script type="text/javascript"> 
     function get_action(form) { 
     var v = grecaptcha.getResponse(); 
     if(v.length === 0) { 
      document.getElementById('captcha').innerHTML="Login failed: Empty captcha"; 
      return false; 
     } else { 
      return true; 
     } 
     } 
    </script> 
    </head> 
    <body> 
    <form action="login" method="post" onsubmit="return get_action(this);"> 
     <input type="text" id="email" value="${fn:escapeXml(param.email)}" required> 
     <input type="text" id="password" value="${fn:escapeXml(param.password)}" required> 
     <div class="g-recaptcha" data-sitekey="xxx"></div> 
     <input class="submit_button" type="submit" name="submit" value="Submit" /> 
     <span class="error"${error.invalid}</span> 
     <div id="captcha" class="captchaError"></div> 
    </form> 
    </body> 
</html> 

し、次のようにユーザーの検証がある行うことになっている私のログインサーブレット:

@WebServlet("/login") 
public class LoginServlet extends HttpServlet { 

    private LoginDAO loginDAO; 

    @Override 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
     request.getRequestDispatcher("login.jsp").forward(request,response); 
    } 

    @Override 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
     Map<String, String> error = new HashMap<String,String>(); 
     request.setAttribute("error",error); 

     String email = request.getParameter("email"); 
     String password = request.getParameter("password"); 

     // Verify re-captcha 
     String gRecaptchaResponse = request.getParameter("captcha"); 
     boolean verify = VerifyRecaptcha.verify(gRecaptchaResponse); 
     if(!verify) { 
      error.put("captcha","You seem to be a robot. Try to use the captcha again"); 
     } 
     if(error.isEmpty()) { 
      loginDAO = new LoginDAO(); 
      try { 
       List<Customer> customer = new ArrayList<Customer>(); 
       customer = loginDAO.validate(email,password); 
       if(customer.isEmpty()) { 
        error.put("invalid","Invalid email or password"); 
       } 
       if(error.isEmpty()) { // no errors, proceed 
        HttpSession session = request.getSession(true); 
        Customer user = customer.get(0); 
        session.setAttribute("user",user); 
        response.sendRedirect("main"); 
        return; 
       } 
       request.getRequestDispatcher("login").forward(request,response); 
      } catch(SQLException e) { 
       throw new ServletException("Could not check login",e); 
      } 
      loginDAO.closeLoginDAO(); 
     } 
    } 
} 
loginDAOだけのユーザー名をチェックし

マイJSPフォームは次のようになりますデータベースに対するパスワード。

昨晩はすべてがうまくいきました。私がした唯一のことは、javaファイルをサブディレクトリに移動することでした。しかし、何も間違っていないことを確認するためにweb.xmlファイルを更新しました。

今、formonsubmit=部分がJavaクラスで動いているような気がします。誰かが行うべきことが正しいことがjavascriptとjavaを使用してフォームの検証を行うことを知っていますか?残念ながら、reCaptchaのために何らかのjavascriptが必要なのは、ユーザーが空のcaptchaを提出できるからです。

+0

'doGet()'では、 'login.jsp'に転送します。 'doPost()'では 'login'に転送します。質問のタイプミスであるかどうかはわかりませんが、問題が発生する可能性があります。補足:転送またはリダイレクトを行う前に、loginDAOリソースを閉じてください。 – Tap

答えて

0

あなたのJSPファイルvar v = grecaptcha.getResponse();には、grecaptchaの定義がなくなり、エラーが発生します。

+0

何も影響していないようです。私はそれがまだ空白のページに行くことを意味します。また、クロムにあるページを調べると、javascriptの部分にエラーが表示されません。 – Alex

関連する問題