spring boot 配置Filter过滤器
2016-12-27 15:01
453 查看
Filter 过滤器是web开发中很重要的一个组件,下面以一个session登陆的例子介绍下spring boot中如何使用Filter
首先要准备一个实现了Filter的接口的类 SessionFilter:
实际开发中往往有很多请求要直接请求进来,不需要鉴权登陆的,所以代码中过滤掉这种请求的代码,装进list就好了。
经过上面这俩步的配置,过滤器基本上就可以了。
配置多个filter,并指定顺序,请参考: 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<Pattern> patterns = new ArrayList<Pattern>(); @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(); }
经过上面这俩步的配置,过滤器基本上就可以了。
配置多个filter,并指定顺序,请参考: spring boot filter 配置多个时,执行顺序
相关文章推荐
- springboot配置 java servlet的Filter过滤器
- Spring boot的配置参数清单(带中文解释)
- 在SpringBoot中配置定时任务
- springboot-profiles配置,日志配置,mybatis集成
- 【转】spring boot web相关配置
- Spring boot的配置参数清单
- spring boot 开发环境配置
- Springboot+Thymeleaf配置与使用
- SpringBoot常用配置介绍
- SpringBoot配置属性之Server
- spring boot 整合mybatis、redis、 spring mvc基本配置
- spring boot通过命令行配置属性
- SpringBoot如何导入自定义配置的yml文件
- Spring Boot配置文件-多环境配置
- 一个由于springboot自动配置所产生的问题的解决
- SpringBoot配置文件读取
- SpringBoot中AOP的配置
- SpringBoot自动配置的实现原理
- Spring Boot 入门 - 进阶篇(7)- 自动配置(AutoConfigure)
- SpringBoot yml 配置