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<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(); }
经过上面这俩步的配置,过滤器基本上就可以了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
本文阐述Apache中过滤器的用法。 Apache 2 中的过滤器 相关模块 相关指令 mod_filter mod_deflate mod_ext_filter mod_include mod_charset_lite FilterChain FilterDeclare FilterProtocol FilterProvider AddInputFilter AddOutputFilter Re
过滤器用于修改特定文件,Hexo 将这些文件依序传给过滤器,而过滤器可以针对文件进行修改,这个概念借鉴自 WordPress。 概要 hexo.extend.filter.register(type, function() { // User configuration const { config } = this; if (config.external_link.enable)
从本章开始,我们学习SVG的一些高级功能,包括过滤器(Filter)、渐变(Gradient)。SVG还支持动画特性,但我们推荐使用CSS3的动画,所以这里不做讲解。 SVG 过滤器元素 SVG过滤器(也称为滤镜)用来给SVG图形添加特效,和PS软件中的滤镜效果类似。SVG中可用的过滤器元素包括: <feBlend> - 图片混合 <feColorMatrix> - 颜色变换 <feCompone
丰富的过滤器插件的存在是 logstash 威力如此强大的重要因素。名为过滤器,其实提供的不单单是过滤的功能。在本章我们就会重点介绍几个插件,它们扩展了进入过滤器的原始数据,进行复杂的逻辑处理,甚至可以无中生有的添加新的 logstash 事件到后续的流程中去!
本文向大家介绍详解Angularjs filter过滤器,包括了详解Angularjs filter过滤器的使用技巧和注意事项,需要的朋友参考一下 系统的学习了一下angularjs,发现angularjs的有些思想根php的模块smarty很像,例如数据绑定,filter。如果对smarty比较熟悉的话,学习angularjs会比较容易一点。这篇简单说一下angularjs的filter功能,a
本文向大家介绍PHP内置过滤器FILTER使用实例,包括了PHP内置过滤器FILTER使用实例的使用技巧和注意事项,需要的朋友参考一下 在这一章节里, 我们来了解一个不太常用但功能强大的 PHP 特性: FILTERS, 该扩展可以用来验证(validation)和纠错(sanitization) 当数据源含有未知或不确定数据时,将变得非常有用, 最多是用来处理由客户从 HTML 表单(for