JavaWeb学习笔记10——利用Filter避免未经登录进入主页

目录

一、上一节遗留问题及解决方法

二、关键代码

三、结果


一、上一节遗留问题及解决方法

在上一节中我们已经完成了两个页面,即登录页面和博客主页,但我们发现,在浏览器中直接用博客主页的url也能直接进入登陆后的页面,这并不是我们想要的结果。因此本节重点解决这一问题。

解决方法也很简单,利用Filter就可解决这一问题,在LoginServlet中如果我们验证通过了用户的登录,那我们可以在session中添加一个user数据作为标记。在Filter中我们再从session中获取user,如果获取到了,则代表我们是登陆进来的,正常执行后面的动作(即打开主页),否则跳转到登录页。最重要的一点是我们要在web.xml中配置Filter,将需要进行过滤的url添加进去(即将博客主页添加进去)

二、关键代码

LoginServlet.java

if(isLoing) {
			//这个字符串将会在js中被接收
			//1代表登录成功
			//2代表用户名或密码为空
			//3代表用户名或密码错误
			//若登陆成功,则将用户名存入session,后面在Fileter中进行检测,如果session中有相应数据,则证明用户是登陆进入的主页,而不是直接通过url进入。		
			request.getSession().setAttribute("user",Account);						
			out.write("1");
		}else if(Account==""||Password==""){
			out.write("2");
		}else {
			out.write("3");
		}
			out.close();

LoginFilter.java

package com.blog.dong;

import java.io.IOException;
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.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.catalina.User;

/**
 * Servlet Filter implementation class LoginFilter
 */
@WebFilter("/LoginFilter")
public class LoginFilter implements Filter {

    /**
     * Default constructor. 
     */
    public LoginFilter() {
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see Filter#destroy()
	 */
	public void destroy() {
		// TODO Auto-generated method stub
	}

	/**
	 * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
	 */
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		// TODO Auto-generated method stub
		// place your code here

		// pass the request along the filter chain
		HttpServletRequest httpServletRequest = (HttpServletRequest)request;
        HttpServletResponse httpServletResponse = (HttpServletResponse) response;

        HttpSession session = httpServletRequest.getSession();
        String user = (String)session.getAttribute("user");
        
        if(user!=null) {
        	//如果session中存在user这个数据,则继续下一步
        	chain.doFilter(httpServletRequest, httpServletResponse);
            return;
        }else {
        	//如果session中不存在user这个数据,则转到登录页面
        	httpServletResponse.sendRedirect("/BlogDong/Login.html");
            return;
        }

	}

	/**
	 * @see Filter#init(FilterConfig)
	 */
	public void init(FilterConfig fConfig) throws ServletException {
		// TODO Auto-generated method stub
	}

}

web.xml

  
    LoginFilter
    com.blog.dong.LoginFilter
  
  
  
    LoginFilter
    /BlogCenter.html
  

三、结果

当输入http://localhost:8080/BlogDong/BlogCenter.html

页面将会跳转到登录页

你可能感兴趣的:(JavaWeb)