Ваш метод checkRole () всегда будет иметь значение true, если у вас в таблице пользователей несколько пользователей с разными ролями.Потому что вы выбираете все строки, где роль поля имеет определенный тип.И если определенный тип роли существует в вашей таблице пользователей, он всегда будет верным ...
Как уже упоминалось в другом ответе, вам нужно передать уникальный идентификатор.Как еще запрос должен знать, для какого пользователя вы проверяете роль?В большинстве приложений это делается с помощью поля user_id / id, но так как у вас есть только электронная почта здесь, вы также можете использовать это.Я бы сделал что-то вроде этого:
public static boolean isAdmin(String email) {
boolean check = false;
PreparedStatement pst = null;
ResultSet rs = null;
try(Connection conn= ConnectionConfiguration.getConnection()){
pst = conn.prepareStatement("SELECT * FROM users WHERE email =? and role='admin';");
pst.setString(1, email);
rs = pst.executeQuery();
check = rs.next(); // if the resultSet has results, then check will evaluate to true
} catch (SQLException e) {
e.printStackTrace();
}
return check;
}
Тогда для вашего сервлета:
{
String pass1 = request.getParameter("password");
String email = request.getParameter("email");
//first check if valid login details (seperate it out so you can be more specific in the error you give back, and you don't have to repeat yourself)
if(User.validate(email,pass1)){
// s.invalidate(); //this isn't really necessary here, normally you invalidate the session variables when the user logs out. If a different user logs in (whilst one is already logged in), then any session variables you have set would override it.
String url = "/RegularUser.jsp";
String role = "regular";
//now check if user is admin
if(User.isAdmin(email)){
url = "/Admin.jsp"
role = "admin";
}
//set your session variables
//s.setAttribute("user_email", email);
//s.setAttribute("user_role", role);
forwardTo(ctx, request, response, url);
}else{
//wrong login details - set values back in form
request.setAttribute("email",email);
request.setAttribute("pass", pass1);
forwardTo(ctx, request, response, "/Login.jsp");
}
}