SpringBoot在初始化filter之前加载加载部分bean

@Configuration
public class LoginFilter implements Filter {
	private RedisConfig redisConfig;
	
	/**
     * 封装,不需要过滤的list列表
     */
	private static final List<Pattern> PATTERNS = new ArrayList<Pattern>();
    
	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		
		PATTERNS.add(Pattern.compile("/user/login.html"));
		PATTERNS.add(Pattern.compile(".*[(\\.js)||(\\.css)||(\\.png)||(\\.jpg)]"));
		
		ServletContext servletContext = filterConfig.getServletContext();
	    ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(servletContext);
	    redisConfig = (RedisConfig) ctx.getBean("redisConfig");// 装配Bean
        }

	@Override
	public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException {
		HttpServletRequest request = (HttpServletRequest) servletRequest;
		HttpServletResponse response = (HttpServletResponse) servletResponse;
		String path = request.getRequestURI().substring(request.getContextPath().length()).replaceAll("[/]+$", "");

		if (isInclude(path)) {
			chain.doFilter(request, response);
			return;
		}
		RedisUtil redisUtil = redisConfig.redisUtil();
		Object object = redisUtil.get("loginUserInfo");
		if (object == null) {
			response.sendRedirect(request.getContextPath() + "/user/login.html");
			System.out.println("这里是需要处理的url进入的方法");
			return;
		} else {
			chain.doFilter(request, response);
		}
		
	}

	@Override
	public void destroy() {
		System.out.println("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;
    }


}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值