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

  <filter>
    <filter-name>LoginFilter</filter-name>
    <filter-class>com.blog.dong.LoginFilter</filter-class>
  </filter>
  
  <filter-mapping>
    <filter-name>LoginFilter</filter-name>
    <url-pattern>/BlogCenter.html</url-pattern>
  </filter-mapping>

三、结果

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

页面将会跳转到登录页

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大何向东流1997

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值