java中filter如何使用?filter过滤器用法

TheDisguiser 2020-08-10 11:15:19 java常见问答 4654

一个完整的java项目是少不了权限控制功能的,不然谁都能进那还了得?实现权限控制功能就需要靠过滤器了,本篇文章就来看看如果实现过滤器吧。

示例1:检测用户是否登陆的过滤器

public class CheckLoginFilter implements Filter
{
    protected FilterConfig filterConfig = null;
    private String redirectURL = null;
    private List notCheckURLList = new ArrayList();
    private String sessionKey = null;
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException
    {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        HttpSession session = request.getSession();
        if (sessionKey == null)
        {
            filterChain.doFilter(request, response);
            return;
        }
        if ((!checkRequestURIIntNotFilterList(request)) && session.getAttribute(sessionKey) == null)
        {
            response.sendRedirect(request.getContextPath() + redirectURL);
            return;
        }
        filterChain.doFilter(servletRequest, servletResponse);
    }
    public void destroy()
    {
        notCheckURLList.clear();
    }
    private boolean checkRequestURIIntNotFilterList(HttpServletRequest request)
    {
        String uri = request.getServletPath() + (request.getPathInfo() == null ? "" : request.getPathInfo());
        return notCheckURLList.contains(uri);
    }
    public void init(FilterConfig filterConfig) throws ServletException
    {
        this.filterConfig = filterConfig;
        redirectURL = filterConfig.getInitParameter("redirectURL");
        sessionKey = filterConfig.getInitParameter("checkSessionKey");
        String notCheckURLListStr = filterConfig.getInitParameter("notCheckURLList");
        if (notCheckURLListStr != null)
        {
            StringTokenizer st = new StringTokenizer(notCheckURLListStr, ";");
            notCheckURLList.clear();
            while (st.hasMoreTokens())
            {
                notCheckURLList.add(st.nextToken());
            }
        }
    }
}

示例2:防止用户访问一些未被授权资源的过滤器

package com.drp.util.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;
import javax.servlet.http.HttpSession;
public class AuthFilter implements Filter
{
    public void destroy()
    {}
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse
        , FilterChain filterChain) throws IOException, ServletException
    { //1,doFilter方法的第一个参数为ServletRequest对象。此对象给过滤器提供了对进入的信息(包括表单数据、cookie和HTTP请求头)的完全访问。第二个参数为ServletResponse,通常在简单的过滤器中忽略此参数。最后一个参数为FilterChain,此参数用来调用servlet或JSP页。   
        HttpServletRequest request = (HttpServletRequest) servletRequest; //;//如果处理HTTP请求,并且需要访问诸如getHeader或getCookies等在ServletRequest中无法得到的方法,就要把此request对象构造成HttpServletRequest   
        HttpServletResponse response = (HttpServletResponse) servletResponse。
        String currentURL = request.getRequestURI(); //取得根目录所对应的绝对路径:   
        String targetURL = currentURL.substring(currentURL.indexOf("/", 1), currentURL.length()); //截取到当前文件名用于比较   
        HttpSession session = request.getSession(false);
        if (!"/login.jsp".equals(targetURL))
        { //判断当前页是否是重定向以后的登录页面页面,如果是就不做session的判断,防止出现死循环   
            if (session == null || session.getAttribute("user") == null)
            { //*用户登录以后需手动添加session   
                System.out.println("request.getContextPath()=" + request.getContextPath());
                response.sendRedirect(request.getContextPath() + "/login.jsp"); //如果session为空表示用户没有登录就重定向到login.jsp页面   
                return;
            }
        }
        //加入filter链继续向下执行   
        filterChain.doFilter(request, response); //.调用FilterChain对象的doFilter方法。Filter接口的doFilter方法取一个FilterChain对象作为它的一个参数。在调用此对象的doFilter方法时,激活下一个相关的过滤器。如果没有另一个过滤器与servlet或JSP页面关联,则servlet或JSP页面被激活。   
    }
    public void init(FilterConfig filterConfig) throws ServletException
    {}
}
<filter>
<filter-name>AuthFilter</filter-name>
<filter-class>com.drp.util.filter.AuthFilter</filter-class>
</filter> <
filter - mapping >
    <filter-name>AuthFilter</filter-name> <
    url - pattern > * .jsp < /url-pattern>/ / 表示对所有jsp文件有效 <
    /filter-mapping>

以上就是今天的全部内容,相比拦截器来说,过滤器可能较为简单,但还是不能小觑的;更多java基础知识请持续关注本站了解。

推荐阅读:

java filter过滤器和shiro的区别是什么?

java filter过滤器,异步如何处理过滤器?

filter过滤器是什么?Filter功能有哪些?