import lombok.extern.slf4j.Slf4j;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.mvc.method.RequestMappingInfo;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
import spring.cloud.oauth2.order.common.annotation.PassToken;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * @auth: zhanghy
 * @date: 2021/9/27 11:24
 * @desc: 初始化基础数据及系统配置等
 */
@Slf4j
@Component
public class InitializeTheSet implements ApplicationListener<ContextRefreshedEvent> {

	public static List<String> passUrl = new ArrayList<>();

	@Override
	public void onApplicationEvent(ContextRefreshedEvent arg0) {
		ApplicationContext applicationContext = arg0.getApplicationContext();
		RequestMappingHandlerMapping mapping = applicationContext.getBean(RequestMappingHandlerMapping.class);
		//获取url与类和方法的对应信息
		Map<RequestMappingInfo, HandlerMethod> map = mapping.getHandlerMethods();
		for (RequestMappingInfo info : map.keySet()){
			HandlerMethod handlerMethod = map.get(info);
			PassToken methodAnnotation = handlerMethod.getMethodAnnotation(PassToken.class);
			if(null != methodAnnotation){
				//获取url的Set集合,一个方法可能对应多个url
				Set<String> patterns = info.getPatternsCondition().getPatterns();
				// 这里可获取请求方式 Get,Post等等
//         		 Set<RequestMethod> methods = info.getMethodsCondition().getMethods();
				for (String url : patterns){
					passUrl.add(url);
				}
			}
		}
	}
}

 

最后修改于 2021-09-27 11:26:11
如果觉得我的文章对你有用,请随意赞赏
扫一扫支付
上一篇