在管理员和用户级别之间重定向页面时出现问题。这是我的 checklogin.jsp 文件:
<%
String name = request.getParameter("username");
String pass = request.getParameter("password");
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Connection con = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=demoLoginAdminUser", "sa", "sa");
Statement st = con.createStatement();
ResultSet rs = st.executeQuery("select * from reg");
int x = 0;
while (rs.next()) {
if ((rs.getString("username").equals(name)) && rs.getString("password").equals(pass)) {
String stp = rs.getString("uType");
if (stp.equals("admin")) {
x = 1;
break;
} else {
x = 2;
break;
}
}
}
if (x == 2) {
response.sendRedirect("student.jsp");
} else if (x == 1) {
response.sendRedirect("admin.jsp");
} else {
out.println("Either you enter Invalid UserName or Password! Please Try Again");
%>
<jsp:include page="index.html" />
<%}
} catch (Exception e) {
out.println(e);
}
session.setAttribute("username", name);
%>
我已将管理员重定向到 admin.jsp ,并将用户重定向到 student.jsp 。 现在我想登录 home.jsp 页面。 例如,使用admin登录然后 home.jsp 将显示编辑按钮,否则,此按钮将被隐藏。这是我想要的图片 http://imgur.com/TJYtAu5
所以这是用于将管理员和用户重定向到 admin.jsp 和 student.jsp 的逻辑。但我想只使用一个页面,如果你是管理员,一些按钮将被启用,如果不是那个按钮将被隐藏。
感谢阅读。我希望有人帮助我。 :)
答案 0 :(得分:0)
正如San Krish所说,你真的应该用一个可以实现相同逻辑的servlet替换这个JSP,并在最后重定向 - 就像你现在一样 - 或转发到JSP页面。 / p>
但无论如何,你不应该依赖简单的重定向来区分用户和管理员。通常的方式是使用一个或多个session(s)属性来存储登录名和/或用户的角色。然后在JSP页面中测试名称或更好的角色,以决定是否显示按钮。最好不要显示它们而不是简单地隐藏它们,因为用户总是可以在浏览器中看到源HTML。
您应该在处理表单提交时进行测试,允许会话中的用户执行此操作,而不是依赖于非管理员不应该看到按钮的事实:请求可以很容易伪造。
答案 1 :(得分:0)
您只需在会话中添加一个标记:
<强> checklogin.jsp 强>
session.setAttribute("isAdmin", stp.equals("admin"));
session.setAttribute("username", name);
带有taglib的home.jsp
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:if test="${isAdmin}">
<button>Admin Action</button>
</c:if>
home.jsp 没有taglib
<%if((Boolean)(session.getAttribute("isAdmin")) {%>
<button>Admin Action</button>
<%}%>