JavaWeb Filter 检查登录

原作者:尚硅谷-佟刚


检查登录的过滤器

程序目录结构


这里写图片描述


web.xml

<!-- 存放到session中的键 -->
    <context-param>
      <param-name>sessionKey</param-name>
      <param-value>SESSIONKEY</param-value>
    </context-param>

    <!-- 重定向的页面 -->
    <context-param>
      <param-name>redirectPage</param-name>
      <param-value>/checklist/login.jsp</param-value>
    </context-param>

    <!-- 不需要拦截的列表 -->
    <context-param>
      <param-name>unCheckedUrls</param-name>
      <param-value>/checklist/login.jsp,/checklist/doLogin.jsp,/checklist/list.jsp,/checklist/a.jsp</param-value>
    </context-param>

    <filter>
       <filter-name>loginFilter</filter-name>
       <filter-class>com.atweihai.javaweb.filter.LoginFilter</filter-class>
    </filter>

    <!-- Filter过滤器 拦截的列表 -->
    <filter-mapping>
       <filter-name>loginFilter</filter-name>
       <url-pattern>/checklist/*</url-pattern>
    </filter-mapping>

login.jsp

这里写图片描述

doLogin.jsp

这里写图片描述

list.jsp

这里写图片描述

a.jsp(b.jsp,c.jsp等类似)
这里写图片描述


自定义实现Filter接口的HttpFilter类

package com.atweihai.javaweb.filter;

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.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *自定义实现Filter接口的HttpFilter类 
 */
public abstract class HttpFilter implements Filter{

    private FilterConfig filterConfig;

    public FilterConfig getFilterConfig() {
        return filterConfig;
    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
             this.filterConfig=filterConfig;
             init();
    }

    //供子类初始化
    protected void init() throws ServletException {}


    @Override
    public void  doFilter(ServletRequest req, ServletResponse resp, FilterChain filterChain) throws IOException, ServletException {
             try {
                 HttpServletRequest request=(HttpServletRequest) req;
                 HttpServletResponse response=(HttpServletResponse) resp;
                 doFilter(request, response, filterChain);
            } catch (Exception e) {
                e.printStackTrace();
            }
    }

    //供子类进行重写
    protected abstract void  doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws IOException, ServletException;

    @Override
    public void destroy() {}

}

LoginFilter.java

package com.atweihai.javaweb.filter;


import java.io.IOException;
import java.util.Arrays;
import java.util.List;

import javax.servlet.FilterChain;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class LoginFilter extends HttpFilter{


    String sessionKey;
    String redirectPage;
    String unCheckedUrls;

    //从web.xml中获取对应的值
    @Override
    protected void init() throws ServletException {
            ServletContext servletContext=getFilterConfig().getServletContext();
            sessionKey=servletContext.getInitParameter("sessionKey");
            redirectPage=servletContext.getInitParameter("redirectPage");
            unCheckedUrls=servletContext.getInitParameter("unCheckedUrls");
    }

    @Override
    public void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws IOException, ServletException {
        String servletPath=request.getServletPath();

        //获取不需要检查的页面列表
        List<String> unUrls=Arrays.asList(unCheckedUrls.split(","));

        //判断不需要检查的页面 
        if(unUrls.contains(servletPath)){
            filterChain.doFilter(request, response);
            return;
        }

        //判断是否登陆
        HttpSession session=request.getSession();
        Object sessionValue=session.getAttribute(sessionKey);
        if(sessionValue!=null){
            filterChain.doFilter(request, response);
            return;
        }
        //重定向到登录页面
        response.sendRedirect(request.getContextPath()+redirectPage);
    }

}

页面运行效果


login.jsp

这里写图片描述

list.jsp
这里写图片描述

d.jsp
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值