excludepathpatterns方法

合集下载

springboot:给接口增加签名验证(springboot2.3.1)

springboot:给接口增加签名验证(springboot2.3.1)

springboot:给接⼝增加签名验证(springboot2.3.1)⼀,为什么要给接⼝做签名验证?1,app客户端在与服务端通信时,通常都是以接⼝的形式实现,这种形式的安全⽅⾯有可能出现以下问题:被⾮法访问(例如:发短信的接⼝通常会被利⽤来垃圾短信)被重复访问 (例如:在提交订单时多点了⼏次提交按钮)⽽客户端存在的弱点是:对接⼝站的地址不能轻易修改,所以我们需要针对从app到接⼝的接⼝做签名验证,接⼝不能随便app之外的应⽤访问2,要注意的地⽅:我们给app分配⼀个app_id和⼀个app_secretapp对app_secret的保存要做到不会被轻易的反编译出来,否则安全就没有了保障android平台建议保存到⼆进制的so⽂件中说明:刘宏缔的架构森林是⼀个专注架构的博客,地址:对应的源码可以访问这⾥获取:说明:作者:刘宏缔邮箱: 371125307@⼆,演⽰项⽬的相关信息1,项⽬的地址https:///liuhongdi/apisign2,项⽬的原理:给客户端分发:appId,appSecret,version三个字串appId:分配给客户端的idappSecret:密钥字串,客户端要安全保存version:服务端的接⼝版本客户端在发送请求前,⽤appId + appSecret + timestamp + nonce + version做md5,⽣成sign字串,这个字串和appId/timestamp/nonce⼀起发送到服务端服务端验证sign是否正确,如果有误则拦截请求3,项⽬的结构如图:三, java代码说明:1,SignInterceptor.java@Componentpublic class SignInterceptor implements HandlerInterceptor {private static final String SIGN_KEY = "apisign_";private static final Logger logger = LogManager.getLogger("bussniesslog");@Resourceprivate RedisStringUtil redisStringUtil;/**@author:liuhongdi*@date:2020/7/1 下午4:00*@description:* @param request:请求对象* @param response:响应对象* @param handler:处理对象:controller中的信息 ** *@return:true表⽰正常,false表⽰被拦截*/@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { //依次检查各变量是否存在?String appId = request.getHeader("appId");if (StringUtils.isBlank(appId)) {ServletUtil.renderString(response, JSON.toJSONString(ResultUtil.error(ResponseCode.SIGN_NO_APPID)));return false;}String timestampStr = request.getHeader("timestamp");if (StringUtils.isBlank(timestampStr)) {ServletUtil.renderString(response, JSON.toJSONString(ResultUtil.error(ResponseCode.SIGN_NO_TIMESTAMP)));return false;}String sign = request.getHeader("sign");if (StringUtils.isBlank(sign)) {ServletUtil.renderString(response, JSON.toJSONString(ResultUtil.error(ResponseCode.SIGN_NO_SIGN)));return false;}String nonce = request.getHeader("nonce");if (StringUtils.isBlank(nonce)) {ServletUtil.renderString(response, JSON.toJSONString(ResultUtil.error(ResponseCode.SIGN_NO_NONCE)));return false;}//得到正确的sign供检验⽤String origin = appId + Constants.APP_SECRET + timestampStr + nonce + Constants.APP_API_VERSION;String signEcrypt = MD5Util.md5(origin);long timestamp = 0;try {timestamp = Long.parseLong(timestampStr);} catch (Exception e) {logger.error("发⽣异常",e);}//前端的时间戳与服务器当前时间戳相差如果⼤于180,判定当前请求的timestamp⽆效if (Math.abs(timestamp - System.currentTimeMillis() / 1000) > 180) {ServletUtil.renderString(response, JSON.toJSONString(ResultUtil.error(ResponseCode.SIGN_TIMESTAMP_INVALID)));return false;}//nonce是否存在于redis中,检查当前请求是否是重复请求boolean nonceExists = redisStringUtil.hasStringkey(SIGN_KEY+timestampStr+nonce);if (nonceExists) {ServletUtil.renderString(response, JSON.toJSONString(ResultUtil.error(ResponseCode.SIGN_DUPLICATION)));return false;}//后端MD5签名校验与前端签名sign值⽐对if (!(sign.equalsIgnoreCase(signEcrypt))) {ServletUtil.renderString(response, JSON.toJSONString(ResultUtil.error(ResponseCode.SIGN_VERIFY_FAIL)));return false;}//将timestampstr+nonce存进redisredisStringUtil.setStringValue(SIGN_KEY+timestampStr+nonce, nonce, 180L);//sign校验⽆问题,放⾏return true;}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { }@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {}}说明:如果客户端请求的数据缺少会被拦截与服务端的appSecret等参数md5⽣成的sign不⼀致也会被拦截时间超时/重复请求也会被拦截2,DefaultMvcConfig.java@Configuration@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET)public class DefaultMvcConfig implements WebMvcConfigurer {@Resourceprivate SignInterceptor signInterceptor;/*** 添加Interceptor* liuhongdi*/@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(signInterceptor).addPathPatterns("/**") //所有请求都需要进⾏报⽂签名sign.excludePathPatterns("/html/*","/js/*"); //排除html/js⽬录}}说明:⽤来添加interceptor四,效果验证:1,js代码实现:说明:我们在这⾥使⽤js代码供仅演⽰使⽤,app_secret作为密钥不能使⽤js保存:<body><a href="javascript:login('right')">login(right)</a><br/><a href="javascript:login('error')">login(error)</a><br/><script>//varsvar appId="wap";var version="1.0";//得到signfunction getsign(appSecret,timestamp,nonce) {var origin = appId + appSecret + timestamp + nonce + version;console.log("origin:"+origin);var sign = hex_md5(origin);return sign;}//访问login这个api//说明:这⾥仅仅是举例⼦,在ios/android开发中,appSecret要以⼆进制的形式编译保存function login(isright) {//right secretvar appSecret_right="30c722c6acc64306a88dd93a814c9f0a";//error secretvar appSecret_error="aabbccdd";var timestamp = parseInt((new Date()).getTime()/1000);var nonce = Math.floor(Math.random()*8999)+1000;var sign = "";if (isright == 'right') {sign = getsign(appSecret_right,timestamp,nonce);} else {sign = getsign(appSecret_error,timestamp,nonce);}var postdata = {username:"a",password:"b"}$.ajax({type:"POST",url:"/user/login",data:postdata,//返回数据的格式datatype: "json",//在请求之前调⽤的函数beforeSend: function(request) {request.setRequestHeader("appId", appId);request.setRequestHeader("timestamp", timestamp);request.setRequestHeader("sign", sign);request.setRequestHeader("nonce", nonce);},//成功返回之后调⽤的函数success:function(data){if (data.status == 0) {alert('success:'+data.msg);} else {alert("failed:"+data.msg);}},//调⽤执⾏后调⽤的函数complete: function(XMLHttpRequest, textStatus){//complete},//调⽤出错执⾏的函数error: function(){//请求出错处理}});}</script></body>如图:说明:2,查看效果:成功时返回:{"status":0,"msg":"操作成功","data":null}报错时返回:{"msg":"sign签名校验失败","status":10007}五,查看spring boot的版本: . ____ _ __ _ _/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \\\/ ___)| |_)| | | | | || (_| | ) ) ) )' |____| .__|_| |_|_| |_\__, | / / / /=========|_|==============|___/=/_/_/_/:: Spring Boot :: (v2.3.1.RELEASE)。

