自定义拦截器csrf

This commit is contained in:
xwolf
2018-03-26 17:14:58 +08:00
parent cf8bf23839
commit 934e446ffb
2 changed files with 84 additions and 0 deletions
@@ -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("/");
}
}
@@ -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 {
}
}