JavaWeb Filter 检查登录

来源:互联网 发布:淘宝账号怎么升级心 编辑:程序博客网 时间:2024/06/05 22:43

原作者:尚硅谷-佟刚


检查登录的过滤器

程序目录结构


这里写图片描述


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
这里写图片描述