zuul創建filter

package com.filter;

import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;

@Configuration
@Component
public class CorsConfig {

	@Bean
	public CorsFilter corsFilter() {
		final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
		final CorsConfiguration config = new CorsConfiguration();
		config.setAllowCredentials(true);
		config.addAllowedOrigin("*");
		config.addAllowedHeader("*");
		config.setMaxAge(18000L);
		config.addAllowedMethod("*");
		source.registerCorsConfiguration("/**", config);
		return new CorsFilter(source);
	}
// "/shopUser/load"
	private  String[] addPathPatterns = {"/shopUser/load" };


	@Bean
	public FilterRegistrationBean<CustomerFilter> registFilter() {
		FilterRegistrationBean<CustomerFilter> registration = new FilterRegistrationBean<CustomerFilter>();
		registration.setFilter(new CustomerFilter());
		registration.addUrlPatterns(addPathPatterns);
		registration.setName("customerFilter");
		registration.setOrder(1);

		return registration;
	}
}

CustomerFilter類:

package com.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import org.springframework.web.context.support.WebApplicationContextUtils;


@Component
public class CustomerFilter implements Filter {
	
	private BaseRedisService baseRedisService;

	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
        ServletContext servletContext = filterConfig.getServletContext();
        ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(servletContext);
        baseRedisService=ctx.getBean("baseRedisService",BaseRedisService.class);

	}
	
	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		long start = System.currentTimeMillis();
		HttpServletRequest req = (HttpServletRequest) request;
		HttpServletResponse res=(HttpServletResponse)response;
		String token=req.getHeader("token");
		if(!StringUtils.isEmpty(token)) {
			String userguid=baseRedisService.get(token);
			if(StringUtils.isEmpty(userguid)) {
				//request.getRequestDispatcher("error/notlogin").forward(request, response);
			}else {
				//chain.doFilter(request, response);
			}
		}else {
			//
		   // req.setAttribute("Access-Control-Allow-Origin", "*");
			
			res.addHeader("Access-Control-Allow-Origin", "*");
			res.addHeader("access-control-allow-methods", "*");
			res.addHeader("access-control-expose-headers", "Authorization");
			res.addHeader("Access-Control-Allow-Credentials", "true");
			res.addHeader("Access-Control-Allow-Headers", "*");
		    res.addHeader("Access-Control-Max-Age", "1728000");
		    res.addHeader("Content-Type", "application/json;charset=utf-8");

			//res.sendRedirect("/error/notlogin");
		    //request.getRequestDispatcher("/error/notlogin").forward(request, res);
		}
		chain.doFilter(request, response);
		
		System.out.println("Execute cost=" + (System.currentTimeMillis() - start));
	}

	@Override
	public void destroy() {
		// TODO Auto-generated method stub

	}
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章