org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping#getHandlerMethods ( )源码实例Demo

下面列出了org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping#getHandlerMethods ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: api-mock-util   文件: RequestMappingService.java
public boolean hasApiRegistered(String api,String requestMethod){
    notBlank(api,"api cant not be null");
    notBlank(requestMethod,"requestMethod cant not be null");

    RequestMappingHandlerMapping requestMappingHandlerMapping = webApplicationContext.getBean(RequestMappingHandlerMapping.class);
    Map<RequestMappingInfo, HandlerMethod> map = requestMappingHandlerMapping.getHandlerMethods();
    for (RequestMappingInfo info : map.keySet()) {
        for(String pattern :info.getPatternsCondition().getPatterns()){
            if(pattern.equalsIgnoreCase(api)){ // 匹配url
                if(info.getMethodsCondition().getMethods().contains(getRequestMethod(requestMethod))){ // 匹配requestMethod
                    return true;
                }
            }
        }
    }

    return false;
}
 
public static HomeModuleExtension create(String pathPrefix, Collection<RequestMappingHandlerMapping> mappings) {
	HomeModuleExtension ext = new HomeModuleExtension();

	for (RequestMappingHandlerMapping mapping : mappings) {
		Map<RequestMappingInfo, HandlerMethod> handlerMethods = mapping.getHandlerMethods();
		for (RequestMappingInfo info : handlerMethods.keySet()) {
			Set<String> patterns = info.getPatternsCondition().getPatterns();
			for (String pattern : patterns) {
				if (pattern.equals("/error") || pattern.contains("*")) {
					continue;
				}

				if (pathPrefix == null) {
					ext.addPath(pattern);
				} else if (pattern.startsWith(pathPrefix)) {
					ext.addPath(pattern.substring(pathPrefix.length()));
				}
			}
		}
	}

	return ext;
}
 
@Override
public void onApplicationEvent ( ContextRefreshedEvent event ) {
	final RequestMappingHandlerMapping requestMappingHandlerMapping =
		applicationContext.getBean( RequestMappingHandlerMapping.class );
	final Map< RequestMappingInfo, HandlerMethod > handlerMethods =
		requestMappingHandlerMapping.getHandlerMethods();

	this.handlerMethods = handlerMethods;

	handlerMethods.keySet().forEach( mappingInfo -> {
		Map< Set< String >, Set< RequestMethod > > mapping = Collections.singletonMap(
			mappingInfo.getPatternsCondition().getPatterns() ,
			this.getMethods( mappingInfo.getMethodsCondition().getMethods() )
		);
		requestMappingInfos.add( mapping );
	} );

	requestMappingUris.addAll(
		handlerMethods.keySet()
					  .parallelStream()
					  .map( mappingInfo -> mappingInfo.getPatternsCondition().getPatterns() )
					  .collect( Collectors.toList() )
	);

}
 
源代码4 项目: Zebra   文件: ZebraListener.java
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
    //获取上下文
    ServletContext sc = servletContextEvent.getServletContext();
    ApplicationContext ac = WebApplicationContextUtils.getRequiredWebApplicationContext(sc);

    //获取Mapping(就是存放了所有的Controoler中@Path注解的Url映射)
    RequestMappingHandlerMapping mapping = ac.getBean(RequestMappingHandlerMapping.class);

    //遍历所有的handlerMethods(为了从mapping中取出Url,交给Zookeeper进行注册)
    Map<RequestMappingInfo, HandlerMethod> handlerMethods = mapping.getHandlerMethods();
    for (RequestMappingInfo key : handlerMethods.keySet()) {
        String serviceName = key.getName();
        if(!StringUtils.isEmpty(serviceName)){
            //不等于空,则拿到了服务名称,则立即注册
            registry.register(serviceName,String.format("%s:%d",serverAddress,serverPort));
        }
    }
}
 
