当在admin和user level.This之间重定向页面是我的level.This文件时,我遇到了问题:
<%
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页面。例如,登录管理然后home.jsp将显示编辑按钮,如果不是,这个按钮将是hidden.This是图片,我想要http://imgur.com/TJYtAu5。
这就是将管理和用户重定向到、admin.jsp、和的逻辑。但我只想使用一个页面,如果你是管理员,一些按钮将被启用,如果不是,该按钮将被隐藏。
感谢您的阅读。希望有人能帮我这个忙。:)
发布于 2014-10-29 02:54:15
正如圣克里什所说的那样,您的确实应该用一个servlet代替这个,该servlet可以实现相同的逻辑,或者在结束时重定向(就像您目前所做的那样),或者转发到JSP页面。
但是无论如何,您不应该依赖于简单的重定向来区别用户和管理员。通常的方法是使用一个或多个会话属性来存储登录名和/或用户的角色。然后,在JSP页面中测试名称或更好的角色,以决定是否显示按钮。与其简单地隐藏它们,不如不要显示它们,因为用户总是可以在浏览器中看到源HTML。
当您处理会话中的用户可以完成的表单提交时,您应该进行测试,而不是依赖于非管理员不应该看到按钮的事实:请求可以很容易地伪造。
发布于 2014-10-29 03:13:03
您可以简单地在会话中添加一个标志:
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
<%if((Boolean)(session.getAttribute("isAdmin")) {%>
<button>Admin Action</button>
<%}%>
https://stackoverflow.com/questions/26627878
复制