// Path: src/main/java/cn/iflyapi/blog/config/JwtInterceptor.java
// public class JwtInterceptor implements HandlerInterceptor {
// 
//     private final Logger logger = LoggerFactory.getLogger(JwtInterceptor.class);
// 
//     private List<String> excludedUrl = new ArrayList<>();
// 
//     public void register(String url) {
//         excludedUrl.add(url);
//     }
// 
//     @Override
//     public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
//         try {
//             //过滤 OPTIONS 请求
//             if (HttpMethod.OPTIONS.name().equals(httpServletRequest.getMethod())) {
//                 return true;
//             }
//             System.out.println(excludedUrl.toString());
//             String currentPath = httpServletRequest.getMethod() + httpServletRequest.getRequestURI();
//             for (String target : excludedUrl) {
//                 if (pathMatch(currentPath, target)) {
//                     return true;
//                 }
//             }
// 
//             String token = httpServletRequest.getHeader("Authorization");
// 
//             if (StringUtils.isEmpty(token)) {
//                 logger.error("token validate failed, no auth info in http header");
//                 return setNoAuth(httpServletResponse);
//             }
// 
//             Map<String, Claim> map = JwtUtils.verify(token);
//             if (map != null) {
//                 return true;
//             }
//         } catch (Exception e) {
//             logger.error("JWT验证失败 {}", e.getMessage());
//             return setNoAuth(httpServletResponse);
//         }
// 
//         return setNoAuth(httpServletResponse);
//     }
// 
//     /**
//      * 设置response 返回需要登录的标识
//      *
//      * @param response
//      */
//     private boolean setNoAuth(HttpServletResponse response) throws IOException {
//         response.setHeader("Content-Type", MediaType.APPLICATION_JSON_UTF8_VALUE);
//         response.setHeader("Access-Control-Allow-Origin", "*");
//         response.setHeader("Access-Control-Allow-Credentials", "true");
//         response.getWriter().write(JSONObject.toJSONString(JSONResult.fail(HttpStatus.UNAUTHORIZED.value(), HttpStatus.UNAUTHORIZED.getReasonPhrase()), SerializerFeature.WriteMapNullValue));
//         return false;
//     }
// 
//     /**
//      * 匹配路径
//      *
//      * @param current 当前请求路径
//      * @param target  目标开放路径
//      * @return boolean
//      */
//     private boolean pathMatch(String current, String target) {
//         if (current.equals(target)) {
//             return true;
//         }
//         if (!target.contains("*")) {
//             return false;
//         }
// 
//         int index = target.indexOf("*");
//         if (target.contains("**")) {
//             String prefixPath = target.substring(0, index);
//             if (current.startsWith(prefixPath)) {
//                 return true;
//             }
//         } else {
//             String[] targets = target.split("/");
//             String[] currents = current.split("/");
//             if (targets.length == currents.length) {
//                 for (int i = 0; i < targets.length; i++) {
//                     if (!targets[i].equals("*")) {
//                         if (!targets[i].equals(currents[i])) {
//                             return false;
//                         }
//                     }
//                 }
//                 return true;
//             }
// 
//         }
// 
//         return false;
//     }
// 
//     public static void main(String[] args) {
//         String s = "/users/*";
//         System.out.println(s.indexOf("*"));
//         System.out.println(s.substring(0, s.indexOf("*")));
//         System.out.println(s.substring(s.indexOf("*")+1).equals(""));
//         System.out.println(s.contains("**"));
//         System.out.println(s.split("/").length);
// 
//         String p = "users";
//         System.out.println(p.split("/").length);
//         System.out.println(p.split("/")[0]);
// 
//         String m = "/users/*/subjects";
//         System.out.println();
//     }
// 
//     @Override
//     public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) {
// 
//     }
// 
//     @Override
//     public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
// 
//     }
// }


import cn.iflyapi.blog.config.JwtInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.http.HttpMethod;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.*;
import java.lang.reflect.Method;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
package cn.iflyapi.blog.annotation;



/**
 * @author flyhero
 * @date 2018-12-20 12:55 PM
 */
@Component
public class OpenApiScan implements ApplicationListener<ApplicationReadyEvent> {

