|
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.*;
import java.util.*;
import java.sql.*;
import javax.naming.*;
import javax.sql.*;
public final class LoginAction extends Action {
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {
// 画面よりログインIDとパスワードを取得する
LoginForm loginForm = (LoginForm)form;
String id = loginForm.getId();
String password = loginForm.getPassword();
// 初期値を設定する
InitialContext ic = null;
DataSource ds = null;
Connection con = null;
PreparedStatement ps = null;
ResultSet rs = null;
int count = 0;
String status = null;
List usersList = null;
ActionMessages errors = new ActionMessages();
try {
// DBより登録者の情報を取得する
ic = new InitialContext();
ds = (DataSource)ic.lookup("java:comp/env/jdbc/mysql");
con = ds.getConnection();
ps = con.prepareStatement(
"select id, password from users where id = ?");
ps.setString(1, id);
rs = ps.executeQuery();
// 認証を行う
while (rs.next()) {
count++;
if (count == 1) {
// ログインIDとパスワードが登録者の情報と
// 一致しなければ認証失敗
if (! id.equals(rs.getString("id")) ||
! password.equals(rs.getString("password"))) {
errors.add(
ActionMessages.GLOBAL_MESSAGE,
new ActionMessage("errors.login"));
}
// ログインIDが2件以上存在したら認証失敗
} else {
errors.add(
ActionMessages.GLOBAL_MESSAGE,
new ActionMessage("errors.login"));
}
}
// ログインIDが0件なら認証失敗
if (count == 0) {
errors.add(
ActionMessages.GLOBAL_MESSAGE,
new ActionMessage("errors.login"));
}
// 認証に成功した場合、トップ画面に
// 登録者の一覧を表示する
if (errors.isEmpty()) {
status = "success";
usersList = new ArrayList();
ps = con.prepareStatement(
"select id, name from users order by id");
rs = ps.executeQuery();
while (rs.next()) {
SampleUser sampleUser = new SampleUser();
sampleUser.setId(rs.getString("id"));
sampleUser.setName(rs.getString("name"));
usersList.add(sampleUser);
}
request.setAttribute("userslist", usersList);
// 認証に失敗した場合、ログイン画面に
// エラーメッセージを表示する
} else {
status = "error";
saveErrors(request, errors);
}
} catch (Exception e) {
throw e;
} finally {
con.close();
}
return (mapping.findForward(status));
}
}
|
|