import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.kangxiinfo.framework.common.util.StringUtils;
* @time 2018-10-19 14:07:44
public class RestAuthorizeFilter implements Filter {
* 不需要被過濾器攔截的頁面 ,主要用于靜態(tài)資源的放行
* 在web.xml中配置filter的init-param
private String excludedPaths;
private String [] excludedPathArray;
public void init(FilterConfig filterConfig) throws ServletException {
// 初始化時(shí)讀取web.xml中配置的init-param
excludedPaths = filterConfig.getInitParameter("excludedPaths");
if(!StringUtils.isNullOrBlank(excludedPaths)){
excludedPathArray = excludedPaths.split(",");
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
if (!isFilterExcludeRequest(request)) {
filterChain.doFilter(servletRequest, servletResponse);
// TODO Auto-generated method stub
private boolean isFilterExcludeRequest(HttpServletRequest request) {
if(null != excludedPathArray && excludedPathArray.length > 0) {
String url = request.getRequestURI();
for (String ecludedUrl : excludedPathArray) {
if (ecludedUrl.startsWith("*.")) {
// 如果配置的是后綴匹配, 則把前面的*號干掉,然后用endWith來判斷
if(url.endsWith(ecludedUrl.substring(1))){
} else if (ecludedUrl.endsWith("/*")) {
if(!ecludedUrl.startsWith("/")) {
ecludedUrl = "/" + ecludedUrl;
// 如果配置是前綴匹配, 則把最后的*號干掉,然后startWith來判斷
String prffixStr = request.getContextPath() + ecludedUrl.substring(0, ecludedUrl.length() - 1);
if(url.startsWith(prffixStr)) {
// 如果不是前綴匹配也不是后綴匹配,那就是全路徑匹配
if(!ecludedUrl.startsWith("/")) {
ecludedUrl = "/" + ecludedUrl;
String targetUrl = request.getContextPath() + ecludedUrl;
if(url.equals(targetUrl)) {