您的位置:首页 > 其它

如果用户没有登陆直接通过url访问其它页面的解决办法

2014-01-21 15:25 281 查看
项目的登陆功能是模块差不多都做完时候才加上的,由于项目都是用框架做的,现在想增加登陆功能,如果用户直接通过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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