分享

JSP 页面访问用户验证

 崋果山 2017-08-16

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


    ...
    
        30           
    

2) Java
request.getSession().setMaxInactiveInterval(30*60);		// 设置session失效时间(timeout),单位为秒
注: setMaxInactiveInterval() 比 web.xml 优先级高,如果两者同时设置则采用 setMaxInactiveInterval()


JSP 网页权限
JSP 网页权限,有两种配置方式: 
1) include 文件
如: 验证文件 logincheck.jsp
  1. <%  
  2.     if(session.getAttribute("userinfo") == null) {  
  3. %>  
  4.         ");  
  5.             out.flush();  
  6.             out.close();  
  7.   
  8. //          request.setAttribute("loginError", "您还没有登录,请登录...");  
  9. //          request.getRequestDispatcher("userlogin.html").forward(request, response);  
  10.         } else {  
  11.             arg2.doFilter(request, response);  
  12.         }  
  13.     }  
  14.   
  15.     @Override  
  16.     public void destroy() {  
  17.     }  
  18. }  


用户登录验证
用户登录验证,有两种方式:JSP网页前端和Java(Serlvet)后台
1) JSP网页前端验证(login.jsp
  1. <%  
  2.     String USERNAME = "admin";  
  3.     String USERPWD = "123456";  
  4.       
  5.     request.setCharacterEncoding("utf8");  
  6.   
  7.     String userName = request.getParameter("username").trim();  
  8.     String userPwd = request.getParameter("userpwd").trim();  
  9.       
  10.     if(userName == null || userPwd == null){  
  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
  1. public class Login extends HttpServlet {  
  2.     private static final long serialVersionUID = 1L;  
  3.       
  4.     private final static String USERNAME = "admin";  
  5.     private final static String USERPWD = "123456";  
  6.       
  7.     @Override  
  8.     protected void doGet(HttpServletRequest request, HttpServletResponse response) {  
  9.     }  
  10.   
  11.     @Override  
  12.     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  
  13.         request.setCharacterEncoding("utf-8");  
  14.           
  15.         String userName = request.getParameter("username").trim();  
  16.         String userPwd = request.getParameter("userpwd").trim();  
  17.           
  18.         if(userName == null || userPwd == null) {  
  19.             response.sendRedirect("userlogin.html");  
  20.         }  
  21.           
  22.         if(userName.equals(USERNAME) && userPwd.equals(USERPWD)) {  
  23.             request.getSession().setMaxInactiveInterval(30*60);     // 设置session失效时间(timeout),单位为秒  
  24.             request.getSession().setAttribute("userinfo", USERNAME);        // 用户名和密码正确,保存登录信息(获得session与jsp网页稍有不同)  
  25.             response.sendRedirect("page111.jsp");  
  26.         } else {  
  27.             response.sendRedirect("userlogin.html");            // 用户名和密码错误,跳转到登录界面  
  28.         }  
  29.     }  
  30. }  
其中,需要在web.xml配置Servlet映射关系:
  1.   
  2.     Login  
  3.     Login  
  4.     Login  
  5.     com.homer.Login  
  6.   
  7.   
  8.   
  9.     Login  
  10.     /login  
  11.   
注: Login.java映射成对样网页为/login,login可以在网页(html和jsp)form中指定,如 action="login"


用户登录界面
用户登录界面,是用户在访问整个网站之前需要访问的,因此最好制作成静态页面HTML,本例如:userlogin.html
  1.   
  2.   
  3.   
  4.   
  5.   
  6.   
  7.   
  8.   
  9.   
  10.   
  11.   
  12.   
  13.     
  14.   
  15.         
  16.   
  17.         
  18.   
  19.     
  20.   
  21.     
  22.   
  23.         
  24.   
  25.         
  26.   
  27.     
  28.   
  29.     
  30.   
  31.           
  32.               
  33.           
  34.     
  35.   
  36. UserName : 
    UserPwd : 
      
  37.   
  38.   
  39.   
  40.   
  41.   
  42.   
注: 此时 action="login" 默认对应Java(Servlet)中对应的 Login.java 进行验证解析
 

userlogin.html 针对上述两种 用户登录验证 方式,分别提供了两种POST方式:
1) 针对JSP方式
2) 针对Java(Servlet)方式



本示例代码说明
本示例主要代码结构图如下:

1) head.jsp 和 foot.jsp 
统一控制jsp页面的上,下部内容,类似ASP.NET的模板

2) index.jsp
网站默认的登录页面,本示例主要用作跳转到登录页面  userlogin.html 
	

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("http://blog.csdn.net/sunboy_2050/article/details/8032693");
	%>


本示例运行界面:
1) 登录界面
 userlogin.html 


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


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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多