springboot分别使用过滤器,拦截器,切片

1,springboot使用过滤器;

第一步:自定义一个类实现Filter类,然后在类上面使用@Component自定义为一个bean即可,这种方式最简便,但是有时候我们使用第三方过滤器,人家的代码不能改动,我们又不能在它上面使用注解,那么springboot怎么使用它呢?如下:

定义一个spring配置类。

 

过滤器不知道调用的目的,即哪个controller,哪个方法,我们只知道request,response。而拦截器就知道。

2,springboot使用拦截器:

第一步:自定义一个类实现HandlerInterceptor类并重写方法,

@Component

public class LoginInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
            ModelAndView modelAndView) throws Exception {
        // TODO Auto-generated method stub

    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
            throws Exception {
        // TODO Auto-generated method stub

    }

}

第一个方法在调用controller之前调用返回true就会往下执行,第二个方法在处理玩controller后调用,但是如果执行过程中有异常就不会调用,第三个方法无论有没异常都会调用。那么为什么说拦截器可以得到调用的controller与及方法的信息呢?如下:

通过第三个参数handler,这个类可以转型为HandlerMethod,及当前对象。但是还有个局限性,它不知道方法的参数值是什么。

刚刚说有没有异常第三个方法都会执行,那么没有异常时第三个方法的Exception参数是空的。

 

上面的讲解基本完成,这里讲一下注意点,这里光靠上面的@Component注解,这个拦截器不能起作用。还是需要配置的。如下:

 

需要自定义个配置类继承WebMvcConfigurerAdapter,把自定义的拦截器类注入进来,然后重写addTnterceptor方法。

这里有个地方要注意,如果你定义了全局异常处理器类,如@ControllerAdvice,这时候这里就不能接收到异常,因为异常已经被异常处理器接收,如果没有在异常处理器声明处理这个异常,那么在拦截器上就会被接收。

 

3,springboot使用切片

切片就是一个类,

 

有如下注解:@before,@after,@afterthrow,@Around,@Around这个把前面三个都包含在里面。 一般都是用around.

我们先看一个表达式:execution(* com.kk.ww.UserController.*(..)),这个第一个星号代表任何返回值,第二个是这个controller任何的方法,括号里面的..代表任何的参数。

上面的handle方法有一个参数,这个参数对象包含当前拦截方法的信息。

但是在aop中拿不到它的原始的http请求与相应的对象。

 

总结:这三个拦截机制各有各的优势。

他们的顺序(没出异常):filter->interceptor->controlleradvice->aspect->controller

如果出异常,就是上面的倒过来。controller出现异常,首先由aspect切片处理,如果他没有处理,那么交给controlleradvice处理,如果还没没处理,就交给interceptor。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以通过实现 Filter 接口来创建一个过滤器,然后在 Spring Boot 中使用 @Bean 注解将其注册到应用程序中。在过滤器中,可以通过 HttpServletRequest 对象获取请求头中的 token,然后进行验证或者其他操作。具体实现可以参考 Spring Boot 官方文档或者相关教程。 ### 回答2: 在使用Spring Boot中,可以通过创建一个过滤器来拦截token。下面是一个简单的示例,说明如何实现。 首先,需要创建一个自定义的过滤器类,实现javax.servlet.Filter接口。在实现过滤器时,我们可以在doFilter方法中进行token验证的逻辑处理。以下是示例代码: ```java import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class TokenFilter implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // 将请求和响应对象转换成HttpServletRequest和HttpServletResponse对象 HttpServletRequest httpRequest = (HttpServletRequest) request; HttpServletResponse httpResponse = (HttpServletResponse) response; // 从请求头中获取token String token = httpRequest.getHeader("Authorization"); // 进行token验证的逻辑处理,例如验证token是否过期、是否有效等 // ... // 如果验证通过,将请求继续传递给下一个过滤器或目标资源处理 chain.doFilter(request, response); } // 其他方法,例如init和destroy方法,可以留空不做处理 } ``` 接下来,需要将自定义的过滤器添加到Spring Boot应用程序中。可以使用@Configuration注解将过滤器添加为一个Bean,并使用@Order注解指定过滤器的执行顺序。例如: ```java import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.Ordered; @Configuration public class FilterConfig { @Bean public FilterRegistrationBean<TokenFilter> tokenFilter() { FilterRegistrationBean<TokenFilter> registrationBean = new FilterRegistrationBean<>(); registrationBean.setFilter(new TokenFilter()); // 设置过滤器的URL映射规则,例如/*表示拦截所有请求 registrationBean.addUrlPatterns("/*"); // 设置过滤器的执行顺序 registrationBean.setOrder(Ordered.HIGHEST_PRECEDENCE); return registrationBean; } } ``` 最后,重新启动Spring Boot应用程序,自定义的过滤器就会拦截所有请求,并对token进行验证处理。 请注意,上述示例只是一个简单的演示,实际应用中可能需要根据具体的需求进行修改和扩展。例如,可以从数据库或缓存中获取token,进行更加复杂的验证逻辑,并在验证失败时返回相应的错误信息。 ### 回答3: 使用Spring Boot实现过滤器拦截Token的步骤如下: 1. 创建一个自定义的过滤器类,实现javax.servlet.Filter接口,并重写doFilter方法。在doFilter方法中,可以通过HttpServletRequest对象获取请求头中的Token信息,并进行相应的验证或处理。 2. 在Spring Boot应用的启动类中,通过添加注解@EnableWebSecurity开启Web安全配置,并通过继承WebSecurityConfigurerAdapter类重写configure方法。 3. 在configure方法中,使用http对象的addFilterBefore方法将自定义的过滤器添加到过滤器链中,指定过滤器在哪个过滤器之前进行拦截。 4. 在过滤器中,可以进行Token的验证和处理逻辑。例如,可以使用JWT来生成和验证Token,或将Token存储在Redis中,根据请求的Token进行校验等。 5. 如果Token验证不通过,可以返回相应的错误信息或重定向到登录页面。如果验证通过,可以进行其他的业务逻辑处理。 总之,通过自定义过滤器并将其添加到Spring Boot的过滤器链中,可以在请求到达Controller之前进行Token的验证和拦截操作,以实现对请求的安全控制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值