jsp安全性问题,当别人知道某个jsp文件的网址后就可以跳过登陆页面直接访问该jsp文件了,这样无法禁止外部无权限用户的访问。本文讨论内容是通过权限验证的用户,才可以访问特定的页面。
JSP 页面验证,涉及到的知识有Session, 网页权限, 用户验证等。
session对象
session对象用来存储有关用户会话的所有信息,一个会话就是浏览器与服务器之间的一次通话,它包含浏览器与服务器之间的多次请求、响应过程。session是JSP内置对象,与浏览器一一对应,允许用户存储和提取会话状态的信息,信息保存在服务器端。
session信息获取
1) JSP
session.setAttribute("userinfo", USERNAME); // session保存登录信息和用户名
2) Java(Servlet)
request.getSession().setAttribute("userinfo", USERNAME); // session保存登录信息和用户名
其中,request为HttpServletRequest对象,在doPost(HttpServletRequest request, HttpServletResponse response){...}引用
session超时设置
1) web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app>
...
<session-config>
<session-timeout>30</session-timeout> <!-- 单位为分钟,例如30分钟 -->
</session-config>
</web-app>
2) Java
request.getSession().setMaxInactiveInterval(30*60); // 设置session失效时间(timeout),单位为秒
注: setMaxInactiveInterval() 比 web.xml 优先级高,如果两者同时设置则采用 setMaxInactiveInterval()
JSP 网页权限
JSP 网页权限,有两种配置方式:
1) include 文件
如: 验证文件 logincheck.jsp
[html] view plain copy
print
?
- <%
- if(session.getAttribute(“userinfo”) == null) {
- %>
- <script type=“text/javascript” language=“javascript”>
- alert(“您还没有登录,请登录…”);
- window.document.location.href=“userlogin.html”;
- </script>
- <%
- }
- %>
<%
if(session.getAttribute("userinfo") == null) {
%>
<script type="text/javascript" language="javascript">
alert("您还没有登录,请登录...");
window.document.location.href="userlogin.html";
</script>
<%
}
%>
在需要验证的jsp网页起始位置,包含 logincheck.jsp , 例如在需要验证的jsp网页 page111.jsp 中添加
<%@ include file="logincheck.jsp" %>
2) filter 过滤
首先,在web.xml配置文件中设置过滤页
[html] view plain copy
print
?
- <filter>
- <filter-name>LoginFilter</filter-name>
- <filter-class>com.homer.LoginFilter</filter-class>
- </filter>
- <filter-mapping>
- <filter-name>LoginFilter</filter-name>
- <url-pattern>/page222.jsp</url-pattern>
- </filter-mapping>
<filter>
<filter-name>LoginFilter</filter-name>
<filter-class>com.homer.LoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>LoginFilter</filter-name>
<url-pattern>/page222.jsp</url-pattern>
</filter-mapping>
注: 目前配置方式仅仅是在用户访问page222.jsp的时候才走过滤器,也可以配置/*, /user/*等目录进行批量网页过滤
然后,在 LoginFilter.java(web.xml配置文件中的com.homer.LoginFilter)文件中, 进行过滤验证:
[java] view plain copy
print
?
- public class LoginFilter implements
- @Override
- public void init(FilterConfig arg0) throws
- }
- @Override
- public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws
- HttpServletRequest request = (HttpServletRequest)arg0;
- HttpServletResponse response = (HttpServletResponse)arg1;
- HttpSession session = request.getSession();
- if(session.getAttribute("userinfo") == null) {
- "utf-8");
- PrintWriter out = response.getWriter();
- "<script>alert('您还没有登录,请登录...'); window.location='userlogin.html' </script>");
- out.flush();
- out.close();
- // request.setAttribute("loginError", "您还没有登录,请登录...");
- // request.getRequestDispatcher("userlogin.html").forward(request, response);
- else
- arg2.doFilter(request, response);
- }
- }
- @Override
- public void
- }
- }
public class LoginFilter implements Filter {
@Override
public void init(FilterConfig arg0) throws ServletException {
}
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest)arg0;
HttpServletResponse response = (HttpServletResponse)arg1;
HttpSession session = request.getSession();
if(session.getAttribute("userinfo") == null) {
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
out.print("<script>alert('您还没有登录,请登录...'); window.location='userlogin.html' </script>");
out.flush();
out.close();
// request.setAttribute("loginError", "您还没有登录,请登录...");
// request.getRequestDispatcher("userlogin.html").forward(request, response);
} else {
arg2.doFilter(request, response);
}
}
@Override
public void destroy() {
}
}
用户登录验证
用户登录验证,有两种方式:JSP网页前端和Java(Serlvet)后台
1) JSP网页前端验证(login.jsp)
[html] view plain copy
print
?
- <%
- USERNAME = “admin”;
- USERPWD = “123456”;
- request.setCharacterEncoding(“utf8”);
- userName = request.getParameter(“username”).trim();
- userPwd = request.getParameter(“userpwd”).trim();
- userName == null || userPwd
- response.sendRedirect(“userlogin.html”);
- return;
- }
- if(userName.equals(USERNAME) && userPwd.equals(USERPWD)) {
- session.setMaxInactiveInterval(30*60); // 设置session失效时间(timeout),单位为秒
- session.setAttribute(“userinfo”, USERNAME); // 用户名和密码正确,保存登录信息
- response.sendRedirect(“page111.jsp”);
- } else {
- response.sendRedirect(“userlogin.html”); // 用户名和密码错误,跳转到登录界面
- }
- %>
<%
String USERNAME = "admin";
String USERPWD = "123456";
request.setCharacterEncoding("utf8");
String userName = request.getParameter("username").trim();
String userPwd = request.getParameter("userpwd").trim();
if(userName == null || userPwd == null){
response.sendRedirect("userlogin.html");
return;
}
if(userName.equals(USERNAME) && userPwd.equals(USERPWD)) {
session.setMaxInactiveInterval(30*60); // 设置session失效时间(timeout),单位为秒
session.setAttribute("userinfo", USERNAME); // 用户名和密码正确,保存登录信息
response.sendRedirect("page111.jsp");
} else {
response.sendRedirect("userlogin.html"); // 用户名和密码错误,跳转到登录界面
}
%>
2) Java(Serlvet)后台验证(Login.java)
[java] view plain copy
print
?
- public class Login extends
- private static final long
- private final static String USERNAME = “admin”;
- private final static String USERPWD = “123456”;
- @Override
- protected void
- }
- @Override
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws
- ”utf-8”);
- ”username”).trim();
- ”userpwd”).trim();
- if(userName == null || userPwd == null) {
- ”userlogin.html”);
- }
- if(userName.equals(USERNAME) && userPwd.equals(USERPWD)) {
- 30*60); // 设置session失效时间(timeout),单位为秒
- ”userinfo”, USERNAME); // 用户名和密码正确,保存登录信息(获得session与jsp网页稍有不同)
- ”page111.jsp”);
- else
- ”userlogin.html”); // 用户名和密码错误,跳转到登录界面
- }
- }
- }
public class Login extends HttpServlet {
private static final long serialVersionUID = 1L;
private final static String USERNAME = "admin";
private final static String USERPWD = "123456";
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
String userName = request.getParameter("username").trim();
String userPwd = request.getParameter("userpwd").trim();
if(userName == null || userPwd == null) {
response.sendRedirect("userlogin.html");
}
if(userName.equals(USERNAME) && userPwd.equals(USERPWD)) {
request.getSession().setMaxInactiveInterval(30*60); // 设置session失效时间(timeout),单位为秒
request.getSession().setAttribute("userinfo", USERNAME); // 用户名和密码正确,保存登录信息(获得session与jsp网页稍有不同)
response.sendRedirect("page111.jsp");
} else {
response.sendRedirect("userlogin.html"); // 用户名和密码错误,跳转到登录界面
}
}
}
其中,需要在web.xml配置Servlet映射关系:
[html] view plain copy
print
?
- <servlet>
- <description>Login</description>
- <display-name>Login</display-name>
- <servlet-name>Login</servlet-name>
- <servlet-class>com.homer.Login</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>Login</servlet-name>
- <url-pattern>/login</url-pattern>
- </servlet-mapping>
<servlet>
<description>Login</description>
<display-name>Login</display-name>
<servlet-name>Login</servlet-name>
<servlet-class>com.homer.Login</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Login</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
注: Login.java映射成对样网页为/login,login可以在网页(html和jsp)form中指定,如 action=”login”
用户登录界面
用户登录界面,是用户在访问整个网站之前需要访问的,因此最好制作成静态页面HTML,本例如:userlogin.html
[html] view plain copy
print
?
- <!DOCTYPE html PUBLIC ”-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd”>
- <html>
- <head>
- <meta http-equiv=“Content-Type” content=“text/html; charset=UTF-8”>
- <title>userlogin.html</title>
- </head>
- <body>
- <center>
- <form method=“POST” name=“form1” action=“login”>
- <table>
- <tr>
- <td>UserName : </td>
- <td><input type=“text” name=“username” /></td>
- </tr>
- <tr>
- <td>UserPwd : </td>
- <td><input type=“text” name=“userpwd” /></td>
- </tr>
- <tr>
- <td colspan=“2” align=“center”>
- <input type=“submit” name=“btnSubmit” value=“login”/>
- </td>
- </tr>
- </table>
- </form>
- </center>
- </body>
- </html>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>userlogin.html</title>
</head>
<body>
<center>
<form method="POST" name="form1" action="login">
<table>
<tr>
<td>UserName : </td>
<td><input type="text" name="username" /></td>
</tr>
<tr>
<td>UserPwd : </td>
<td><input type="text" name="userpwd" /></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" name="btnSubmit" value="login"/>
</td>
</tr>
</table>
</form>
</center>
</body>
</html>
注: 此时 action="login" 默认对应Java(Servlet)中对应的 Login.java 进行验证解析
userlogin.html 针对上述两种 用户登录验证 方式,分别提供了两种POST方式:
1) 针对JSP方式
<form method="POST" name="form1" action="login.jsp">
2) 针对Java(Servlet)方式
<form method="POST" name="form1" action="login">
本示例代码说明
本示例主要代码结构图如下:
1) head.jsp 和 foot.jsp
统一控制jsp页面的上,下部内容,类似ASP.NET的模板
2) index.jsp
网站默认的登录页面,本示例主要用作跳转到登录页面 userlogin.html :
<script type="text/javascript" language="javascript">
window.location="userlogin.html";
</script>
3)userlogin.html
静态登录页面,见上面 用户登录界面 的所示
4) login.jsp 和 Login.java
login.jsp 网页验证用户登录信息(用户名和密码),见上面的 用户登录验证 方式1
Login.java 后台验证用户登录信息(用户名和密码),见上面的 用户登录验证 方式2
5) logincheck.jsp 和 LoginFilter.java
logincheck.jsp 网页验证用户是否已登录,见上面的 JSP 网页权限 方式1
LoginFilter.java 后台验证用户是否已登录,见上面的 JSP 网页权限 方式2
6) page111.jsp, page222.jsp, page333.jsp
(1) page111.jsp
采用 logincheck.jsp 网页权限验证,其代码内容为:
<%@ include file="logincheck.jsp" %> <%@ include file="head.jsp" %> I am page111.jsp <%@ include file="foot.jsp" %>
(2) page222.jsp
采用 logincheck.jsp 网页权限验证,其代码内容为:
<%@ include file="head.jsp" %>
I am page222.jsp
<%@ include file="foot.jsp" %>
注:采用filter过滤方式,在web.xml配置文件中设置了哪些jsp网页需要过滤,见上面 JSP 网页权限 —》 2) filter 过滤
(3) page333.jsp 采用 logincheck.jsp 网页权限验证,其代码内容为:<%@ include file="head.jsp" %>
I am page333.jsp
<%@ include file="foot.jsp" %>
注: 没有任何验证,用户可以直接输入网址进行访问
7) logout.jsp
用户退出时,注销session中的登录信息
<% session.invalidate(); response.sendRedirect(""); %>
本示例运行界面:
1) 登录界面
userlogin.html
2) JSP 页面验证
logincheck.jsp (或LoginFilter.java)页面访问前进行登录验证
3) 验证通过访问JSP页面
login.jsp(或Login.java)用户登录后才可以正常访问JSP页面
参考推荐:
jsp安全性问题,当别人知道某个jsp文件的网址后就可以跳过登陆页面直接访问该jsp文件了,这样无法禁止外部无权限用户的访问。本文讨论内容是通过权限验证的用户,才可以访问特定的页面。
JSP 页面验证,涉及到的知识有Session, 网页权限, 用户验证等。
session对象
session对象用来存储有关用户会话的所有信息,一个会话就是浏览器与服务器之间的一次通话,它包含浏览器与服务器之间的多次请求、响应过程。session是JSP内置对象,与浏览器一一对应,允许用户存储和提取会话状态的信息,信息保存在服务器端。
session信息获取
1) JSP
session.setAttribute("userinfo", USERNAME); // session保存登录信息和用户名
2) Java(Servlet)
request.getSession().setAttribute("userinfo", USERNAME); // session保存登录信息和用户名
其中,request为HttpServletRequest对象,在doPost(HttpServletRequest request, HttpServletResponse response){...}引用
session超时设置
1) web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app>
...
<session-config>
<session-timeout>30</session-timeout> <!-- 单位为分钟,例如30分钟 -->
</session-config>
</web-app>
2) Java
request.getSession().setMaxInactiveInterval(30*60); // 设置session失效时间(timeout),单位为秒
注: setMaxInactiveInterval() 比 web.xml 优先级高,如果两者同时设置则采用 setMaxInactiveInterval()
JSP 网页权限
JSP 网页权限,有两种配置方式:
1) include 文件
如: 验证文件 logincheck.jsp
[html] view plain copy
print
?
<%
if(session.getAttribute("userinfo") == null) {
%>
<script type="text/javascript" language="javascript">
alert("您还没有登录,请登录...");
window.document.location.href="userlogin.html";
</script>
<%
}
%>
<%
if(session.getAttribute("userinfo") == null) {
%>
<script type="text/javascript" language="javascript">
alert("您还没有登录,请登录...");
window.document.location.href="userlogin.html";
</script>
<%
}
%>
1. <%
2. if(session.getAttribute(“userinfo”) == null) {
3. %>
4. <script type=“text/javascript” language=“javascript”>
5. alert(“您还没有登录,请登录…”);
6. window.document.location.href=“userlogin.html”;
7. </script>
8. <%
9. }
10. %>
<%
if(session.getAttribute("userinfo") == null) {
%>
<script type="text/javascript" language="javascript">
alert("您还没有登录,请登录...");
window.document.location.href="userlogin.html";
</script>
<%
}
%>
在需要验证的jsp网页起始位置,包含 logincheck.jsp , 例如在需要验证的jsp网页 page111.jsp 中添加
<%@ include file="logincheck.jsp" %>
2) filter 过滤
首先,在web.xml配置文件中设置过滤页
[html] view plain copy
print
?
1. <filter>
2. <filter-name>LoginFilter</filter-name>
3. <filter-class>com.homer.LoginFilter</filter-class>
4. </filter>
5.
6. <filter-mapping>
7. <filter-name>LoginFilter</filter-name>
8. <url-pattern>/page222.jsp</url-pattern>
9. </filter-mapping>
<filter>
<filter-name>LoginFilter</filter-name>
<filter-class>com.homer.LoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>LoginFilter</filter-name>
<url-pattern>/page222.jsp</url-pattern>
</filter-mapping>
注: 目前配置方式仅仅是在用户访问page222.jsp的时候才走过滤器,也可以配置/*, /user/*等目录进行批量网页过滤
然后,在 LoginFilter.java(web.xml配置文件中的com.homer.LoginFilter)文件中, 进行过滤验证:
[java] view plain copy
print
?
1. public class LoginFilter implements
2. @Override
3. public void init(FilterConfig arg0) throws
4. }
5.
6. @Override
7. public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws
8. HttpServletRequest request = (HttpServletRequest)arg0;
9. HttpServletResponse response = (HttpServletResponse)arg1;
10.
11. HttpSession session = request.getSession();
12. if(session.getAttribute("userinfo") == null) {
13. "utf-8");
14. PrintWriter out = response.getWriter();
15. "<script>alert('您还没有登录,请登录...'); window.location='userlogin.html' </script>");
16. out.flush();
17. out.close();
18.
19. // request.setAttribute("loginError", "您还没有登录,请登录...");
20. // request.getRequestDispatcher("userlogin.html").forward(request, response);
21. else
22. arg2.doFilter(request, response);
23. }
24. }
25.
26. @Override
27. public void
28. }
- }
public class LoginFilter implements Filter {
@Override
public void init(FilterConfig arg0) throws ServletException {
}
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest)arg0;
HttpServletResponse response = (HttpServletResponse)arg1;
HttpSession session = request.getSession();
if(session.getAttribute("userinfo") == null) {
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
out.print("<script>alert('您还没有登录,请登录...'); window.location='userlogin.html' </script>");
out.flush();
out.close();
// request.setAttribute("loginError", "您还没有登录,请登录...");
// request.getRequestDispatcher("userlogin.html").forward(request, response);
} else {
arg2.doFilter(request, response);
}
}
@Override
public void destroy() {
}
}
用户登录验证
用户登录验证,有两种方式:JSP网页前端和Java(Serlvet)后台
1) JSP网页前端验证(login.jsp)
[html] view plain copy
print
?
<%
String USERNAME = "admin";
String USERPWD = "123456";
request.setCharacterEncoding("utf8");
String userName = request.getParameter("username").trim();
String userPwd = request.getParameter("userpwd").trim();
if(userName == null || userPwd == null){
response.sendRedirect("userlogin.html");
return;
}
if(userName.equals(USERNAME) && userPwd.equals(USERPWD)) {
session.setMaxInactiveInterval(30*60); // 设置session失效时间(timeout),单位为秒
session.setAttribute("userinfo", USERNAME); // 用户名和密码正确,保存登录信息
response.sendRedirect("page111.jsp");
} else {
response.sendRedirect("userlogin.html"); // 用户名和密码错误,跳转到登录界面
}
%>
<%
String USERNAME = "admin";
String USERPWD = "123456";
request.setCharacterEncoding("utf8");
String userName = request.getParameter("username").trim();
String userPwd = request.getParameter("userpwd").trim();
if(userName == null || userPwd == null){
response.sendRedirect("userlogin.html");
return;
}
if(userName.equals(USERNAME) && userPwd.equals(USERPWD)) {
session.setMaxInactiveInterval(30*60); // 设置session失效时间(timeout),单位为秒
session.setAttribute("userinfo", USERNAME); // 用户名和密码正确,保存登录信息
response.sendRedirect("page111.jsp");
} else {
response.sendRedirect("userlogin.html"); // 用户名和密码错误,跳转到登录界面
}
%>
1. <%
2. USERNAME = “admin”;
3. USERPWD = “123456”;
4.
5. request.setCharacterEncoding(“utf8”);
6.
7. userName = request.getParameter(“username”).trim();
8. userPwd = request.getParameter(“userpwd”).trim();
9.
10. userName == null || userPwd
11. response.sendRedirect(“userlogin.html”);
12. return;
13. }
14.
15. if(userName.equals(USERNAME) && userPwd.equals(USERPWD)) {
16. session.setMaxInactiveInterval(30*60); // 设置session失效时间(timeout),单位为秒
17. session.setAttribute(“userinfo”, USERNAME); // 用户名和密码正确,保存登录信息
18. response.sendRedirect(“page111.jsp”);
19. } else {
20. response.sendRedirect(“userlogin.html”); // 用户名和密码错误,跳转到登录界面
21. }
22. %>
2) Java(Serlvet)后台验证(Login.java)
[java] view plain copy
print
?
1. public class Login extends
2. private static final long
3.
4. private final static String USERNAME = “admin”;
5. private final static String USERPWD = “123456”;
6.
7. @Override
8. protected void
9. }
10.
11. @Override
12. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws
13. ”utf-8”);
14.
15. ”username”).trim();
16. ”userpwd”).trim();
17.
18. if(userName == null || userPwd == null) {
19. ”userlogin.html”);
20. }
21.
22. if(userName.equals(USERNAME) && userPwd.equals(USERPWD)) {
23. 30*60); // 设置session失效时间(timeout),单位为秒
24. ”userinfo”, USERNAME); // 用户名和密码正确,保存登录信息(获得session与jsp网页稍有不同)
25. ”page111.jsp”);
26. else
27. ”userlogin.html”); // 用户名和密码错误,跳转到登录界面
28. }
29. }
30. }
public class Login extends HttpServlet {
private static final long serialVersionUID = 1L;
private final static String USERNAME = "admin";
private final static String USERPWD = "123456";
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
String userName = request.getParameter("username").trim();
String userPwd = request.getParameter("userpwd").trim();
if(userName == null || userPwd == null) {
response.sendRedirect("userlogin.html");
}
if(userName.equals(USERNAME) && userPwd.equals(USERPWD)) {
request.getSession().setMaxInactiveInterval(30*60); // 设置session失效时间(timeout),单位为秒
request.getSession().setAttribute("userinfo", USERNAME); // 用户名和密码正确,保存登录信息(获得session与jsp网页稍有不同)
response.sendRedirect("page111.jsp");
} else {
response.sendRedirect("userlogin.html"); // 用户名和密码错误,跳转到登录界面
}
}
}
其中,需要在web.xml配置Servlet映射关系:
[html] view plain copy
print
?
1. <servlet>
2. <description>Login</description>
3. <display-name>Login</display-name>
4. <servlet-name>Login</servlet-name>
5. <servlet-class>com.homer.Login</servlet-class>
6. </servlet>
7.
8. <servlet-mapping>
9. <servlet-name>Login</servlet-name>
10. <url-pattern>/login</url-pattern>
11. </servlet-mapping>
<servlet>
<description>Login</description>
<display-name>Login</display-name>
<servlet-name>Login</servlet-name>
<servlet-class>com.homer.Login</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Login</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
注: Login.java映射成对样网页为/login,login可以在网页(html和jsp)form中指定,如 action=”login”
用户登录界面
用户登录界面,是用户在访问整个网站之前需要访问的,因此最好制作成静态页面HTML,本例如:userlogin.html
[html] view plain copy
print
?
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>userlogin.html</title>
</head>
<body>
<center>
<form method="POST" name="form1" action="login">
<table>
<tr>
<td>UserName : </td>
<td><input type="text" name="username" /></td>
</tr>
<tr>
<td>UserPwd : </td>
<td><input type="text" name="userpwd" /></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" name="btnSubmit" value="login"/>
</td>
</tr>
</table>
</form>
</center>
</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>userlogin.html</title>
</head>
<body>
<center>
<form method="POST" name="form1" action="login">
<table>
<tr>
<td>UserName : </td>
<td><input type="text" name="username" /></td>
</tr>
<tr>
<td>UserPwd : </td>
<td><input type="text" name="userpwd" /></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" name="btnSubmit" value="login"/>
</td>
</tr>
</table>
</form>
</center>
</body>
</html>
1. <!DOCTYPE html PUBLIC ”-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd”>
2. <html>
3. <head>
4. <meta http-equiv=“Content-Type” content=“text/html; charset=UTF-8”>
5. <title>userlogin.html</title>
6. </head>
7.
8. <body>
9. <center>
10.
11. <form method=“POST” name=“form1” action=“login”>
12. <table>
13. <tr>
14. <td>UserName : </td>
15. <td><input type=“text” name=“username” /></td>
16. </tr>
17. <tr>
18. <td>UserPwd : </td>
19. <td><input type=“text” name=“userpwd” /></td>
20. </tr>
21. <tr>
22. <td colspan=“2” align=“center”>
23. <input type=“submit” name=“btnSubmit” value=“login”/>
24. </td>
25. </tr>
26. </table>
27. </form>
28.
29. </center>
30. </body>
31.
32. </html>
注: 此时 action="login" 默认对应Java(Servlet)中对应的 Login.java 进行验证解析
userlogin.html 针对上述两种 用户登录验证 方式,分别提供了两种POST方式:
1) 针对JSP方式
<form method="POST" name="form1" action="login.jsp">
2) 针对Java(Servlet)方式
<form method="POST" name="form1" action="login">
本示例代码说明
本示例主要代码结构图如下:
1) head.jsp 和 foot.jsp
统一控制jsp页面的上,下部内容,类似ASP.NET的模板
2) index.jsp
网站默认的登录页面,本示例主要用作跳转到登录页面 userlogin.html :
<script type="text/javascript" language="javascript">
window.location="userlogin.html";
</script>
3)userlogin.html
静态登录页面,见上面 用户登录界面 的所示
4) login.jsp 和 Login.java
login.jsp 网页验证用户登录信息(用户名和密码),见上面的 用户登录验证 方式1
Login.java 后台验证用户登录信息(用户名和密码),见上面的 用户登录验证 方式2
5) logincheck.jsp 和 LoginFilter.java
logincheck.jsp 网页验证用户是否已登录,见上面的 JSP 网页权限 方式1
LoginFilter.java 后台验证用户是否已登录,见上面的 JSP 网页权限 方式2
6) page111.jsp, page222.jsp, page333.jsp
(1) page111.jsp
采用 logincheck.jsp 网页权限验证,其代码内容为:
<%@ include file="logincheck.jsp" %> <%@ include file="head.jsp" %> I am page111.jsp <%@ include file="foot.jsp" %>
(2) page222.jsp
采用 logincheck.jsp 网页权限验证,其代码内容为:
<%@ include file="head.jsp" %>
I am page222.jsp
<%@ include file="foot.jsp" %>
注:采用filter过滤方式,在web.xml配置文件中设置了哪些jsp网页需要过滤,见上面 JSP 网页权限 —》 2) filter 过滤
(3) page333.jsp 采用 logincheck.jsp 网页权限验证,其代码内容为:<%@ include file="head.jsp" %>
I am page333.jsp
<%@ include file="foot.jsp" %>
注: 没有任何验证,用户可以直接输入网址进行访问
7) logout.jsp
用户退出时,注销session中的登录信息
<%
session.invalidate();
response.sendRedirect("");
%>
本示例运行界面:
1) 登录界面
userlogin.html
2) JSP 页面验证
logincheck.jsp (或LoginFilter.java)页面访问前进行登录验证
3) 验证通过访问JSP页面
login.jsp(或Login.java)用户登录后才可以正常访问JSP页面