私は現在、ユーザー名とパスワードの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
ファイルを更新しました。
今、form
のonsubmit=
部分がJavaクラスで動いているような気がします。誰かが行うべきことが正しいことがjavascriptとjavaを使用してフォームの検証を行うことを知っていますか?残念ながら、reCaptchaのために何らかのjavascriptが必要なのは、ユーザーが空のcaptchaを提出できるからです。
'doGet()'では、 'login.jsp'に転送します。 'doPost()'では 'login'に転送します。質問のタイプミスであるかどうかはわかりませんが、問題が発生する可能性があります。補足:転送またはリダイレクトを行う前に、loginDAOリソースを閉じてください。 – Tap