自定义拦截器csrf
This commit is contained in:
@@ -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 {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user