spring初始化方法的执行顺序及其原理分析

spring初始化方法的执行顺序及其原理分析

spring初始化⽅法的执⾏顺序及其原理分析⽬录Spring中初始化⽅法的执⾏顺序⾸先通过⼀个例⼦来看其顺序配置我们进⼊这个类看我们看到了annotation-config了我们重点看下这⾏代码我们直接看initializeBean这个⽅法spring加载顺序典例解决⽅案Spring中初始化⽅法的执⾏顺序⾸先通过⼀个例⼦来看其顺序/*** 调⽤顺序 init2(PostConstruct注解) --> afterPropertiesSet(InitializingBean接⼝) --> init3(init-method配置)*/public class Test implements InitializingBean {public void init3(){System.out.println("init3");}@PostConstructpublic void init2(){System.out.println("init2");}@Overridepublic void afterPropertiesSet() throws Exception {System.out.println("afterPropertiesSet");}}配置<context:annotation-config/><bean class="com.cyy.spring.lifecycle.Test" id="test" init-method="init3"/>通过运⾏,我们得出其执⾏顺序为init2(PostConstruct注解) --> afterPropertiesSet(InitializingBean接⼝) --> init3(init-method配置)。

doxygen配置说明

doxygen配置说明

∙ABBREVIATE_BRIEF //简短摘要∙ALIASES //别名∙ALLEXTERNALS //所有外部文档∙ALPHABETICAL_INDEX //字母顺序索引∙ALWAYS_DETAILED_SEC //详细描述部分∙BINARY_TOC //二进制操作∙BRIEF_MEMBER_DESC //简短的成员描述∙CALL_GRAPH //调用到的图∙CASE_SENSE_NAMES //检测的范例的名字∙CHM_FILE //CHM格式文件∙CLASS_DIAGRAMS //类-表∙CLASS_GRAPH //类-图∙COLLABORATION_GRAPH //相互调用关系图∙COLS_IN_ALPHA_INDEX //以列形式显示的字母顺序的索引∙COMPACT_LATEX //压缩的LATEX文档∙COMPACT_R TF //压缩的RTF文档∙CREATE_SUBDIRS //创建一个"子目录"∙DETAILS_AT_TOP //文档的详细头部∙DIRECTORY_GRAPH //目录图∙DISABLE_INDEX //禁用INDEX∙DISTRIBUTE_GROUP_DOC //禁用文档成组显示∙DOT_IMAGE_FORMAT //点阵图形∙DOT_MULTI_TARGETS //多个DOT目标∙DOT_PATH //DOT路径设置∙DOT_TRANSPARENT //DOT转换设置∙DOTFILE_DIRS //DOTFILE 列表显示∙ENABLE_PREPROCESSING //允许"预处理"指令∙ENUM_VALUES_PER_LINE //每行的枚举值∙ENABLED_SECTIONS //允许分段显示∙EXAMPLE_PATH //例子路径∙EXAMPLE_PATTERNS //例子用的文件格式(*.cpp, *.h , *.java等)∙EXAMPLE_RECURSIVE //例子递归∙EXCLUDE //可执行文件∙EXCLUDE_PATTERNS //可执行文件格式(*.exe, *.dll等)∙EXCLUDE_SYMLINKS //可执行的SYMLINKS∙EXPAND_AS_DEFINED //规定的扩展∙EXPAND_ONLY_PREDEF //预定义扩展∙EXTERNAL_GROUPS //使用到的外部的文件∙EXTRA_PACKAGES //使用到的外部插件包∙EXTRACT_ALL //提取所有∙EXTRACT_LOCAL_CLASSES //提取所有本地类∙EXTRACT_LOCAL_METHODS //提取所有本地方法∙EXTRACT_PRIVATE //提取所有private∙EXTRACT_STATIC //提取所有stati c∙FILE_PATTERNS //文件路径∙FILE_VERSION_FILTER //文件版本控制∙FILTER_PATTERNS //控制格式(主版本:第1次版本:第2次版本号)∙FILTER_SOURCE_FILES //原文件的版本控制∙FULL_PATH_NAMES //全路径名∙GENERATE_AUTOGEN_DEF //生成自动定义文件形式∙GENERATE_BUGLIST //生成BUG列表∙GENERATE_CHI //生成"希腊字母" ∙GENERATE_DEPRECIATEDLIST //生成"评估"列表∙GENERATE_HTML //生成HTML∙GENERATE_HTMLHELP //生成HTMLHELP ∙GENERATE_LATEX //生成LATEX∙GENERATE_LEGEND //生成图例∙GENERATE_MAN //生成MAN文件∙GENERATE_PERLMOD //生成Perl脚本∙GENERATE_RTF //生成RTF∙GENERATE_TAGFILE //生成标志文件∙GENERATE_TESTLIST //生成TESTLIST∙GENERATE_TODOLIST //生成TODOLIST ∙GENERATE_TREEVIEW //生成树状视图显示∙GENERATE_XML //生成XML∙GRAPHICAL_HIERARCHY //继承图表∙GROUP_GRAPHS //组-图∙HAVE_DOT //隐藏DOT∙HHC_LOCATION //隐藏位置∙HIDE_FRIEND_COMPOUNDS //隐藏"复合的"友员类型∙HIDE_IN_BODY_DOCS //隐藏文档的主体∙HIDE_SCOPE_NAMES //隐藏"作用域"名∙HIDE_UNDOC_CLASSES //隐藏"未归档"的所有CLASS ∙HIDE_UNDOC_MEMBERS //隐藏"未归档"的所有的成员∙HIDE_UNDOC_RELATIONS //隐藏"未归档"的关系∙HTML_ALIGN_MEMBERS //H TML文档中成员对齐方式∙HTML_FOOTER //H TML脚注设置∙HTML_HEADER //HTML头部设置∙HTML_OUTPUT //H TML输出设置∙HTML_STYLESHEET //H TML样式设置∙IGNORE_PREFIX //忽略哪些前缀∙IMAGE_PATH //图片的路径设置∙INCLUDE_GRAPH //包含-图∙INCLUDE_PATH //头文件包含的路径∙INHERIT_DOCS //文档的继承关系∙INLINE_INFO //内联信息∙INLINE_INHERITED_MEMB //通过"继承"得到的内联成员∙INLINE_SOURCES //内联部分的源代码∙INPUT //输入设置∙INPUT_FILTER //能够接受的输入文件的扩展名格式设置(重要)∙INTERNAL_DOCS //内部文档∙JAVADOC_AUTOBRIEF //JAVADOC工具生成的文档的"自动摘要"∙LATEX_BATCHMODE //LATEX匹配方式∙LATEX_CMD_NAME //LATEX 命令名∙LATEX_HEADER //LATEX 头部∙LATEX_HIDE_INDICES //LATEX内部隐藏的包含∙LATEX_OUTPUT //LATEX输出∙MACRO_EXPANSION //宏展开设置(重要)∙MAKEINDEX_CMD_NAME //MAKEINDEX命令索引∙MAN_EXTENSION //MAN扩展∙MAN_LINKS //MAN链接设置∙MAN_OUTPUT //MAN输出设置∙MAX_DOT_GRAPH_DEPTH //DOT图的最大深度∙MAX_DOT_GRAPH_HEIGHT //DOT图的最大高度∙MAX_DOT_GRAPH_WIDTH //DOT图的最大宽度∙MAX_INITIALIZER_LINES //最大初始化行∙MULTILINE_CPP_IS_BRIEF //多个CPP文件的简短描述∙OPTIMIZE_OUTPUT_FOR_C //对C采用的优化设置∙OPTIMIZE_OUTPUT_JAVA //对JAVA采用的优化设置∙OUTPUT_DIRECTORY //输出路径设置(重要)∙OUTPUT_LANGUAGE //输出语言设置(重要)∙PAPER_TYPE //纸张类型∙PDF_HYPERLINKS //PDF格式超链接设置(重要)∙PERL_PATH //perl路径设置∙PERLMOD_LATEX //perlm od LATEX∙PERLMOD_PRETTY // perlm od PRETTY(漂亮/相当)∙PERLMOD_MAKEVAR_PREFIX //perlm od MAKE文件版本PREFIX ∙PREDEFINED //预先定义(重要)∙PROJECT_NAME //工程名(重要)∙PROJECT_NUMBER //工程的组成成员(重要)∙QUIET //静态量设置(重要)∙RECURSIVE //递归和循环∙REFERENCED_BY_RELATION //交叉参考(重要)∙REFERENCES_RELATION //交叉参考的关系∙REPEAT_BRIEF //重新设置"简短说明"为打开状态∙RTF_EXTENSIONS_FILE //RTF展开文件∙RTF_H YPERLINKS //RTF超链接∙RTF_OUTPUT //RTF输出设置∙RTF_STYLESHEET_FILE //RTF样式文件∙SEARCH_INCLUDES //搜索时需要包含什么(重要)∙SEARCHENGINE //搜索引擎设定(重要)∙SHORT_NAMES //使短文件名生效∙SHOW_DIRECTORIES //显示目录∙SHOW_INCLUDE_FILES //显示包含文件(一般NO,否则太大)∙SHOW_USED_FILES //显示被用到的文件(一般YES)∙SKIP_FUNCTION_MACROS //跳过函数中的宏(重要),菜鸟最好别跳∙SORT_BRIEF_DOCS //文档的简短摘要∙SORT_MEMBER_DOCS //成员的简短描述∙SOURCE_BROWSER //原文件浏览路径∙STRIP_CODE_COMMENTS //排除哪些条码形式注释(重要)∙STRIP_FROM_INC_PATH //排除哪些头文件包含的注释(重要)∙STRIP_FROM_PATH //排除哪些条码路径设置∙SUBGROUPING //子组设置(重要)∙TAB_SIZE //TAB符SIZE设置(重要)∙TAGFILES //标志文件∙TEMPLATE_RELATIONS //模板关系设置(重要)∙TOC_EXPAND //TOC扩展∙TREEVIEW_WIDTH //树状图显示的宽度设置(重要)∙UML_LOOK //UML外观设置(重要)∙USE_WINDOWS_ENCODING //使用windows系统的编码形式(重要)∙VERBATIM_HEADERS //VERBATIM头部(头文件)∙WARN_FORMAT //警告格式指定(重要)∙WARN_IF_DOC_ERROR //如果文档出错则显示警告∙WARN_IF_UNDOCUMENTED //如果是未归档文件则显示警告∙WARN_LOGFILE //警告日志文件设置∙WARN_NO_PARAMDOC //无参数文档警告形式设定∙WARNINGS //警告设置(重要)∙XML_DTD //XML文件类型定义(重要)∙XML_OUTPUT //XML输出设置(重要)∙XML_PROGRAMLISTING //XML程序列表(重要)∙XML_SCHEMA //XML模式设置(重要)。

