过滤器

简介: 过滤器就是在请求处理之前,对URL 进行判断,在这里可以进行权限的过滤,将不具有权限访问的用户过滤掉,但是经常我们也可以使用拦截器进行类似的操作,其实过滤器和拦截器的区别挺大的。 我在这里只从一点说明。

过滤器就是在请求处理之前,对URL 进行判断,在这里可以进行权限的过滤,将不具有权限访问的用户过滤掉,但是经常我们也可以使用拦截器进行类似的操作,其实过滤器和拦截器的区别挺大的。

我在这里只从一点说明。

 

过滤器是配置在web.xml中的,配置在web.xml中的一般是全局的,往往只是被初始化一次,而此后一直就会不断的调用其里面的doFilter方法和Servlet在这点上很类似。

而拦截器是配置在struts的配置文件中的,它可以初始化很多次。只要有符合的请求,它就创建。

 

拦截器

 

package com.baitw.struts.utils;

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

import org.apache.struts2.ServletActionContext;

/**
 * 
 * 权限过滤器
 * 
 * */

public class AuthorityFilter implements Filter {

    private FilterConfig config;
    
    //过滤器核心方法
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        // TODO Auto-generated method stub
        //获取Filter配置参数
        String encoding=config.getInitParameter("encoding");
        String loginPage=config.getInitParameter("loginPage");
        String proLogin=config.getInitParameter("proLogin");
        //设置request编码
        request.setCharacterEncoding(encoding);
        HttpServletRequest requ=(HttpServletRequest) request;
        HttpSession session=requ.getSession(true);
        //获取客户请求页面
        String requestPath=requ.getServletPath();
        /*
        //获取cookie
        Cookie[] cookies=requ.getCookies();
        Cookie c=cookies[0];
        String val=c.getValue();
        */
        /**
         * 如果session范围内的user为null,即表明没有登录
         * 且用户请求的既不是登录页面,也不是处理登录页面
         * */
        if(session.getAttribute("username")==null
                &&!requestPath.endsWith(loginPage)
                &&!requestPath.endsWith(proLogin)
                ){
            System.out.println("权限拦截器的消息:"+"终止");
            request.getRequestDispatcher(loginPage)
            .forward(request, response);
        }else{
            System.out.println("权限拦截器的消息:"+"放行");
            chain.doFilter(request, response);
        }
    }

    public void init(FilterConfig config) throws ServletException {
        // TODO Auto-generated method stub
        this.config=config;
    }
    
    public void destroy() {
        // TODO Auto-generated method stub
        this.config=null;
    }

}

 

 

<!-- 权限拦截器  -->
    <filter>
        <filter-name>authority</filter-name>
        <filter-class>com.baitw.struts.utils.AuthorityFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>GBK</param-value>
        </init-param>
        <init-param>
            <param-name>loginPage</param-name>
            <param-value>/view/login.jsp</param-value>
        </init-param>
        <init-param>
            <param-name>proLogin</param-name>
            <param-value>/view/admin/main.jsp</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>authority</filter-name>
        <url-pattern>/admin/*</url-pattern>
    </filter-mapping>

 

相关文章
|
4月前
|
Java API 容器
Filter 过滤器实现
JavaWeb 组件 Servlet 提供了 Filter 过滤功能,其功能是对目标资源的请求和响应进行拦截,对拦截到的请求和响应做出特殊的功能处理,比如我们请求中有一些敏感信息过滤就是利用过滤器过滤。
|
6月前
|
Java 容器
28JavaWeb基础 - 过滤器
28JavaWeb基础 - 过滤器
25 0
|
1月前
|
Python
过滤器
过滤器
9 2
|
3月前
过滤器&拦截器
过滤器&拦截器
32 0
过滤器&拦截器
|
6月前
|
Java 容器
过滤器和拦截器的区别
Filter 也称为过滤器,基于Servlet实现,拦截器(Interceptor)是一种动态拦截方法调用的机制,在SpringMVC中动态拦截控制器方法的执行,基于AOP思想,对方法进行增强。和servlet 中的过滤器类似,都是对用户请求进行处理。
48 0
|
8月前
|
Java
15-Filter 过滤器1
15-Filter 过滤器1
64 0
|
8月前
|
Java Nacos 微服务
路由过滤器 GatewayFilter
路由过滤器 GatewayFilter
50 0
路由过滤器 GatewayFilter
|
10月前
|
监控 Java 数据库连接
过滤器的应用
在上一篇博客中,我们简单的学习了一下面向切面编程,而过滤器就是对这一思想的应用。那如何在项目中使用呢?
|
11月前
|
API 数据安全/隐私保护 容器
Filter(过滤器)
Filter(过滤器)
|
Java 应用服务中间件 API
过滤器和拦截器
过滤器和拦截器
140 0