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

?



  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.     }  
  29. }  
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

?



  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. %>
<%
    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

?



  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

?



  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>
<!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



java 写一个根据用户登录名和密码是否正确判断用户是否存在的函数 javaweb判断用户名和密码_对象




2) JSP 页面验证



logincheck.jsp (或LoginFilter.java)页面访问前进行登录验证



java 写一个根据用户登录名和密码是否正确判断用户是否存在的函数 javaweb判断用户名和密码_jsp_02




3) 验证通过访问JSP页面



login.jsp(或Login.java)用户登录后才可以正常访问JSP页面



java 写一个根据用户登录名和密码是否正确判断用户是否存在的函数 javaweb判断用户名和密码_session_03





源码下载








参考推荐:



跳过登陆页面直接访问该jsp文件



如何实现JSP页面的访问控制



session 保存登录信息




Application Session Cookie区别




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.     }
  1. }  
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



java 写一个根据用户登录名和密码是否正确判断用户是否存在的函数 javaweb判断用户名和密码_对象




2) JSP 页面验证



logincheck.jsp (或LoginFilter.java)页面访问前进行登录验证



java 写一个根据用户登录名和密码是否正确判断用户是否存在的函数 javaweb判断用户名和密码_jsp_02




3) 验证通过访问JSP页面



login.jsp(或Login.java)用户登录后才可以正常访问JSP页面



java 写一个根据用户登录名和密码是否正确判断用户是否存在的函数 javaweb判断用户名和密码_session_03