Sublime_Text使用手册

Sublime_Text使用手册

Sublime Text使用手册文档编号:[GUIDE-2015]00001密级:公开资料文件密级说明1.绝密:一旦泄密会使公司利益遭受特别严重的损害;2.机密:一旦泄密会使公司利益遭受严重的损害;3.秘密:一旦泄密会使公司利益遭受较大的损害;4.内部资料:一旦泄密会使公司利益遭受一般损害;5.公开资料:公开有助于公司利益。

版权(免责)声明本文档原始版权归(QQ群:JavaWeb基础群437873646)所有,并保留一切权利。

文件内容可供任何机构或个人修改使用。

其仅提供阶段性信息,所含内容可能会随时更新,恕不另行通知。

如因文档使用不当造成的直接或间接损失,(QQ群:JavaWeb基础群437873646)不承担任何责任。

文档信息版本号:2015.0.1 版本日期:2015年4月5日制作:Scott 制作日期:2015年4月5日审批:Simon 审批日期:2015年4月5日审核:审核日期:修订记录:版本号修订日期NAMD 修订人修订内容(N-新建,A-添加,M-修改,D-删除)目录1 引言 (1)1.1 编写目的 (1)1.2 术语和缩写定义 (1)1.3 参考文档 (1)2 安装与初始化配置 (1)2.1 安装Sublime Text (1)2.2 个人风格配置 (2)3 系统增强 (3)3.1 安装Package Control (3)3.2 安装Emmet插件 (3)3.3 将Sublime Text加入系统右键菜单 (8)4 项目工程 (9)4.1 新建工程 (9)4.2 保存工程 (9)4.3 切换工程 (11)4.4 版本控制 (11)5 附录 (12)5.1 常用操作快捷键 (12)5.2 常用编程快捷键 (12)1引言1.1编写目的Sublime Text 是一个轻量、简洁、高效、跨平台的编辑器,方便的配色以及兼容vim快捷键等各种优点博得了很多前端开发人员的喜爱!本文为了程序员快速地熟悉Windows系统环境下,Sublime Text的安装与配置而编写,希望能有助于提高前端开发的工作效率。

