精华内容
下载资源
问答
  • java 过滤器配置方法

    2020-12-06 10:22:40
    --配置过滤器--> <filter> <filter-name>SystemInterceptor</filter-name> <filter-class>com.xxxx.common.Interceptor.SystemInterceptor</filter-class> </filter> &...

    web.xml配置

      <!--配置过滤器-->
      <filter>
        <filter-name>SystemInterceptor</filter-name>
        <filter-class>com.xxxx.common.Interceptor.SystemInterceptor</filter-class>
      </filter>
      <!--映射过滤器-->
      <filter-mapping>
        <filter-name>SystemInterceptor</filter-name>
        <!--“/*”表示拦截所有的请求 -->
        <url-pattern>/*</url-pattern>
      </filter-mapping>
    
     <!-- 安全方面应用 -->
    <security-constraint>
    	<!-- 对哪些请求方式进行拦截 -->
        <web-resource-collection>
          <web-resource-name>project</web-resource-name>
          <url-pattern>/*</url-pattern>
          <http-method>HEAD</http-method>
          <http-method>PUT</http-method>
          <http-method>TRACE</http-method>
          <http-method>DELETE</http-method>
          <http-method>OPTIONS</http-method>
        </web-resource-collection>
        <auth-constraint>
          <description>project</description>
          <role-name>All Role</role-name>
        </auth-constraint>
        <user-data-constraint>
          <transport-guarantee>NONE</transport-guarantee>
        </user-data-constraint>
      </security-constraint>
    

    SystemInterceptor.java 继承 Filter

    package com.xxxx.common.Interceptor;
    
    import com.xxxx.model.SysUser;
    
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;
    
    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;
    
    @WebFilter
    public class SystemInterceptor  implements Filter {
    	private List<String> notCheckUrls = new ArrayList<String>();
    
    	@Override
    	public void destroy() {
    		// TODO Auto-generated method stub
    		
    	}
    
    	@Override
    	public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException {
    		HttpServletRequest request = (HttpServletRequest)arg0;
    		HttpServletResponse response = (HttpServletResponse) arg1;
    		response.setCharacterEncoding("UTF-8");
    		String lastChars = request.getRequestURI().substring(request.getRequestURI().lastIndexOf("/") + 1);
    		
    		if (lastChars.equals("") ||isOther(lastChars)){
    			//不拦截的特殊方法日志写入
    			arg2.doFilter(arg0, arg1);//继续执行,.js,css等不需验证
    			return;
    		}
    
    		SysUser user = (SysUser) request.getSession().getAttribute("User");
    		if(user == null){//未登录
    			response.sendRedirect(request.getContextPath() + "/login.html");
    			return;
    		}
    		
    		arg2.doFilter(arg0, arg1);//继续执行
    		
    	}
    
    	@Override
    	public void init(FilterConfig arg0) throws ServletException {
    		notCheckUrls.add("login.html");
    		notCheckUrls.add("axios");
    		notCheckUrls.add("userlogin");
    		notCheckUrls.add(".js");
    		notCheckUrls.add(".png");
    		notCheckUrls.add(".jpg");
    		notCheckUrls.add(".gif");
    		notCheckUrls.add(".css");
    		notCheckUrls.add(".JPG");
    		notCheckUrls.add(".PNG");
    		notCheckUrls.add(".ico");
    		notCheckUrls.add(".map");
    		notCheckUrls.add(".vbs");
    		notCheckUrls.add(".xml");
    		notCheckUrls.add(".json");
    		notCheckUrls.add(".geojson");
    		notCheckUrls.add(".ttf");
    		notCheckUrls.add(".pdf");
    		notCheckUrls.add(".doc");
    		notCheckUrls.add(".docx");
    		notCheckUrls.add(".cur");
    		notCheckUrls.add(".rar");
    		notCheckUrls.add(".zip");
    		notCheckUrls.add(".db");
    		notCheckUrls.add(".txt");
    		notCheckUrls.add(".xlsx");
    		notCheckUrls.add(".xls");
    
    	}
    	
    	/**
    	 * 检查是否是不拦截的url
    	 * @param path
    	 * @return
    	 */
    	public boolean isOther(String path){
    		boolean flag = false;
    		int ncsize = notCheckUrls.size();
    		for(int i=0;i<ncsize;i++){
    			String str = notCheckUrls.get(i);
    			if(path.endsWith(str)){
    				flag = true;
    				break;
    			}
    		}
    		return flag;
    	}
    }
    
    
    展开全文
  • Servlet 编写过滤器filter配置多个url-pattern的方法如下:authoritycom.util.AuthorityFilterauthority/admin/*authority/manage/*如下登陆实例:publicvoiddoFilter(ServletRequestreq,ServletResponseresp,...

    Servlet 编写过滤器filter配置多个url-pattern的方法如下:

    authority

    com.util.AuthorityFilter

    authority

    /admin/*

    authority

    /manage/*

    如下登陆实例:public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {

    // 获得在下面代码中要用的request,response,session对象

    HttpServletRequest request = (HttpServletRequest) req;

    HttpServletResponse response = (HttpServletResponse) resp;

    response.setContentType("text/html;charset=utf-8");

    PrintWriter out = response.getWriter();

    HttpSession session = request.getSession();

    if(session.getAttribute("username") == null){

    out.println("");

    return;

    }

    else{

    chain.doFilter(req, resp);

    }

    web.xml:

    IsLogFilter

    zhuangzi.com.filter.IsLogFilter

    IsLogFilter

    /admin/*

    展开全文
  • 如图,浏览器发出的请求先递交给第一个filter进行过滤,符合规则则放行,递交给filter链中的下一个过滤器进行过滤。过滤器在链中的顺序与它在web.xml中配置的顺序有关,配置在前的则位于链的前端...

    过滤器

       过滤器是处于客户端与服务器资源文件之间的一道过滤网,在访问资源文件之前,通过一系列的过滤器对请求进行修改、判断等,把不符合规则的请求在中途拦截或修改。也可以对响应进行过滤,拦截或修改响应。


    如图,浏览器发出的请求先递交给第一个filter进行过滤,符合规则则放行,递交给filter链中的下一个过滤器进行过滤。过滤器在链中的顺序与它在web.xml中配置的顺序有关,配置在前的则位于链的前端。当请求通过了链中所有过滤器后就可以访问资源文件了,如果不能通过,则可能在中间某个过滤器中被处理掉。

         在doFilter()方法中,chain.doFilter()前的一般是对request执行的过滤操作,chain.doFilter后面的代码一般是对response执行的操作。过滤链代码的执行顺序如下:

    过滤器一般用于登录权限验证、资源访问权限控制、敏感词汇过滤、字符编码转换等等操作,便于代码重用,不必每个servlet中还要进行相应的操作。

         下面是过滤器的简单应用:

        1:创建过滤器


     如图,新建一个class,实现接口Filter(注意:是javax.servlet中的Filter)。

        2:重写过滤器的doFilter(request,response,chain)方法。另外两个init()、destroy()方法一般不需要重写。在doFilter方法中进行过滤操作。

        常用代码有:获取请求、获取响应、获取session、放行。

        剩下的代码就是根据session的属性进行过滤操作、设置编码格式等等了,看情况而定。

    HttpServletRequest request=(HttpServletRequest) arg0;//获取request对象
    HttpServletResponse response=(HttpServletResponse) arg1;//获取response对象
    HttpSession session=request.getSession();//获取session对象
    
    过滤操作代码......
    
    chain.doFilter(request, response);//放行,通过了当前过滤器,递交给下一个filter进行过滤

        3:在web.xml中配置过滤器。这里要谨记一条原则:在web.xml中,监听器>过滤器>servlet。也就是说web.xml中监听器配置在过滤器之前,过滤器配置在servlet之前,否则会出错。

    <filter>  
        <filter-name>loginFilter</filter-name>//过滤器名称  
        <filter-class>com.ygj.control.loginFilter</filter-class>//过滤器类的包路径
    <init—param> //可选 
        <param—name>参数名</param-name>//过滤器初始化参数
        <param-value>参数值</param-value>  
    </init—pamm>  
    </filter> 
     
    <filter-mapping>//过滤器映射  
        <filter-name>loginFilter</filter-name>  
    <url—pattern>指定过滤器作用的对象</url-pattern>

    在配置中需要注意的有两处:一是<filter-class>指明过滤器类所在的包路径。二是<url-pattren>处定义过滤器作用的对象。一般有以下规则:

        1:作用与所有web资源:<url—pattern>/*</url-pattern>。则客户端请求访问任意资源文件时都要经过过滤器过滤,通过则访问文件,否则拦截。

        2:作用于某一文件夹下所有文件:<url—pattern>/dir/*</url-pattern>

        3:作用于某一种类型的文件:<url—pattern>*.扩展名</url-pattern>。比如<url—pattern>*.jsp</url-pattern>过滤所有对jsp文件的访问请求。

        4:作用于某一文件夹下某一类型文件:<url—pattern>/dir/*.扩展名</url-pattern>

        如果一个过滤器需要过滤多种文件,则可以配置多个<filter-mapping>,一个mapping定义一个url-pattern来定义过滤规则。

    <filter>
          <filter-name>loginFilter</filter-name>
          <filter-class>com.ygj.control.loginFilter</filter-class>
      </filter>
      <filter-mapping>
          <filter-name>loginFilter</filter-name>
          <url-pattern>*.jsp</url-pattern>
      </filter-mapping>
      <filter-mapping>
          <filter-name>loginFilter</filter-name>
          <url-pattern>*.do</url-pattern>
      </filter-mapping>

       例1:用过滤器实现登录验证,没登录则驳回访问请求并重定向到登录页面。
    public void doFilter(ServletRequest arg0, ServletResponse arg1,
                FilterChain arg2) throws IOException, ServletException {
            
            HttpServletRequest request=(HttpServletRequest) arg0;
            HttpServletResponse response=(HttpServletResponse) arg1;
            HttpSession session=request.getSession();
            
            String path=request.getRequestURI();
            
            Integer uid=(Integer)session.getAttribute("userid");
            
            if(path.indexOf("/login.jsp")>-1){//登录页面不过滤
                arg2.doFilter(arg0, arg1);//递交给下一个过滤器
                return;
            }
            if(path.indexOf("/register.jsp")>-1){//注册页面不过滤
                arg2.doFilter(request, response);
                return;
            }
            
            if(uid!=null){//已经登录
                arg2.doFilter(request, response);//放行,递交给下一个过滤器
                
            }else{
                response.sendRedirect("login.jsp");
            }
    
        }

    例2:设置字符编码

    public void doFilter(ServletRequest request, ServletResponse response,
                FilterChain chain) throws IOException, ServletException {
              HttpServletRequest request2=(HttpServletRequest) request;
              HttpServletResponse response2=(HttpServletResponse) response;
              
              request2.setCharacterEncoding("UTF-8");  
              response2.setCharacterEncoding("UTF-8"); 
              
              chain.doFilter(request, response); 
    
        }


            
          
    展开全文
  • Filter 过滤器是web开发中很重要的一个组件,下面以一个session登陆的例子介绍下spring boot中如何使用Filter首先要准备一个实现了Filter的接口的类 SessionFilter:import org.slf4j.LoggerFactory;import javax....

    Filter 过滤器是web开发中很重要的一个组件,下面以一个session登陆的例子介绍下spring boot中如何使用Filter

    首先要准备一个实现了Filter的接口的类 SessionFilter:

    import org.slf4j.LoggerFactory;

    import javax.servlet.*;

    import javax.servlet.http.HttpServletRequest;

    import javax.servlet.http.HttpServletResponse;

    import javax.servlet.http.HttpSession;

    import java.io.IOException;

    import java.util.ArrayList;

    import java.util.List;

    import java.util.regex.Matcher;

    import java.util.regex.Pattern;

    /**

    * Created by mazhenhua on 2016/12/27.

    *

    * 过滤器

    */

    public class SessionFilter implements Filter {

    private static final org.slf4j.Logger logger = LoggerFactory.getLogger(SessionFilter.class);

    /**

    * 封装,不需要过滤的list列表

    */

    protected static List patterns = new ArrayList();

    @Override

    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override

    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException {

    HttpServletRequest httpRequest = (HttpServletRequest) servletRequest;

    HttpServletResponse httpResponse = (HttpServletResponse) servletResponse;

    logger.info("aaaaaaaaaa");

    String url = httpRequest.getRequestURI().substring(httpRequest.getContextPath().length());

    if (url.startsWith("/") && url.length() > 1) {

    url = url.substring(1);

    }

    if (isInclude(url)){

    chain.doFilter(httpRequest, httpResponse);

    return;

    } else {

    HttpSession session = httpRequest.getSession();

    if (session.getAttribute("") != null){

    // session存在

    chain.doFilter(httpRequest, httpResponse);

    return;

    } else {

    // session不存在 准备跳转失败

    /* RequestDispatcher dispatcher = request.getRequestDispatcher(path);

    dispatcher.forward(request, response);*/

    chain.doFilter(httpRequest, httpResponse);

    return;

    }

    }

    }

    @Override

    public void destroy() {

    }

    /**

    * 是否需要过滤

    * @param url

    * @return

    */

    private boolean isInclude(String url) {

    for (Pattern pattern : patterns) {

    Matcher matcher = pattern.matcher(url);

    if (matcher.matches()) {

    return true;

    }

    }

    return false;

    }

    }

    实际开发中往往有很多请求要直接请求进来,不需要鉴权登陆的,所以代码中过滤掉这种请求的代码,装进list就好了。

    /**

    * 配置过滤器

    * @return

    */

    @Bean

    public FilterRegistrationBean someFilterRegistration() {

    FilterRegistrationBean registration = new FilterRegistrationBean();

    registration.setFilter(sessionFilter());

    registration.addUrlPatterns("/*");

    registration.addInitParameter("paramName", "paramValue");

    registration.setName("sessionFilter");

    return registration;

    }

    /**

    * 创建一个bean

    * @return

    */

    @Bean(name = "sessionFilter")

    public Filter sessionFilter() {

    return new SessionFilter();

    }

    经过上面这俩步的配置,过滤器基本上就可以了。

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    展开全文
  • JAVA过滤器Filter

    2019-01-07 14:20:31
    编写一个过滤器的类实现Filter接口 实现接口中尚未实现的方法(着重实现doFilter方法) 在web.xml中进行配置(主要是配置要对哪些资源进行过滤) 三、Filter的API详解 1.filter生命周期及其与生命周期相关的...
  • 过滤器的拦截对象是Web资源过滤器生命周期的开始和结束基本和Web服务器相同服务器开始就会创建初始化过滤器服务器终止过滤器也会被销毁创建并使用过滤器创建Filter接口的实现类并实现其doFilter方法在web.xml中注册...
  • 过滤器可以对资源的请求和相应提供过滤功能,配置在web.xml文件中。过滤器可用来实现以下功能1. 权限过滤2. 登陆和检查验证3. 图像转换4. 数据压缩5. 加密6. 令牌验证7. 触发访问资源的事件8. XSL/T过滤9. Mime-type...
  • 1,springboot过滤器使用方法 webFilter注解一定要加@WebFilter(urlPatterns = "/*") //是拦截所有请求 package com.ihrm.company.MyHandlerInterceptor; import java.io.IOException; import javax.servlet...
  • 今天给大家分享的是Java技术学习笔记:过滤器链的实现方法配置和案例分析。过滤器能够对网站中的各种内容进行过滤(页面、Servlet、图片、文件),可以在网站内容请求和响应时进行一些操作,完成一些通用的功能。...
  • java web 过滤器Filter

    2021-02-15 16:27:45
    作用:对url进行统一拦截处理,用于... 在Filter接口的doFilter()方法中编写过滤器的功能代码 在web.xml中对过滤器进行配置,说明拦截URL的范围 第一个过滤器 MyFirstFilter.java public class MyFirstFilter im
  • spring boot 配置Filter过滤器方法总结

    万次阅读 热门讨论 2018-05-10 12:21:31
    相关概念参考:AOP(面向切面编程)、Filter(过虑器)、Interceptor(拦截器)工作原理及代码参考:Java三大器之过滤器Filter)的工作原理和代码演示spring boot 配置Filter过滤器1、通过注解来配置@Component ...
  • 今天给大家分享的是Java技术学习笔记:过滤器链的实现方法配置和案例分析。过滤器能够对网站中的各种内容进行过滤(页面、Servlet、图片、文件),可以在网站内容请求和响应时进行一些操作,完成一些通用的功能。...
  • java 过滤器filter

    2017-01-07 17:11:02
    基本概念: 过滤器在web项目中的位置:web浏览器 -》 web容器 -... 实现方法:自定义过滤器类实现let.Filter 类和其 的doFilter() 方法,并在web.xml 文件中配置filter 过滤器的分类:request,include,forward,er
  • 1.过滤器简介 过滤器是处于客户端与服务器资源文件之间的一道过滤网,在访问资源文件之前,通过一系列的过滤器对请求进行修改、判断...过滤器在链中的顺序与它在web.xml中配置的顺序有关,配置在前的则位于链的前端...
  • Java过滤器原理方法

    2016-06-28 20:52:00
    过滤器可以对资源的请求和相应提供过滤功能,配置在web.xml文件中。过滤器可用来实现以下功能1. 权限过滤2. 登陆和检查验证3. 图像转换4. 数据压缩5. 加密6. 令牌验证7. 触发访问资源的事件8. XSL/T过滤9. Mime-type...
  • java过滤器_Java 过滤器

    2021-03-07 01:13:12
    作用:对web服务器管理的所有web资源:例如Jsp, Servlet, ...使用方法:一、做类建一个实现javax.servlet.Filter接口的类在doFilter()方法中编写过滤逻辑二、做配置在web.xml中配置和元素实例一:验证页面是否登录,...
  • 我正在使用Java配置.我有一个现有的修改过滤器链(添加了一些自定义过滤器)但是对’/ oauth / token’的请求没有使用它,而是使用’默认’过滤器链.如何才能访问保护oauth端点的过滤器链,以便我可以在那里使用自定义...
  • filterchain过滤器拦截到请求之后,首先是执行doFilter()方法中chain.doFilter()之前的代码,然后放弃权限给下一个过滤器或者serverlet等等,最后才执行chain.doFilter()之后的代码。测试场景:1.新建一个index.html...
  • JAVA过滤器-Filter 2

    2019-06-09 20:02:29
    Filter接口有三个方法,这三个方法反应了Filter的生命周期,下面就来了解一下吧。  init、destroy、doFilter    init只会在web程序加载的时候调用,即启动如tomcat等服务器时调用,一般负责加载配置的参数  在init...
  • 准备一个Servlet(Lesson2/lesson6_2.Sample7.java)package lesson6_2;import java.io.*; import java.util.*; import javax.servlet.*; import javax.servlet.annotation.WebServlet; import javax.servlet.http.*...
  • Java过滤器

    2020-06-01 18:48:54
    java过滤器--->Filter过滤器的创建配置 作用:用于请求到达目标资源之前。可以先把请求拦截下来,处理后再放行,放行后请求就达到了目标资源 使用场景: 敏感词过滤 统一乱码解决 IP黑名单 权限过滤 过滤器的...
  • Filter当访问服务器资源时,过滤器可以将请求提前拦截下来,完成一些特殊的操作。一般用于完成通用操作(检查是否登录,统一编码处理,敏感词汇处理等...)创建步骤定义类,实现Filter接口复写方法配置拦截路径(1. ...
  • 基本使用创建一个类 继承HttpFilter(Tomcat9之后) 实现Filter接口(Tomcat9之前)重写方法doFilter方法三个参数HttpServletRequest HttpServletResponse FilterChain配置xml文件4.管理机制继承或实现的关...
  • 目录1、过滤器简介2、filter生命周期相关的方法3、Filter配置(web.xml配置)4、Filter的作用?5、例子 1、过滤器简介 过滤器实际上就是对web资源进行拦截,做一些处理后再交给下一个过滤器或servlet处理 通常都是...
  • 想要获取application.properties中自定义的test.testUrl值 test.testUrl=/test/testUrl 一般在实体中加入@Vaule 注解就可生效 ...并调用其init方法,完成对象的初始化功能 从而为后续的用户请求作好拦截的准备工作 f
  • 注意问题:在学习用selvert的过滤器filter处理中文乱码时,在filter配置初始化时用了utf-8处理中文乱码,而在提交的jsp页面中却用了gbk。虽然两种都可以出来中文乱码,但是却造成了处理乱码的格式不一致。所以编译...
  • 1、过滤器 (Filter)过滤器配置比较简单,直接实现 Filter 接口即可,也可以通过 @WebFilter 注解实现对特定 URL 拦截,看到 Filter 接口中定义了三个方法。init() :该方法在容器启动初始化过滤器时被调用,它在 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 505
精华内容 202
关键字:

java过滤器filter配置方法

java 订阅