| 
					
				 | 
			
			
				@@ -7,14 +7,18 @@ import com.anji.plus.gaea.cache.CacheHelper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.anji.plus.gaea.utils.JwtBean; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.apache.commons.lang3.StringUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.beans.factory.annotation.Autowired; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.springframework.beans.factory.annotation.Value; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.core.Ordered; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.core.annotation.Order; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.stereotype.Component; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import javax.annotation.PostConstruct; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import javax.servlet.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import javax.servlet.http.HttpServletRequest; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import javax.servlet.http.HttpServletResponse; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.io.IOException; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.List; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.regex.Pattern; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * 简单的鉴权 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -28,11 +32,44 @@ public class TokenFilter implements Filter { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private JwtBean jwtBean; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /**跳过token验证和权限验证的url清单*/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Value("#{'${customer.skip-authenticate-urls}'.split(',')}") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private List<String> skipAuthenticateUrls; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private Pattern SKIP_AUTHENTICATE_PATTERN; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public void init(FilterConfig filterConfig) throws ServletException { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         Filter.super.init(filterConfig); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 根据名单,生成正则 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param skipUrlList 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private Pattern fitByList(List<String> skipUrlList){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(skipUrlList == null || skipUrlList.size() == 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return Pattern.compile(".*().*"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        StringBuffer patternString = new StringBuffer(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        patternString.append(".*("); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        skipUrlList.stream().forEach(url ->{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            patternString.append(url.trim()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            patternString.append("|"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(skipUrlList.size()>0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            patternString.deleteCharAt(patternString.length()-1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        patternString.append(").*"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return Pattern.compile(patternString.toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @PostConstruct 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private void postConstruct() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        SKIP_AUTHENTICATE_PATTERN = fitByList(skipAuthenticateUrls); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         HttpServletRequest request = (HttpServletRequest) servletRequest; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -43,47 +80,48 @@ public class TokenFilter implements Filter { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             response.sendRedirect("/index.html"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (!uri.startsWith("/login") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                && !uri.startsWith("/static") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                && !uri.startsWith("/file/download/") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                && !uri.contains("index.html")) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            //获取token 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            String authorization = request.getHeader("Authorization"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (StringUtils.isBlank(authorization)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                error(response); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            String username = jwtBean.getUsername(authorization); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//            String uuid = jwtBean.getUUID(authorization); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 不需要token验证和权限验证的url,直接放行 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        boolean skipAuthenticate = SKIP_AUTHENTICATE_PATTERN.matcher(uri).matches(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(skipAuthenticate){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            filterChain.doFilter(request, response); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (!cacheHelper.exist(username)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                error(response); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //获取token 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String authorization = request.getHeader("Authorization"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (StringUtils.isBlank(authorization)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            error(response); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            //延长有效期 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            cacheHelper.stringSetExpire(username, authorization, 3600); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String username = jwtBean.getUsername(authorization); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            String uuid = jwtBean.getUUID(authorization); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (!cacheHelper.exist(username)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            error(response); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            //在线体验版本 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (username.equals("guest") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    && !uri.endsWith("/dataSet/testTransform") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    && !uri.endsWith("/reportDashboard/getData") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    && !uri.startsWith("/dict") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    && !uri.startsWith("/dict") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //延长有效期 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        cacheHelper.stringSetExpire(username, authorization, 3600); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //在线体验版本 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (username.equals("guest") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                && !uri.endsWith("/dataSet/testTransform") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                && !uri.endsWith("/reportDashboard/getData") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                && !uri.startsWith("/dict") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                && !uri.startsWith("/dict") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //不允许删除 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String method = request.getMethod(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if ("post".equalsIgnoreCase(method) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    || "put".equalsIgnoreCase(method) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    || "delete".equalsIgnoreCase(method) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                //不允许删除 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                String method = request.getMethod(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if ("post".equalsIgnoreCase(method) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        || "put".equalsIgnoreCase(method) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        || "delete".equalsIgnoreCase(method) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    ResponseBean responseBean = ResponseBean.builder().code("50001").message("在线体验版本,不允许此操作。请自行下载本地运行").build(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    response.getWriter().print(JSONObject.toJSONString(responseBean)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ResponseBean responseBean = ResponseBean.builder().code("50001").message("在线体验版本,不允许此操作。请自行下载本地运行").build(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                response.getWriter().print(JSONObject.toJSONString(responseBean)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 |