调试启动原创
# 调试启动
# 启动项目
提示
注意启动前需要在env对应的配置文件中配置正确的中间件地址和端口(未被占用),对于业务模块(snam-business)需要正确配置snapper.action.package路径
打开项目(例如snam-authority)下的 AuthorityServerBootstrap类,进入后“右键”->"调试AuthorityServerBoots..." 将以调试模式进行启动项目,其他模块项目启动模式相同,也可在idea中“服务”标签卡中添加服务,方便启动
# 调试
调试时需要注意以下几点:
- 若要本地调试,需要将模块中的env配置文件中将nacos.discovery.enabled设置为false,同时将 server.gateway (如果有)设置为127.0.0.1:8090
- 在env环境配置中更改log级别,请配置snapper.log.level,若要在控制台打印mybatis-plus执行的SQL,需设置snapper.log.impl 为org.apache.ibatis.logging.stdout.StdOutImpl
- 如果需要修改端口,请在docker/start.sh 中同样进行端口修改(部署docker时的端口)
- 将env环境中的server.env设置为dev环境,dev环境下token可以为"TEST"(不区分大小写),以方便通过postman等工具进行调试(需要添加头部Authorization 为 Bearer test 及 Content-Type: application/json)
系统默认每个功能都需要权限才能进行调用,调试某个功能(url请求)时,可以通过以下几点进行操作
- 白名单 后台调用时,每个接口都需要权限,否则无法调用,可以在gateway模块的SnamGatewayConfiguration中 初始化JwtTokenFilter 和 AuthorizationFilter 时设置白名单
- 初始化TEST账号(server.env必须是dev时才生效),可以在SnamGatewayConfiguration中 初始化JwtTokenFilter及AuthorizationFilter时调用withTestUser方法,添加测试账号信息,这样token为Bearer test时直接调用该信息
- 进入权限后台(操作使用章节)中的“菜单管理”进行添加按钮,按钮可以设置成无权限,或者对按钮分配角色,同时当前登录用户关联该角色,设置完成后需要刷新缓存
# URL 请求前缀
snapper提供两种类型的标准认证及一种自定义认证,具体为:
- 基于jwt的认证,该认证基于网页登录模式即无状态TOKEN(头部添加Authorization,值为Bearer token)
- 基于HMAC权限的认证,基于APPID和APPKEY的密码认证
- 自定义第三方回调认证,具体请参考(请参照ThirdPartFilter)
注意
该前缀是最终调用前缀,即controller中的前缀,并非请求调用前缀,开发时请在controller中参照请求前缀进行配置)
不同的认证方式有不同的前缀(controller中添加前缀),系统提供了如下几种URL前缀
- /api/前缀 为jwt认证模式
- /wapi/前缀 为HMAC认证模式
- /tapi/前缀 为第三方自定义认证模式,用户可以根据实际业务自定义前缀及认证模式
- /fapi/前缀 为feign调用前缀,注意此种前缀忽略权限并会返回原始数据(非统一封装返回数据),只能由feign自动发起,无法在外部进行发起
不同的认证方式对应的请求前缀为(以gateway配置为准)
- /business/wapi/order/search 会进行HMAC认证,认证通过后转发到business模块的/order/search 端点,因此在OrderController中的 @RequestMapping path标记为{"/wapi/order"}
- /business/order/search 会进行jwt认证,认证过后转发到business模块的/order/search端点,因此综合wapi 在OrderController中的 @RequestMapping path标记为{“/api/order","/wapi/order"}
- /feign/authority/user/listUserByUserNos 是调用feign请求, 具体调用到gateway然后再转发到authority模块的/user/listUserByUserNos 端点,因此在UserController path中标记为{"/fapi/user"},具体参考snam-authroity-api模块
提示
对于socket 不走网关,直联对应的消息微服务,具体请参考后续章节<<socket消息方案>>
# 调用功能
系统所有功能都需要调用网关才能访问,直接调用某个微服务无法进行访问,因此需要注意以下几点
- 所有请求访问的地址为 http://127.0.0.1:8090/ + 微服务前缀 + controller请求前缀URL + 方法请求URL
- 返回的数据统一格式为{code:200,message:"OK",data:[{}]},其中code为业务状态码,正确请求为200,非200表示请求出错,message为具体的错误,data为请求的封装数据,即使只有一条也会封装成数组格式