源代码5 项目: Zebra   文件: ZebraListener.java
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
    //向注册中心销毁自己的服务信息

    //获取上下文
    ServletContext sc = servletContextEvent.getServletContext();
    //获取ac
    ApplicationContext ac = WebApplicationContextUtils.getRequiredWebApplicationContext(sc);

    //获取Mapping(就是存放了所有的Controoler中@Path注解的Url映射)
    RequestMappingHandlerMapping mapping = ac.getBean(RequestMappingHandlerMapping.class);
    //遍历所有的handlerMethods(为了从mapping中取出Url,交给Zookeeper进行注册)
    Map<RequestMappingInfo, HandlerMethod> handlerMethods = mapping.getHandlerMethods();
    for (RequestMappingInfo key : handlerMethods.keySet()) {
        String serviceName = key.getName();
        if (!StringUtils.isEmpty(serviceName)) {
            logger.info("卸载服务:" + serviceName);
            //不等于空,表示找到了配置中心的服务地址,则拿到了服务名称,要进行立即注册
            registry.unRegister(serviceName, String.format("%s:%d", serverAddress, serverPort));
        }
    }
}
 
源代码6 项目: Shiro-Action   文件: CommonPageController.java
/**
 * 获取 @RequestMapping 中配置的所有 URL.
 * @param keyword   关键字: 过滤条件
 * @return          URL 列表.
 */
@GetMapping("/system/urls")
@ResponseBody
public ResultBean getUrl(@RequestParam(defaultValue = "") String keyword) {
    RequestMappingHandlerMapping mapping = applicationContext.getBean(RequestMappingHandlerMapping.class);
    // 获取url与类和方法的对应信息
    Map<RequestMappingInfo, HandlerMethod> map = mapping.getHandlerMethods();
    Set<UrlVO> urlSet = new HashSet<>();

    for (Map.Entry<RequestMappingInfo, HandlerMethod> m : map.entrySet()) {

        // URL 类型, JSON 还是 VIEW
        String type = "view";
        if (isResponseBodyUrl(m.getValue())){
            type = "json";
        }

        // URL 地址和 URL 请求 METHOD
        RequestMappingInfo info = m.getKey();
        PatternsRequestCondition p = info.getPatternsCondition();
        // 一个 @RequestMapping, 可能有多个 URL.
        for (String url : p.getPatterns()) {
            // 根据 keyword 过滤 URL
            if (url.contains(keyword)) {

                // 获取这个 URL 支持的所有 http method, 多个以逗号分隔, 未配置返回 ALL.
                Set<RequestMethod> methods = info.getMethodsCondition().getMethods();
                String method = "ALL";
                if (methods.size() != 0) {
                    method = StringUtils.collectionToDelimitedString(methods, ",");
                }
                urlSet.add(new UrlVO(url, method, type));
            }
        }
    }
    return ResultBean.success(urlSet);
}
 
源代码7 项目: FEBS-Security   文件: MenuServiceImpl.java
@Override
public List<Map<String, String>> getAllUrl(String p1) {
    RequestMappingHandlerMapping mapping = applicationContext.getBean(RequestMappingHandlerMapping.class);
    //获取 url与类和方法的对应信息
    Map<RequestMappingInfo, HandlerMethod> map = mapping.getHandlerMethods();
    List<Map<String, String>> urlList = new ArrayList<>();
    for (Map.Entry<RequestMappingInfo, HandlerMethod> entry : map.entrySet()) {
        RequestMappingInfo info = entry.getKey();
        HandlerMethod handlerMethod = map.get(info);
        PreAuthorize permissions = handlerMethod.getMethodAnnotation(PreAuthorize.class);
        String perms = "";
        if (null != permissions) {
            String value = permissions.value();
            value = StringUtils.substringBetween(value, "hasAuthority(", ")");
            perms = StringUtils.join(value, ",");
        }
        Set<String> patterns = info.getPatternsCondition().getPatterns();
        for (String url : patterns) {
            Map<String, String> urlMap = new HashMap<>();
            urlMap.put("url", url.replaceFirst("\\/", ""));
            urlMap.put("perms", perms);
            urlList.add(urlMap);
        }
    }
    return urlList;

}
 
源代码8 项目: x7   文件: X7Env.java
private static void getMapPaths() {
    RequestMappingHandlerMapping rmhp = getObject(RequestMappingHandlerMapping.class);
    if (rmhp != null) {
        Map<RequestMappingInfo, HandlerMethod> map = rmhp.getHandlerMethods();
        for (RequestMappingInfo info : map.keySet()) {
            String mapping = info.getPatternsCondition().toString().replace("[", "").replace("]", "");
            HandlerMethod hm = map.get(info);
            mappingMap.put(hm.getMethod(), mapping);
        }
    }
}
 
源代码9 项目: newblog   文件: IndexController.java
@RequestMapping("getAllUrl")
@ResponseBody
public Set<String> getAllUrl(HttpServletRequest request) {
    Set<String> result = new HashSet<>();
    WebApplicationContext wc = (WebApplicationContext) request.getAttribute(DispatcherServlet.WEB_APPLICATION_CONTEXT_ATTRIBUTE);
    RequestMappingHandlerMapping bean = wc.getBean(RequestMappingHandlerMapping.class);
    Map<RequestMappingInfo, HandlerMethod> handlerMethods = bean.getHandlerMethods();
    for (RequestMappingInfo rmi : handlerMethods.keySet()) {
        PatternsRequestCondition pc = rmi.getPatternsCondition();
        Set<String> pSet = pc.getPatterns();
        result.addAll(pSet);
    }
    String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort();
    return result;
}
 
public static HomeModuleExtension create(RequestMappingHandlerMapping mapping) {
	HomeModuleExtension ext = new HomeModuleExtension();

	Map<RequestMappingInfo, HandlerMethod> handlerMethods = mapping.getHandlerMethods();
	for (RequestMappingInfo info : handlerMethods.keySet()) {
		Set<String> patterns = info.getPatternsCondition().getPatterns();
		for (String pattern : patterns) {
			if (pattern.equals("/error"))
				continue;
			ext.addPath(pattern);
		}
	}

	return ext;
}
 
源代码11 项目: smart-admin   文件: PrivilegeRequestUrlService.java
@PostConstruct
public void initAllUrl() {
    this.privilegeUrlDTOList.clear();

    RequestMappingHandlerMapping mapping = applicationContext.getBean(RequestMappingHandlerMapping.class);
    //获取url与类和方法的对应信息
    Map<RequestMappingInfo, HandlerMethod> map = mapping.getHandlerMethods();
    map.forEach((info, handlerMethod) -> {
        //只对Rest 服务进行权限验证
        RestController restAnnotation = AnnotationUtils.findAnnotation(handlerMethod.getMethod().getDeclaringClass(), RestController.class);
        if (restAnnotation == null) {
            ResponseBody responseBody = handlerMethod.getMethod().getAnnotation(ResponseBody.class);
            if (responseBody == null) {
                return;
            }
        }
        //获取url的Set集合,一个方法可能对应多个url
        Set<String> patterns = info.getPatternsCondition().getPatterns();
        if (CollectionUtils.isEmpty(patterns)) {
            return;
        }
        String className = (String) handlerMethod.getBean();
        String methodName = handlerMethod.getMethod().getName();
        List<String> list = SmartStringUtil.splitConvertToList(className, "\\.");
        String controllerName = list.get(list.size() - 1);
        String name = controllerName + "." + methodName;

        ApiOperation apiOperation = handlerMethod.getMethod().getAnnotation(ApiOperation.class);
        String methodComment = null;
        if (apiOperation != null) {
            methodComment = apiOperation.value();
        } else {
            ApiModelProperty apiModelProperty = handlerMethod.getMethod().getAnnotation(ApiModelProperty.class);
            if (apiModelProperty != null) {
                methodComment = apiModelProperty.value();
            } else {
                methodComment = handlerMethod.getMethod().getName();
            }
        }
        Set<String> urlSet = this.getUrlSet(patterns);
        for (String url : urlSet) {
            PrivilegeRequestUrlVO privilegeUrlDTO = new PrivilegeRequestUrlVO();
            privilegeUrlDTO.setUrl(url);
            privilegeUrlDTO.setName(name);
            privilegeUrlDTO.setComment(methodComment);
            this.privilegeUrlDTOList.add(privilegeUrlDTO);
        }

    });
}
 
源代码12 项目: yshopmall   文件: Knife4jController.java
/** @deprecated */
@Deprecated
private void initGlobalRequestMappingArray(WebApplicationContext wc, SwaggerExt swaggerExt) {
    if (this.globalHandlerMappings.size() == 0) {
        String parentPath = "";
        if (!StringUtils.isEmpty(swaggerExt.getBasePath()) && !"/".equals(swaggerExt.getBasePath())) {
            parentPath = parentPath + swaggerExt.getBasePath();
        }

        Map<String, HandlerMapping> requestMappings = BeanFactoryUtils.beansOfTypeIncludingAncestors(wc, HandlerMapping.class, true, false);
        Iterator<HandlerMapping> var5 = requestMappings.values().iterator();

        while(true) {
            HandlerMapping handlerMapping;
            do {
                if (!var5.hasNext()) {
                    return;
                }
                handlerMapping = var5.next();
            } while(!(handlerMapping instanceof RequestMappingHandlerMapping));
            RequestMappingHandlerMapping rmhMapping = (RequestMappingHandlerMapping)handlerMapping;
            Map<RequestMappingInfo, HandlerMethod> handlerMethods = rmhMapping.getHandlerMethods();
            for (RequestMappingInfo rmi : handlerMethods.keySet()) {
                PatternsRequestCondition prc = rmi.getPatternsCondition();
                Set<RequestMethod> restMethods = rmi.getMethodsCondition().getMethods();
                Set<String> patterns = prc.getPatterns();
                HandlerMethod handlerMethod = (HandlerMethod) handlerMethods.get(rmi);

                String url;
                Class clazz;
                Method method;
                for (Iterator<String> var15 = patterns.iterator(); var15.hasNext(); this.globalHandlerMappings.add(new RestHandlerMapping(parentPath + url, clazz, method, restMethods))) {
                    url = var15.next();
                    clazz = ClassUtils.getUserClass(handlerMethod.getBeanType());
                    method = ClassUtils.getMostSpecificMethod(handlerMethod.getMethod(), clazz);
                    if (LOGGER.isDebugEnabled()) {
                        LOGGER.debug("url:" + url + "\r\nclass:" + clazz.toString() + "\r\nmethod:" + method.toString());
                    }
                }
            }
        }
    }

}
 
源代码13 项目: FlyCms   文件: PermissionService.java
@Transactional
public boolean getSyncAllPermission(){
    RequestMappingHandlerMapping mapping = applicationContext.getBean(RequestMappingHandlerMapping.class);
    //获取url与类和方法的对应信息
    Map<RequestMappingInfo,HandlerMethod> map = mapping.getHandlerMethods();
    List<String> datalist = new ArrayList<String>();
    List<String> newlist = new ArrayList<String>();
    for (RequestMappingInfo info : map.keySet()){
        //获取url的Set集合,一个方法可能对应多个url
        Set<String> patterns = info.getPatternsCondition().getPatterns();
        for (String url : patterns){
            Permission per=new Permission();
            String urlstr=info.getPatternsCondition().toString();
            //替换花括号和里面所有内容为*
            urlstr=urlstr.replaceAll("\\{([^\\}]+)\\}", "*");
            //替换前后中括号
            urlstr=urlstr.replaceAll("[\\[\\]]", "");
            // 只处理后台管理 action,其它跳过
            if (urlstr.startsWith("/system")) {
                per.setActionKey(urlstr);
                per.setController(map.get(info).getBean().toString());
                String str=per.getActionKey();
                String[] array=str.split("\\|\\|");
                for(String s:array){
                    if(s!=null){
                        if (!checkPermission(StringUtils.deleteWhitespace(s), per.getController())) {
                            per.setActionKey(StringUtils.deleteWhitespace(s));
                            SnowFlake snowFlake = new SnowFlake(2, 3);
                            per.setId(snowFlake.nextId());
                            int permissionId=permissionDao.addPermission(per);
                            if(!this.markAssignedPermissions(272835742965968896L,per.getId())){
                                //默认超级管理员组添加新的权限关联,272835742965968896为超级管理员组ID
                                groupDao.addGroupPermission(272835742965968896L,per.getId());
                            }
                        }
                        //添加当前Controller里所有的权限路径到list里
                        newlist.add(StringUtils.deleteWhitespace(s));
                    }
                }
            }
        }
    }

    //处理数据库多余的权限路径数据
    List<Permission> allList=this.getAllPermissions();
    for(Permission date : allList){
        datalist.add(date.getActionKey());
    }
    //检查并删除
    this.checkAndDeletePermission(newlist,datalist);
    return true;
}
 
源代码14 项目: FlyCms   文件: UserPermissionService.java
@Transactional
public boolean getSyncAllPermission(){
    RequestMappingHandlerMapping mapping = applicationContext.getBean(RequestMappingHandlerMapping.class);
    //获取url与类和方法的对应信息
    Map<RequestMappingInfo,HandlerMethod> map = mapping.getHandlerMethods();
    List<String> datalist = new ArrayList<String>();
    List<String> newlist = new ArrayList<String>();
    for (RequestMappingInfo info : map.keySet()){
        //获取url的Set集合,一个方法可能对应多个url
        Set<String> patterns = info.getPatternsCondition().getPatterns();
        for (String url : patterns){
            UserPermission per=new UserPermission();
            String urlstr=info.getPatternsCondition().toString();
            //替换花括号和里面所有内容为*
            urlstr=urlstr.replaceAll("\\{([^\\}]+)\\}", "*");
            //替换前后中括号
            urlstr=urlstr.replaceAll("[\\[\\]]", "");
            // 只处理后台管理 action,其它跳过
            if (!urlstr.startsWith("/system") || urlstr.startsWith("/ucenter")) {
                per.setActionKey(urlstr);
                per.setController(map.get(info).getBean().toString());
                String str=per.getActionKey();
                String[] array=str.split("\\|\\|");
                for(String s:array){
                    if(s!=null){
                        if (!checkPermission(StringUtils.deleteWhitespace(s), per.getController())) {
                            per.setActionKey(StringUtils.deleteWhitespace(s));
                            SnowFlake snowFlake = new SnowFlake(2, 3);
                            per.setId(snowFlake.nextId());
                            int permissionId=userPermissionDao.addPermission(per);
                        }
                        //添加当前Controller里所有的权限路径到list里
                        newlist.add(StringUtils.deleteWhitespace(s));
                    }
                }
            }
        }
    }

    //处理数据库多余的权限路径数据
    List<UserPermission> allList=this.getAllPermissions();
    for(UserPermission date : allList){
        datalist.add(date.getActionKey());
    }
    //检查并删除
    this.checkAndDeletePermission(newlist,datalist);
    return true;
}
 
源代码15 项目: java-trader   文件: NodeServiceImpl.java
/**
 * 根据path找到并发现REST Controller
 */
public static NodeMessage controllerInvoke(RequestMappingHandlerMapping requestMappingHandlerMapping, NodeMessage reqMessage) {
    String path = ConversionUtil.toString(reqMessage.getField(NodeMessage.FIELD_PATH));
    //匹配合适的
    Object result = null;
    Throwable t = null;
    RequestMappingInfo reqMappingInfo=null;
    HandlerMethod reqHandlerMethod = null;
    Map<RequestMappingInfo, HandlerMethod> map = requestMappingHandlerMapping.getHandlerMethods();
    for(RequestMappingInfo info:map.keySet()) {
        List<String> matches = info.getPatternsCondition().getMatchingPatterns(path);
        if ( matches.isEmpty() ) {
            continue;
        }
        reqMappingInfo = info;
        reqHandlerMethod = map.get(info);
        break;
    }

    if ( reqMappingInfo==null ) {
        t = new Exception("Controller for "+path+" is not found");
        logger.error("Controller for "+path+" is not found");
    } else {
        MethodParameter[] methodParams = reqHandlerMethod.getMethodParameters();
        Object[] params = new Object[methodParams.length];
        try{
            for(int i=0;i<methodParams.length;i++) {
                MethodParameter param = methodParams[i];
                String paramName = param.getParameterName();
                params[i] = ConversionUtil.toType(param.getParameter().getType(), reqMessage.getField(paramName));
                if ( params[i]==null && !param.isOptional() ) {
                    throw new IllegalArgumentException("Method parameter "+paramName+" is missing");
                }
            }
            result = reqHandlerMethod.getMethod().invoke(reqHandlerMethod.getBean(), params);
        }catch(Throwable ex ) {
            if ( ex instanceof InvocationTargetException ) {
                t = ((InvocationTargetException)ex).getTargetException();
            }else {
                t = ex;
            }
            logger.error("Invoke controller "+path+" with params "+Arrays.asList(params)+" failed: "+t, t);
        }
    }
    NodeMessage respMessage = reqMessage.createResponse();
    if ( t!=null ) {
        respMessage.setErrCode(-1);
        respMessage.setErrMsg(t.toString());
    } else {
        respMessage.setField(NodeMessage.FIELD_RESULT, JsonUtil.object2json(result));
    }
    return respMessage;
}