【发布时间】:2014-12-30 23:49:29
【问题描述】:
我是 Java 新手,我希望使用 switch 语句进行基于角色的访问,但是当我执行查询并提供用户角色(例如用户或管理员)时,用户登录良好,但如果我将 (role='') 留空查询然后查询不能很好地执行并跳转到 else 语句。其次,如果我使用准备好的语句,那么我如何获得用户角色谢谢。这是我的代码。
<%
String userid = request.getParameter("username");
String pwd = request.getParameter("password");
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/auto_lube","root", "password");
Statement st = con.createStatement();
ResultSet rs;
rs = st.executeQuery("select * from users where uname='" + userid + "' and pass='" + pwd + "' and role=''");
if (rs.next()) {
String username = rs.getString("uname");
String email = rs.getString("email");
String rolle = rs.getString("role");
session.setAttribute("customer_name", username);
int usser = rs.getInt("id");
session.setAttribute("customer_id", usser);
switch(rs.getInt(rolle)) {
case 1:
if (rolle.equals("admin")) {
response.sendRedirect("adminPage.jsp");
break;
}
case 2:
if (rolle.equals("user")) {
response.sendRedirect("user.jsp");
}
break;
case 3:
if (rolle.equals("assistant")) {
response.sendRedirect("assistant.jsp");
}
break;
case 4:
if (rolle.equals("supplier")) {
response.sendRedirect("supplier.jsp");
}
break;
default:
break;
}
} else {
out.print("invalid");
}
%>
【问题讨论】:
-
st.executeQuery("select * from users where uname='" + userid + "' and pass='" + pwd + "' and role=''"); SQL注入源
-
如果你没有传递任何角色,那么你可以将他重定向到 users.jsp 并且你的控制不应该来自 JDBC 代码。
-
我在角色后加了双引号,显示错误
-
如果我设置用户角色,那么如何执行 switch 语句,因为我应该为多个角色编写多个查询,这不是一个好习惯?
标签: java mysql jsp switch-statement user-roles