采用Filter统一验证是否登录

        当我们访问系统的其他页面的时候, 需要判断是否是登录中的用户, 不然我们直接输入链接地址就可以直接链接到我们的主页面, 即使没有登录.  对于这个问题的解决, 采用Filter统一验证, 我们在调用的时候先调用Filter, 让Filter判断是否已经登录.

        Filter统一验证代码:

public class AuthFilter implements Filter, javax.servlet.Filter {

	@Override
	public void destroy() {
		

	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		
			HttpServletRequest req = (HttpServletRequest)request;
			HttpServletResponse res = (HttpServletResponse)response;
			//基于http协议的servlet
			
			//如果没有登录.
			String requestURI = req.getRequestURI().substring(req.getRequestURI().indexOf("/",1),req.getRequestURI().length());
		
			//如果第一次请求不为登录页面,则进行检查用session内容,如果为登录页面就不去检查.
			if(!"/login.jsp".equals(requestURI) && !"/servlet/AuthImageServlet".equals(requestURI))
			{
				//取得session. 如果没有session则自动会创建一个, 我们用false表示没有取得到session则设置为session为空.
				HttpSession session = req.getSession(false);
				//如果session中没有任何东西.
				if(session == null ||session.getAttribute("user_info")==null)
				{
					res.sendRedirect(req.getContextPath() + "/login.jsp");
					//返回
					return;
				}
				
			}
			//session中的内容等于登录页面, 则可以继续访问其他区资源.
			chain.doFilter(req, res);
	}
}


        在web.xml中配置Filter:

	<filter>
		<filter-name>AuthFilter</filter-name>
		<filter-class>com.bjpowernode.drp.util.filter.AuthFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>AuthFilter</filter-name>
		<url-pattern>*.jsp</url-pattern>
	</filter-mapping>
	
	<filter-mapping>
		<filter-name>AuthFilter</filter-name>
		<url-pattern>/servlet/*</url-pattern>
	</filter-mapping>


        这样在没有登录系统的时候, 会自动的跳转到我们的登录页面. 并且在没有登录的情况下, 即使链接到其他的页面, 也会跳转到登录页面.

 

 

你可能感兴趣的:(采用Filter统一验证是否登录)