1. 程式人生 > >如果使用者沒有登陸直接通過url訪問其它頁面的解決辦法

如果使用者沒有登陸直接通過url訪問其它頁面的解決辦法

  專案的登陸功能是模組差不多都做完時候才加上的,由於專案都是用框架做的,現在想增加登陸功能,如果使用者直接通過url訪問其它頁面時候則返回到登陸頁面。

這次的解決方案是不依賴任何框架和jar包。就用最基本的servlet完成。思路是:如果使用者登陸成功則把使用者登陸的資訊存在session裡面,在過濾器中獲取session中剛剛存的值,如果存在表示使用者登陸成功,如果沒有表明使用者不合法,返回到登陸頁面。

下面是過濾器原始碼:

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/*
 * 過濾器
 */
public class LoginFilter implements Filter {
	// 需要定義系統頁面訪問中可放行的連線
	private List<String> list = new ArrayList<String>();

	public void init(FilterConfig arg0) throws ServletException {
	    list.add("/index.jsp");
		list.add("/LoginAction.do");
	}

	public void doFilter(ServletRequest servletRequest,
			ServletResponse servletResponse, FilterChain chain)
			throws IOException, ServletException {
		HttpServletRequest request = (HttpServletRequest) servletRequest;
		HttpServletResponse response = (HttpServletResponse) servletResponse;
		// 1、獲取頁面中的訪問的路徑連線
		String path = request.getServletPath();
		if (list != null && list.contains(path)) {
			// 如果頁面中獲取的訪問連線於定義的可放行的連線一致,則放行
			chain.doFilter(request, response);
			return;
		}
		// 2、從session(flag)物件中獲取當前登入的使用者標誌
		Object flag = request.getSession().getAttribute("flag");
		if (flag != null) {
			// 如果從session中獲取的使用者物件不為空,則放行
			chain.doFilter(request, response);
			return;
		}
		// 如果不滿足條件1和2,則不能放行,回到系統的登入頁面
		response.sendRedirect(request.getContextPath() + "/");
	}

	public void destroy() {

	}
}

寫完過濾器後要在web.xml裡面配置一下。配置檔案:
<filter>
		<filter-name>filter</filter-name>
		<filter-class>com.dongbest.servlet.LoginFilter</filter-class>
	</filter>
	<!-- 攔截以.jsp結尾的連結 -->
	<filter-mapping>
		<filter-name>filter</filter-name>
		<url-pattern>*.jsp</url-pattern>
	</filter-mapping>
	<!-- 攔截以.do結尾的連結 -->
	<filter-mapping>
		<filter-name>filter</filter-name>
		<url-pattern>*.do</url-pattern>
	</filter-mapping>

	<!-- 設定session失效時間為30分鐘 -->
	<session-config>
		<session-timeout>30</session-timeout>
	</session-config>
把程式碼引到專案中後,該功能就可以完成了。原始碼已經上傳到資源裡面 下面是連結:http://download.csdn.net/detail/zl544434558/6870647