java 配置过滤器_spring boot 配置Filter过滤器的方法

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 patterns = new ArrayList();

@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();

}

经过上面这俩步的配置,过滤器基本上就可以了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值