    @Autowired
// Path: src/main/java/cn/iflyapi/blog/config/JwtInterceptor.java
// public class JwtInterceptor implements HandlerInterceptor {
// 
//     private final Logger logger = LoggerFactory.getLogger(JwtInterceptor.class);
// 
//     private List<String> excludedUrl = new ArrayList<>();
// 
//     public void register(String url) {
//         excludedUrl.add(url);
//     }
// 
//     @Override
//     public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
//         try {
//             //过滤 OPTIONS 请求
//             if (HttpMethod.OPTIONS.name().equals(httpServletRequest.getMethod())) {
//                 return true;
//             }
//             System.out.println(excludedUrl.toString());
//             String currentPath = httpServletRequest.getMethod() + httpServletRequest.getRequestURI();
//             for (String target : excludedUrl) {
//                 if (pathMatch(currentPath, target)) {
//                     return true;
//                 }
//             }
// 
//             String token = httpServletRequest.getHeader("Authorization");
// 
//             if (StringUtils.isEmpty(token)) {
//                 logger.error("token validate failed, no auth info in http header");
//                 return setNoAuth(httpServletResponse);
//             }
// 
//             Map<String, Claim> map = JwtUtils.verify(token);
//             if (map != null) {
//                 return true;
//             }
//         } catch (Exception e) {
//             logger.error("JWT验证失败 {}", e.getMessage());
//             return setNoAuth(httpServletResponse);
//         }
// 
//         return setNoAuth(httpServletResponse);
//     }
// 
//     /**
//      * 设置response 返回需要登录的标识
//      *
//      * @param response
//      */
//     private boolean setNoAuth(HttpServletResponse response) throws IOException {
//         response.setHeader("Content-Type", MediaType.APPLICATION_JSON_UTF8_VALUE);
//         response.setHeader("Access-Control-Allow-Origin", "*");
//         response.setHeader("Access-Control-Allow-Credentials", "true");
//         response.getWriter().write(JSONObject.toJSONString(JSONResult.fail(HttpStatus.UNAUTHORIZED.value(), HttpStatus.UNAUTHORIZED.getReasonPhrase()), SerializerFeature.WriteMapNullValue));
//         return false;
//     }
// 
//     /**
//      * 匹配路径
//      *
//      * @param current 当前请求路径
//      * @param target  目标开放路径
//      * @return boolean
//      */
//     private boolean pathMatch(String current, String target) {
//         if (current.equals(target)) {
//             return true;
//         }
//         if (!target.contains("*")) {
//             return false;
//         }
// 
//         int index = target.indexOf("*");
//         if (target.contains("**")) {
//             String prefixPath = target.substring(0, index);
//             if (current.startsWith(prefixPath)) {
//                 return true;
//             }
//         } else {
//             String[] targets = target.split("/");
//             String[] currents = current.split("/");
//             if (targets.length == currents.length) {
//                 for (int i = 0; i < targets.length; i++) {
//                     if (!targets[i].equals("*")) {
//                         if (!targets[i].equals(currents[i])) {
//                             return false;
//                         }
//                     }
//                 }
//                 return true;
//             }
// 
//         }
// 
//         return false;
//     }
// 
//     public static void main(String[] args) {
//         String s = "/users/*";
//         System.out.println(s.indexOf("*"));
//         System.out.println(s.substring(0, s.indexOf("*")));
//         System.out.println(s.substring(s.indexOf("*")+1).equals(""));
//         System.out.println(s.contains("**"));
//         System.out.println(s.split("/").length);
// 
//         String p = "users";
//         System.out.println(p.split("/").length);
//         System.out.println(p.split("/")[0]);
// 
//         String m = "/users/*/subjects";
//         System.out.println();
//     }
// 
//     @Override
//     public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) {
// 
//     }
// 
//     @Override
//     public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
// 
//     }
// }


// Path: src/main/java/cn/iflyapi/blog/annotation/OpenApiScan.java
import cn.iflyapi.blog.config.JwtInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.http.HttpMethod;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.*;
import java.lang.reflect.Method;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

package cn.iflyapi.blog.annotation;



/**
 * @author flyhero
 * @date 2018-12-20 12:55 PM
 */
@Component
public class OpenApiScan implements ApplicationListener<ApplicationReadyEvent> {

    @Autowired
    private JwtInterceptor jwtInterceptor;