@EnableWebMvc

@EnableWebMvc

@EnableWebMvc1、启⽤MVC Java config 或 MVC XML namespace想要启⽤MVC Java config,只需要将@EnableWebMvc添加到你的⼀个@Configuration class即可。

@Configuration@EnableWebMvcpublic class WebConfig {}或者在XML中,需要在你的DispatcherServlet context (或你的root context -- 如果没有定义DispatcherServlet context的话)内使⽤<mvc:annotation-driven> 元素:<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:mvc="/schema/mvc"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans.xsd/schema/mvc/schema/mvc/spring-mvc.xsd"><mvc:annotation-driven/></beans>上⾯,已经注册了⼀个 RequestMappingHandlerMapping、⼀个RequestMappingHandlerAdapter、以及⼀个ExceptionHandlerExceptionResolver 以⽀持使⽤注解Controller的注解⽅法(如@RequestMapping、@ExceptionHandler)来处理request。

interceptorregistry excludepathpattern 写法 -回复

interceptorregistry excludepathpattern 写法 -回复

interceptorregistry excludepathpattern 写法-回复拦截器在Web应用开发中起着重要的作用,可以用于实现对请求的预处理和后处理,对请求进行过滤、验证、日志记录等操作。

在Spring框架中,拦截器的配置使用`InterceptorRegistry`类,可以通过`excludePathPatterns`来设置需要排除的URL pattern。

下面将一步一步回答有关`InterceptorRegistry excludePathPatterns`的写法问题。

步骤一:了解`InterceptorRegistry`和`excludePathPatterns``InterceptorRegistry`是Spring框架提供的一个类,用于注册和管理拦截器。

在Web应用启动时,通过配置的`InterceptorRegistry`对象将其所管理的拦截器应用到请求处理流程中。

`excludePathPatterns`是`InterceptorRegistry`类的一个方法,用于设置需要排除的URL pattern。

通过设置`excludePathPatterns`,我们可以指定某些请求不被拦截器所拦截。

步骤二:创建拦截器首先,我们需要创建一个拦截器类来实现我们希望拦截的逻辑。

拦截器类需要实现`HandlerInterceptor`接口,并重写其中的方法。

其中,`preHandle`方法在请求处理之前执行,`postHandle`方法在请求处理之后执行,`afterCompletion`方法在请求完成之后执行。

在拦截器中,我们可以进行一些预处理和后处理的操作,例如验证用户的权限、记录日志等。

步骤三:配置拦截器接下来,我们需要在Spring配置文件中配置我们的拦截器。

找到对应的`InterceptorRegistry`对象,并使用`addInterceptor`方法将我们创建的拦截器添加到`InterceptorRegistry`中。

WebMvcConfigurer添加多个拦截器的拦截路径问题

WebMvcConfigurer添加多个拦截器的拦截路径问题

WebMvcConfigurer添加多个拦截器的拦截路径问题结论:每个拦截器的addPathPatterns,excludePathPatterns添加的路径是各⾃独⽴的,如果添加的⼀个拦截器没有addPathPattern任何⼀个url则默认拦截所有请求,如果没有excludePathPatterns任何⼀个请求,则默认不放过任何⼀个请求。

验证过程:两个拦截器:public class TestInterceptor1 implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)throws Exception {response.getOutputStream().write("To TestInterceptor1...".getBytes());return true;}}public class TestInterceptor2 implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)throws Exception {response.getOutputStream().write("To TestInterceptor2...".getBytes());return true;}}情景⼀:两个拦截器的拦截路径不同@Configurationpublic class WebMvcConfig implements WebMvcConfigurer {@Overridepublic void addInterceptors(InterceptorRegistry interceptorRegistry){interceptorRegistry.addInterceptor(new TestInterceptor1()).addPathPatterns("/ready");interceptorRegistry.addInterceptor(new TestInterceptor2()).addPathPatterns("/health");}}-------------测试结果-------------情景⼆:其中⼀个拦截器不配置拦截路径@Configurationpublic class WebMvcConfig implements WebMvcConfigurer {@Overridepublic void addInterceptors(InterceptorRegistry interceptorRegistry){interceptorRegistry.addInterceptor(new TestInterceptor1()).addPathPatterns("/ready");interceptorRegistry.addInterceptor(new TestInterceptor2());}}-------------测试结果-------------情景三:@Configurationpublic class WebMvcConfig implements WebMvcConfigurer {@Overridepublic void addInterceptors(InterceptorRegistry interceptorRegistry){interceptorRegistry.addInterceptor(new TestInterceptor1());interceptorRegistry.addInterceptor(new TestInterceptor2()).addPathPatterns("/health");}}-------------测试结果-------------情景四:其中⼀个拦截器的拦截路径在另⼀个拦截器的不拦截路径内@Configurationpublic class WebMvcConfig implements WebMvcConfigurer {@Overridepublic void addInterceptors(InterceptorRegistry interceptorRegistry){interceptorRegistry.addInterceptor(new TestInterceptor1()).addPathPatterns("/ready");interceptorRegistry.addInterceptor(new TestInterceptor2()).excludePathPatterns("/ready");}}-------------测试结果-------------从源码上看每个拦截器interceptor的includePatterns和excludePatterns也确实是独⽴的,可以参考下public InterceptorRegistration addInterceptor(HandlerInterceptor interceptor) {InterceptorRegistration registration = new InterceptorRegistration(interceptor);this.registrations.add(registration);return registration;}public InterceptorRegistration addPathPatterns(List<String> patterns) {this.includePatterns.addAll(patterns);return this;}public InterceptorRegistration excludePathPatterns(List<String> patterns) {this.excludePatterns.addAll(patterns);return this;}。

magic-api(SpringBoot可视化接口开发工具)

magic-api(SpringBoot可视化接口开发工具)

magic-api (SpringBoot 可视化接⼝开发⼯具)1.概述magic-api 是⼀个基于Java 的接⼝快速开发框架,编写接⼝将通过magic-api 提供的UI 界⾯完成,⾃动映射为HTTP 接⼝,⽆需定义Controller 、Service 、Dao 、Mapper 、XML 、VO 等Java 对象。

只不过这种⽅式虽然简单,但⽆法处理复制的业务逻辑。

对于复杂的业务逻辑,还是使⽤java 代码进⾏实现。

注意要保证⼆者的接⼝路径不重复。

2.实战演练2.1项⽬准备1)新建⼀个SpringBoot 的项⽬,导⼊数据库需要的依赖:2)新建数据库和表3)在配置⽂件配置数据源2.2 加⼊magic-api1)在pom.xml 中添加magic-api 相关依赖:2)在配置⽂件配置magic-api 相关信息<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.9</version> </dependency>CREATE TABLE `user` (`id` int (11) NOT NULL AUTO_INCREMENT,`username` varchar(255) COLLATE utf8_bin DEFAULT NULL,`password` varchar(255) COLLATE utf8_bin DEFAULT NULL,`addr` varchar(500) COLLATE utf8_bin DEFAULT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;spring:datasource:type: com.alibaba.druid.pool.DruidDataSourceurl: jdbc:mysql://localhost:3306/db2020?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghaiusername: root password: zys123456<dependency><groupId>org.ssssssss</groupId><artifactId>magic-api-spring-boot-starter</artifactId><version>1.2.1</version></dependency>magic-api:# 配置api 管理页⾯⼊⼝web: /magic/web# 配置存储⽅式resource:# 配置接⼝资源存储位置,可选file 、database 、redistype: database# 存储表名tableName: magic_api_file# 使⽤database 、redis 存储时的key 前缀prefix: /db2020# 是否是只读模式readonly : false# 启⽤驼峰命名转换sql-column-case : camel# 分页配置page-config:# 页⼤⼩的请求参数名称size: size# 页码的请求参数名称page: page3)创建表magic_api_file,⽤来存储接⼝的配置信息默认是⽩⾊,可点击⽪肤设置⿊⾊。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

excludepathpatterns方法
excludePathPatterns方法是Spring框架中的一个拦截器方法,其作用是排除(exclude)某些请求路径(path)不受拦截器的影响。

在实际开发中,我们可能需要针对不同的请求路径添加不同的拦截器,但有些路径(如静态资源路径)并不需要被拦截器处理,此时就可以
使用excludePathPatterns方法来排除这些路径。

该方法需要传入一
个字符串数组或字符串列表,表示要排除的请求路径集合,可以使用“**”通配符匹配多级路径。

例如,在一个基于Spring框架的Web应用中,我们使用拦截器
来实现用户登录验证等功能。

如果我们希望排除静态资源路径(如css、js、图片等)不受拦截器的影响,可以在配置拦截器时调用excludePathPatterns方法,将静态资源路径添加到排除集合中,如下所示:
```
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter { @Autowired
private LoginInterceptor loginInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(loginInterceptor)
.addPathPatterns("/**")
.excludePathPatterns("/static/**"); // 排除静
态资源路径
}
}
```
以上代码中,我们通过调用excludePathPatterns方法排除了“/static/**”路径,该路径下的所有请求都不会被拦截器处理。

这样就能够有效提高Web应用的性能,并减轻服务器的负担。

相关文档
最新文档