私は現在Struts2を学習しており、ログイン試行カウンターを作成して、x回の試行が失敗した後のそれ以上のログイン試行をブロックしようとしています。
これが私のlogin.jspの本文です
<body>
<h1><s:property value="loginAttempts"/></h1>
<s:form action="login">
<s:textfield name="username" label="Username" />
<s:password name="password" label="Password"/>
<%-- <s:hidden name="loginAttempts" value="<s:property value="loginAttempts"/>" /> --%>
<s:set var="loginAttempts"><s:property value="loginAttempts"/></s:set>
<s:submit value="login"/>
</s:form>
</body>
そして私のアクションクラス(私はそれらのゲッターとセッターを含むプライベート変数を含めていませんが、それらはすべてそこにあります)
public String execute() throws Exception{
if (username.equals("admin")&& password.equals("admin"))
{ return SUCCESS;}
else if (Integer.parseInt(getLoginAttempts())>2)
{
return "lockout";
}
else
{ setLoginAttempts(String.valueOf(Integer.parseInt(getLoginAttempts())+1));
return "fail";}
}
最初にlogin.jspを呼び出すアクションで、初期値を渡します
loginAttempts="0";
そしてそれはうまくいきます。login.jspページで送信を押すと問題が発生します。
次のスタックトレースを取得します
java.lang.NumberFormatException: null
java.lang.Integer.parseInt(Integer.java:417)
java.lang.Integer.parseInt(Integer.java:499)
com.struts.users.LoginAction.execute(LoginAction.java:17)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
17行目は
else if (Integer.parseInt(getLoginAttempts())>2)
そして、送信ボタンを押すたびに、loginAttempt
変数は自動的ににリセットされNULL
ます。
ありがとう
Edit: I understand that this probably isn't the right way to be doing this and i should probably be doing this with sessions. However I am trying to understand why it isn't working.