个人记录,如有错误,敬请指出
项目环境:spring boot+shiro+jwt
简单方式直接通过nginx对Referer进行校验拦截即可,本文不做讲解
1、创建CsrfFilter
import org.springframework.web.filter.OncePerRequestFilter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
public class CsrfFilter extends OncePerRequestFilter {
private static final String CSRF_TOKEN = "X-Csrf-Token";
/**
* 需要排除的接口
*/
private static final List<String> ignoreCsrfList = new ArrayList<String>();
private static final List<String> accessRequestList = Arrays.asList(new String[]{"GET", "HEAD", "TRACE", "OPTIONS"});
private Collection<String> domains;
static {
ignoreCsrfList.add("/sys/login");
ignoreCsrfList.add("/sys/logout");
}
public CsrfFilter(Collection<String> domains) {
this.domains = domains;
}
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
Strin