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
}
}