diff --git a/src/main/java/com/xwolf/boot/config/InterceptorConfig.java b/src/main/java/com/xwolf/boot/config/InterceptorConfig.java new file mode 100644 index 0000000..54de9ac --- /dev/null +++ b/src/main/java/com/xwolf/boot/config/InterceptorConfig.java @@ -0,0 +1,31 @@ +package com.xwolf.boot.config; + +import com.xwolf.boot.interceptor.CsrfInterceptor; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; + +/** + * 拦截器配置 + * @author xwolf + * @version 1.0 + * @since 1.8 + */ +@Configuration +public class InterceptorConfig extends WebMvcConfigurerAdapter { + + /** + * CSRF拦截 + * @return + */ + @Bean + CsrfInterceptor csrfInterceptor(){ + return new CsrfInterceptor(); + } + + @Override + public void addInterceptors(InterceptorRegistry registry) { + registry.addInterceptor(csrfInterceptor()).addPathPatterns("/"); + } +} diff --git a/src/main/java/com/xwolf/boot/interceptor/CsrfInterceptor.java b/src/main/java/com/xwolf/boot/interceptor/CsrfInterceptor.java new file mode 100644 index 0000000..5152da0 --- /dev/null +++ b/src/main/java/com/xwolf/boot/interceptor/CsrfInterceptor.java @@ -0,0 +1,53 @@ +package com.xwolf.boot.interceptor; + +import com.xwolf.boot.utils.StringUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.servlet.HandlerInterceptor; +import org.springframework.web.servlet.ModelAndView; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.Arrays; + +/** + * csrf拦截referer + * @author xwolf + * @version 1.0 + * @since 1.8 + */ +@Slf4j +public class CsrfInterceptor implements HandlerInterceptor { + + /** + * 默认白名单 + */ + private static final String[] WHITE_URLS ={"baidu.com","localhost.com"}; + + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws Exception { + String userAgent = request.getHeader("User-Agent"); + //此处仅处理referer + String referer = request.getHeader("Referer"); + log.info("preHandle request agent={}, referer={}",userAgent,referer); + boolean contains = true ; + if ( StringUtils.isNotBlank(referer) ){ + + final String host = referer.split("://")[1].split("/")[0]; + + contains = Arrays.stream(WHITE_URLS).anyMatch( u -> u.contains(host)); + } + + return contains; + } + + @Override + public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception { + + } + + @Override + public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception { + + } + +}