1.路由控制
/**
* @Description: 路由控制
* @author: wanjun
*/
public interface PrefixRouteHandler
{
/**
* 需要处理的控制器所处的包名
*/
String getPackageName();
/**
* 需要添加的前缀
*/
String getPrefix();
}
2.后台路由控制实例
import org.springframework.stereotype.Component;
/**
* @Description: 后台路由控制实例
* @author: wanjun
*/
@Component
public class AdminrRouteHandler implements PrefixRouteHandler
{
@Override
public String getPackageName()
{
// 扫码包的路径
return "com.booway.course.controller.admin";
}
@Override
public String getPrefix()
{
return "admin";
}
}
☆包路径下需要追加的访问前缀
3.支持路由管理的RequestMapping注解映射处理器
import java.lang.reflect.Method;
import java.util.HashSet;
import java.util.Set;
import org.springframework.util.CollectionUtils;
import org.springframework.web.servlet.mvc.method.RequestMappingInfo;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
/**
* @Description: 支持路由管理的RequestMapping注解映射处理器
* @author: wanjun
*/
public class PrefixRouteControlRequestMappingHandler extends RequestMappingHandlerMapping
{
/**
* 后台路由控制器
*/
protected Set<AdminrRouteHandler> adminrRouteHandlers;
/**
* 当前是否拥有后台路由控制器
*/
protected boolean hasAdminrRouteHandler = false;
@Override
public void afterPropertiesSet()
{
// 初始化版本控制器类型集合
initAdminrRouteHandlers();
super.afterPropertiesSet();
}
@Override
protected void initHandlerMethods()
{
super.initHandlerMethods();
}
@Override
protected RequestMappingInfo getMappingForMethod(Method method, Class<?> handlerType)
{
RequestMappingInfo info = super.getMappingForMethod(method, handlerType);
if (info != null)
{
final String packageName = handlerType.getPackage().getName();
for (AdminrRouteHandler adminrouteHandler : adminrRouteHandlers)
{
if (packageName.startsWith(adminrouteHandler.getPackageName()))
{
RequestMappingInfo versionInfo = buildRequestMappingInfo(adminrouteHandler.getPrefix());
info = versionInfo.combine(info);
return info;
}
}
}
return info;
}
/**
* 初始化版本控制器集合
*/
protected void initAdminrRouteHandlers()
{
adminrRouteHandlers = new HashSet<>(obtainApplicationContext().getBeansOfType(AdminrRouteHandler.class).values());
hasAdminrRouteHandler = !CollectionUtils.isEmpty(adminrRouteHandlers);
}
protected RequestMappingInfo buildRequestMappingInfo(String path)
{
return RequestMappingInfo.paths(path).build();
}
}
4.配置使用自定义路由url处理器
import org.springframework.boot.autoconfigure.web.servlet.WebMvcRegistrations;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;
import org.springframework.core.Ordered;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
import com.booway.course.common.handler.PrefixRouteControlRequestMappingHandler;
/**
* @Description: 配置使用自定义路由url处理器
* @author: wanjun
*/
@Configuration
@Order(Ordered.HIGHEST_PRECEDENCE)
public class RouteControlWebMvcConfigurer implements WebMvcRegistrations
{
@Override
public RequestMappingHandlerMapping getRequestMappingHandlerMapping() {
return new PrefixRouteControlRequestMappingHandler();
}
}
后面访问com.booway.course.controller.admin目录下的controller都需要带admin才可以进行访问,其他的类似 可以自定义访问前缀。