如何限制頁面必須在滿足某些條件后才能訪問?
比如下面這個例子:
這是一個簡單的登錄界面,輸入用戶名和密碼后,經過后台的驗證,進入到相應的主界面
按照常理來說是這樣的,但是我們發現,當我們直接訪問主界面main.jsp時,卻也可以直接進入到主界面,比如:(注意URL)
這就對系統造成了很大的安全隱患
怎么限制主界面必須在登錄之后才能訪問呢?其實也很簡單
首先,我們在后台驗證用戶正確登錄之后,跳轉到相應頁面之前,加入下面這行代碼
if (userService.valiUser(user)) {
session.setAttribute("user", user);
當用戶驗證成功,使用setAttribute方法講用戶名以實例user存放在會話之中。
然后我們新建一個islogin.jsp頁面,這個頁面不用做顯示,專門用於驗證訪問權限,如下:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ page import = "com.jkxy.service.userService" %>
<%@ page import = "com.jkxy.model.userTable" %>
<%
userTable user = (userTable)session.getAttribute("user"); if(user ==null) {
%>
<jsp:forward page="index.jsp"></jsp:forward>
<%
}
%>
從會話中取出user實例,如果user實例存在,說明該頁面之前已經驗證過登錄用戶。如果不存在,那么就直接跳轉到登錄界面。
然后你在你想要添加登錄訪問權限的頁面jsp代碼中相應位置插入代碼
<jsp:include page="islogin.jsp"></jsp:include>
這樣的話,當我們直接使用url訪問main.jsp界面就不好使了
還需要注意的是,在退出時需要清除用戶痕跡,不然session中會一直存儲user實例,所以在退出時還需要有以下動作:
session.removeAttribute("user");