精华内容
下载资源
问答
  • 记录一次自定义拦截器放行路径失效问题
    2021-12-28 11:19:03

    记录一次自定义拦截器放行路径失效问题
    从网上查了几个小时,发现既不是大家普遍的没有配置servlet.context.path路径问题,也不是由于跳转了error没有配置error放行的问题,原因是用的restful传参,如/user/login/{username}这种传参,放行路径就需要配置成“/user/login/**”,这样。

    更多相关内容
  • java开发中,拦截器使用是很普遍的,最常用的就是登陆拦截了,然后并不是所有的请求我们都需要拦截,比如index页面的请求我们是不拦截的.通常情况下我们有两种方式:先贴出来springboot使用拦截器的case:1.自定义拦截器...

    在java开发中,拦截器使用是很普遍的,最常用的就是登陆拦截了,然后并不是所有的请求我们都需要拦截,比如index页面的请求我们是不拦截的.通常情况下我们有两种方式:先贴出来springboot使用拦截器的case:

    1.自定义拦截器,实现HandlerInterceptor ,也可以采用继承的方式(HandlerInterceptorAdapter),内容不重要,看过程

    public class LoginHandlerInterceptor implements HandlerInterceptor {

    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

    HttpSession session = request.getSession();

    String username = (String) session.getAttribute("username");

    if (StringUtils.isEmpty(username) || !Objects.equals("123456",username)) {

    request.setAttribute("msg","没有权限");

    request.getRequestDispatcher("/index.html").forward(request,response);

    return false;

    }else {

    return true;

    }

    }

    public void postHandle(HttpServletRequest request, HttpServletResponse re

    展开全文
  • Java Filter(拦截器

    2021-03-01 08:03:57
    多个Filter按照在配置文件中配置的filter顺序执行。在web.xml文件中配置该Filter,使用init-param元素为该Filter配置参数...filter 、filter-mapping 、servlet、servlet-mapping 才构成一个完整的拦截器配置。Filt...

    多个Filter按照在配置文件中配置的filter顺序执行。

    在web.xml文件中配置该Filter,使用init-param元素为该Filter配置参数,init-param可接受如下两个子元素:

    param-name:指定参数名。

    param-value:指定参数值。

    filter 、filter-mapping 、servlet、servlet-mapping 才构成一个完整的拦截器配置。

    Filter类需要实现Filter接口,该接口有init、doFilter、destroy3个方法,,3个方法顺序执行。

    Filter也称之为过滤器,它是Servlet技术中比较激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。

    20121020031740937.jpg

    二、Filter简介

    Servlet API中提供了一个Filter接口,开发web应用时,如果编写的Java类实现了这个接口,则把这个java类称之为过滤器Filter。通过Filter技术,开发人员可以实现用户在访问某个目标资源之前,对访问的请求和响应进行拦截。简单说,就是可以实现web容器对某资源的访问前截获进行相关的处理,还可以在某资源向web容器返回响应前进行截获进行处理。

    三、快速入门

    1、新建一个类,实现Filter接口

    2、实现doFilter()方法,打印一句话,来证明能够进行拦截

    3、在web.xml中进行配置(参照Servlet配置)

    4、访问一个页面,看看能不能拦截

    1>

    [java] view plaincopy

    package com.test.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;

    public class Demo1Filter implements Filter {

    private FilterConfig filterConfig;

    public void doFilter(ServletRequest request, ServletResponse response,

    FilterChain chain) throws IOException, ServletException {

    System.out.println("Demo1过滤前");

    System.out.println(filterConfig.getInitParameter("param1"));

    chain.doFilter(request, response);//放行。让其走到下个链或目标资源中

    System.out.println("Demo1过滤后");

    }

    public void init(FilterConfig filterConfig) throws ServletException {

    System.out.println("初始化了");

    this.filterConfig = filterConfig;

    }

    public void destroy() {

    System.out.println("销毁了");

    }

    }

    2>在web.xml中进行配置

    [html] view plaincopy

    Demo1Filter

    com.itheima.filter.Demo1Filter

    param1

    value在这里呢

    Demo1Filter

    /*

    REQUEST

    FORWARD

    ERROR

    INCLUDE

    四、Filter的应用场景

    通过对filter过滤器的了解,可以得知在以下三种情况下可以做些处理:

    1> 通过控制对chain.doFilter的方法的调用,来决定是否需要访问目标资源。

    比如,可以在用户权限验证等等。判断用户是否有访问某些资源的权限,有权限放行,没权限不执行chain.doFilter方法。

    2> 通过在调用chain.doFilter方法之前,做些处理来达到某些目的。

    比如,解决中文乱码的问题等等。可以在doFilter方法前,执行设置请求编码与响应的编码。甚至可以对request接口进行封装装饰来处理get请求方式的中文乱码问题(重写相应的request.getParameter方法)。

    3> 通过在调用chain.doFilter方法之后,做些处理来达到某些目的。

    比如对整个web网站进行压缩。在调用chain.doFilter方法之前用类A对response对象进行封装装饰,重写getOutputStream和重写getWriter方法。在类A内部中,将输出内容缓存进ByteArrayOutputStream流中,然后在chain.doFilter方法执行后,获取类A中ByteArrayOutputStream流缓存数据,用GZIPOutputStream流进行压缩下。

    五、Filter实现拦截的原理

    Filter接口中有一个doFilter方法,当开发人员编写好Filter类实现doFilter方法,并配置对哪个web资源进行拦截后,WEB服务器每次在调用web资源的service方法之前(服务器内部对资源的访问机制决定的),都会先调用一下filter的doFilter方法。

    六、Filter生命周期

    和Servlet一样Filter的创建和销毁也是由WEB服务器负责。不过与Servlet区别的是,它是1>在应用启动的时候就进行装载Filter类(与Servlet的load-on-startup配置效果相同)。2>容器创建好Filter对象实例后,调用init()方法。接着被Web容器保存进应用级的集合容器中去了等待着,用户访问资源。3>当用户访问的资源正好被Filter的url-pattern拦截时,容器会取出Filter类调用doFilter方法,下次或多次访问被拦截的资源时,Web容器会直接取出指定Filter对象实例调用doFilter方法(Filter对象常驻留Web容器了)。4>当应用服务被停止或重新装载了,则会执行Filter的destroy方法,Filter对象销毁。

    注意:init方法与destroy方法只会直接一次。

    七、Filter部署应用注意事项

    1> filter-mapping标签中servlet-name与url-pattern。

    Filter不仅可以通过url-pattern来指定拦截哪些url匹配的资源。而且还可以通过servlet-name来指定拦截哪个指定的servlet(专门为某个servlet服务了,servlet-name对应Servlet的相关配置)。

    2> filter-mapping标签中dispatcher。

    指定过滤器所拦截的资源被 Servlet 容器调用的方式,可以是REQUEST,INCLUDE,FORWARD和ERROR之一,默认REQUEST。用户可以设置多个 子元素用来指定 Filter 对资源的多种调用方式进行拦截。

    REQUEST:

    当用户直接访问页面时,Web容器将会调用过滤器。如果目标资源是通过RequestDispatcher的include()或forward()方法访问或ERROR情况时,那么该过滤器就不会被调用。

    INCLUDE:

    如果目标资源是通过RequestDispatcher的include()方法访问时,那么该过滤器将被调用。除此之外,该过滤器不会被调用。

    FORWARD:

    如果目标资源是通过RequestDispatcher的forward()方法访问时,那么该过滤器将被调用,除此之外,该过滤器不会被调用。

    ERROR:

    如若在A.jsp页面page指令中指定了error属性=examError.jsp,那么A.jsp中若出现了异常,会跳转到examError.jsp中处理。而在跳转到examError.jsp时,若过滤器配置了ERROR的dispather那么则会拦截,否则不会拦截。

    转,被多次转了,找不到原出处。

    展开全文
  • 配置权限校验和登录校验,日志记录或其他操作,...拦截器有多个,不可能每一个都写放行判断代码,而且拦截不一定是基于path,可能也是基于请求头。即使是基于类似BaseInterceptor的方式,虽然节省了代码,可还是会执...

    配置权限校验和登录校验,日志记录或其他操作,这些都用了Spring MVC的多个拦截器。

    但是有一个问题,有一些请求是拦截器不能拦截的,不能进行拦截,否侧会出现异常和错误。比如受信任节点发来的请求,是不用进行权限校验和登录校验的。

    拦截器有多个,不可能每一个都写放行判断代码,而且拦截不一定是基于path,可能也是基于请求头。即使是基于类似BaseInterceptor的方式,虽然节省了代码,可还是会执行重复的放行判断的java代码。

    spring mvc 有没有一个中间件组件,可以在这里面判断请求是否可以进行拦截或不拦截直接放行?不用进入拦截器的流程?

    回答

    写个白名单数组进行过滤吧,比如下面这样

    // 不需要拦截的请求,可以根据实际需求切换为请求头的某个参数值

    private static final String[] whiteList = {"/oauth/token","/captchaImage"};

    // 跳过不需要验证的路径

    if (Arrays.asList(whiteList).contains(url)){

    // 调用逻辑方法,处理业务

    }else {

    // 拦截器处理请求

    }

    有一个方法是写Around的切面,满足条件直接返回true,否则走正常流程

    但是还是建议理清业务需求,考虑规范路径、特殊情况走特殊接口等操作

    展开全文
  • ①定义一个拦截器类继承拦截器接口 ②拦截器注册到容器中(实现WebMvcConfigurer的addInterceptors) 定义SpringMvc定制化的配置类,给容器通过WebMvcConfigurer注册拦截器,并设置拦截规则
  • struts拦截器和url放行

    2019-03-26 01:32:03
    NULL 博文链接:https://kingpingping.iteye.com/blog/1150556
  • 拦截器放行swagger页面

    2021-11-07 21:36:01
    @Configuration public class WebConfig ... * 放行swagger-ui静态资源 */ @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("swagger-ui.html")
  • 这篇文章主要介绍了Springboot引入拦截器放行swagger代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下Springboot引入拦截器自定义的拦截器类 ...
  • 一般来说什么权限,日志问题都需要拦截器,servlet原生态拦截器肯定是没有框架中的拦截器好用的,特别是排除放行的内容,是不好用的,下面举个例子说明packagefilter;importjava.io.IOException;importjavax.servlet...
  • 拦截器静态资源放行

    千次阅读 2018-12-05 16:26:00
    在web.xml中配置的核心调度 ,如果将DispatcherServlet请求映射配置为"/",则Spring MVC将捕获Web容器所有的请求,包括静态资源的请求,Spring MVC会将它们当成一个普通请求处理,因此找不到对应处理器将导致错误...
  • 首先要确保你的拦截器能正确拦截:dubug未放行路径可以正常进入拦截器 其次 看你的放行路径 配置是否正确 最后如果还有问题,那么把你的拦截器配置先注释掉,一定是你的接口有bug了 (〃´皿`)q 那么如果你想...
  • java相关:防止SpringMVC拦截器拦截js等静态资源文件的解决方法发布于 2020-6-30|复制链接本篇文章主要介绍了防止SpringMVC拦截器拦截js等静态资源文件的解决方法,具有一定的参考价值,有兴趣的同学可以了解一下...
  • -- 放行静态资源, mapping匹配你请求的URI; location指定静态资源的位置(建议前后面都加/) --> <mvc:resources mapping="/static/**" location="/static/" /> 示例 dispatcher-ser...
  • 适用:使用过滤器拦截外部接口,同时解决跨域问题 问题描述: 有时会有恶意攻击接口的情况,以防万一,需要将不属于我们的接口名称,进行拦截。以保证安全 解决方案: 代码如下。 import org.slf4j.Logger; import...
  • SpringBoot 拦截器放行静态资源

    千次阅读 2021-03-29 14:59:40
    SpringBoot 拦截器放行静态资源 今天遇到了一个问题,我用springboot写了一个拦截器,但是把我的静态资源也给拦截了。很是头疼,在网上搜索了一下找到了解决办法。 首先要明确绝对路径和相对路径的区别。 ...
  • 本篇文章主要介绍了spring boot如何使用spring AOP实现拦截器,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • SpringMVC提供来设置静态资源,但是增加该设置如果采用通配符的方式增加拦截器的话仍然会被拦截器拦截,可采用如下方案进行解决:方案一、拦截器中增加针对静态资源不进行过滤(涉及spring-mvc.xml)方案二、使用默认...
  • java拦截器配置

    2021-05-07 09:52:12
    文章目录简介一、拦截器介绍1.拦截器属性2.拦截器特点二、引入拦截器1.拦截器实现方法2.读入数据三、测试拦截器效果1.新增一个控制器2.运行项目 简介 拦截器通常用于拦截客户端请求,判断访问条件是否符合预期并...
  • Java中过滤器与拦截器

    2022-05-08 16:01:52
    自JavaWeb中的过滤器,到Spring MVC中新增了拦截器,目的也是为了分离前后台。 对于二者的理解: 过滤器(FIlter):过滤器实际上是对一些web资源进行拦截 ,做一些处理后再交给下一个Servlet或者过滤器处理,它...
  • 1首先与Application文件同级建立2个文件config(配置文件)和interceptor(拦截器文件)如下图所示 其中config import com.cumt.mem.interceptor.LoginInterceptor; import org.springframework.context....
  • 轻松实现java拦截器+自定义注解

    千次阅读 2021-03-16 16:47:51
    本文将用简洁的代码构建一个springboot的拦截器拦截器的使用很简单,定义一个自己的拦截器,向配置中添加一下就...项目结构:TokenInterceptor.java 自定义拦截器InterceptorConfig.java 添加拦截器进入项目NoN...
  • 问题:添加了登录验证的拦截器后/swagger-ui/index.html访问不了 swagger2依赖,版本为3.0.0 <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</...
  • 在WebSecurityConfig配置类中添加如下放行规则: @Configuration @EnableWebSecurity public class WebSecurityConfig extends WebSecurityConfigurerAdapter { // ... @Override public void configure(WebSecurity...
  • Java过滤器与拦截器的区别1. 过滤器与拦截器概述1.1 过滤器 Filter1.2 拦截器 interceptor2. 过滤器与拦截器区别3. 过滤器与拦截器实现3.1 过滤器(Filter)3.2 拦截器 (Interceptor)3.3 拦截器WebMvc配置3.4 切片...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 19,502
精华内容 7,800
关键字:

java拦截器放行

java 订阅
友情链接: AMCParser-master.zip