您的位置:首页 > 编程语言 > Java开发

SpringBoot过滤器、拦截器配置

2020-06-03 05:00 302 查看

过滤器配置

创建过滤器

public class LogCostFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}

@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
long start = System.currentTimeMillis();
//filterChain后面执行逻辑代码,即后面的业务代码
filterChain.doFilter(servletRequest,servletResponse);
//业务代码执行完后,再走下一步流程
System.out.println("Execute cost="+(System.currentTimeMillis()-start));
}

@Override
public void destroy() {
}
}

创建过滤器配置类

@Configuration
public class FilterConfig {

@Bean
public FilterRegistrationBean registFilter() {
FilterRegistrationBean registration = new FilterRegistrationBean();
//将自己创建的过滤器注入进来
registration.setFilter(new LogCostFilter());
//配置过滤的请求
registration.addUrlPatterns("/*");
registration.setName("LogCostFilter");
registration.setOrder(1);
return registration;
}
}

通过注解配置过滤器

@WebFilter(urlPatterns = "/*", filterName = "logFilter2")
public class LogCostFilter2 implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {

}

@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
long start = System.currentTimeMillis();
filterChain.doFilter(servletRequest, servletResponse);
System.out.println("LogFilter2 Execute cost=" + (System.currentTimeMillis() - start));
}

@Override
public void destroy() {

}
}

这里直接用@WebFilter就可以进行配置,同样,可以设置url匹配模式,过滤器名称等。这里需要注意一点的是@WebFilter这个注解是Servlet3.0的规范,并不是Spring boot提供的。除了这个注解以外,我们还需在配置类中加另外一个注解:@ServletComponetScan,指定扫描的包。

在启动类中添加注解

@SpringBootApplication
@MapperScan("com.pandy.blog.dao")
//扫描过滤器类
@ServletComponentScan("com.pandy.blog.filters")
public class Application {
public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class, args);
}
}

拦截器配置

创建拦截器

//添加此注解,才能够把拦截器通过@Autowired注入到webmvc配置中
@Component
public class LoginHandlerInterceptor implements HandlerInterceptor {

//目标方法执行之前
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
Object user = request.getSession().getAttribute("currentUser");
if (user == null) {
//未登录,返回登录页面
response.sendRedirect("/LoginError.html");
//此时要返回false代码才能够同行
return false;
}else {
//放行
return true;
}
//这里还可以执行给当前session添加属性
//例:request.getSession().setAttribute("session","sd");
//那么在业务代码中,也可以通过session.getAttribute("session");拿到值
}

@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {

}

@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {

}
}

注册拦截器

@Configuration
public class MyMvcConfig implements WebMvcConfigurer {

//所有的WebMvcConfigurerAdapter组件都会一起起作用
@Bean //将组件注册在容器中
public WebMvcConfigurer webMvcConfigurerAdapter(){
return new WebMvcConfigurer(){

//注册拦截器
@Override
public void addInterceptors(InterceptorRegistry registry) {
//静态资源; *.css,*.js
//SpringBoot已经做好了静态资源映射
//                registry.addInterceptor(new LoginHandlerInterceptor()).addPathPatterns("/**")
//                .excludePathPatterns("/index.html","/","/user/login","/static/**","/webjars/**");
// /**  表示拦截所有路径下的所有请求
registry.addInterceptor(new LoginHandlerInterceptor())
.addPathPatterns("/person.html","/Person.html",
"/questionnaire.html","/Questionnaire.html",
"/result.html","/Result.html");
}
};
}

}
  • addInterceptor:把刚才创建的拦截器加入到registry中
  • addPathPatterns:用户加入所要拦截的url,/**表示拦截所有请求
  • excludePathPatterns:添加不需要拦截的请求。
  • 如果需要配置多个拦截,只需要另外创建一个拦截器,给registry再加一个inteceptor就可以了,不用再创建一个新的config配置类。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: