前期准备工作完成后,现在开始搭建项目,今天主要完成项目的搭建和基本功能的调试。网关网关服务认证转发配置监控数据源Druid的集成配置 工程结构 全局过滤器ComponentLog4j2publicclassStockRequestGlobalFilterimplementsGlobalFilter,Ordered{通过filter来自定义配置转发信息paramexchangeparamchainreturnOverridepublicMonoVoidfilter(ServerWebExchangeexchange,GatewayFilterChainchain){Stringauthenticationexchange。getRequest()。getHeaders()。getFirst(Authorization);if(!StringUtil。isNullOrEmpty(authentication)){log。info(enterstockRequestGlobalFilterfiltermethod:authentication);exchange。getRequest()。mutate()。header(Authorization,authentication);}returnchain。filter(exchange。mutate()。build());}OverridepublicintgetOrder(){return1000;}} 网关配置:server:port:10680spring:application:name:stockgatewaycloud:nacos:discovery:serveraddr:127。0。0。1:8848service:stockgatewaygateway:discovery:允许通过服务名称进行路由转发访问,http:serviceiduserlocator:enabled:true路由配置routes:id:stockuseruri:lb:stockuserpredicates:Pathuserid:tradeauthuri:lb:tradeauthpredicates:MethodGET,POST不要开启此项Pathoauthlogging:level:root:info 经过实践摸索,如果网关只是转发,按照我们OAUTH2的设计方案,SpringCloudGateway可以不用集成SpringSecurity。网关的职责就是接收客户端的请求并进行转发,所以鉴权可以不用放置在网关,各微服务直接作为资源服务进行认证,也可以避免微服务直接对外暴露产生的安全问题,在这里学习如何通过Gateway转发请求,实现OAuth2的认证。用户服务Druid集成配置server:port:10681spring:application:name:stockusercloud:nacos:discovery:serveraddr:127。0。0。1:8848config:serveraddr:127。0。0。1:8848sentinel:transport:Sentinel管理后台的连接配置dashboard:127。0。0。1:8858datasource:用户的降级规则配置:userdegrade:nacos:serveraddr:127。0。0。1:8848dataId:sentineluserdegradegroupId:DEFAULTGROUPdatatype:jsonruletype:degrade用户限流的规则配置:userflow:nacos:serveraddr:127。0。0。1:8848dataId:sentineluserflowgroupId:DEFAULTGROUPdatatype:jsonruletype:flow数据源配置,采用Druiddatasource:type:com。alibaba。druid。pool。DruidDataSourcedriverclassname:com。mysql。cj。jdbc。Driverusername:rootpassword:root12349876url:jdbc:mysql:106。14。250。251:3306tradestock?useUnicodetruecharacterEncodingUTF8useSSLfalsedruid:连接池的配置信息初始化大小,最小,最大initialsize:5minidle:5maxActive:20配置获取连接等待超时的时间maxWait:60000配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒timeBetweenEvictionRunsMillis:60000配置一个连接在池中最小生存的时间,单位是毫秒minEvictableIdleTimeMillis:300000validationQuery:SELECT1FROMDUALtestWhileIdle:truetestOnBorrow:falsetestOnReturn:false打开PSCache,并且指定每个连接上PSCache的大小poolPreparedStatements:truemaxPoolPreparedStatementPerConnectionSize:20配置监控统计拦截的filters,去掉后监控界面sql无法统计,wall用于防火墙filters:stat,wall,log4j通过connectProperties属性来打开mergeSql功能;慢SQL记录connectionProperties:druid。stat。mergeSqltrue;druid。stat。slowSqlMillis5000配置DruidStatFilterwebstatfilter:enabled:trueurlpattern:exclusions:。js,。gif,。jpg,。bmp,。png,。css,。ico,druid配置DruidStatViewServletstatviewservlet:urlpattern:druidIP白名单(没有配置或者为空,则允许所有访问)allow:IP黑名单(存在共同时,deny优先于allow)deny:禁用HTML页面上的ResetAll功能resetenable:false登录名loginusername:admin登录密码loginpassword:admin123监控后台开关,开启可通过后台管理查看enabled:truespringsecurity配置security:oauth2:resource:loadBalanced:truetokeninfouri:http:tradeauthoauthchecktokenclient:clientid:appclientsecret:appscope:serveraccesstokenuri:http:tradeauthoauthtokenuserauthorizationuri:http:tradeauthoauthauthorizemybatis配置mybatisplus:configuration:mapunderscoretocamelcase:trueautomappingbehavior:fulllogimpl:org。apache。ibatis。logging。stdout。StdOutImplmapperlocations:classpath:comitcastbullsstockuserdaomapper。xmlclasspath:comitcastbullsstockcommonsystemdaomapperMapper。xmlglobalconfig:逻辑删除配置dbconfig:删除前logicnotdeletevalue:1删除后logicdeletevalue:0 主要是statviewservlet下面配置: urlpattern是配置监控台的访问地址。 allow是允许哪些IP进行访问。 deny是IP黑名单,优先级高于allow。 resetenable是复位功能,谨慎使用。 loginusername是登陆了用户名。 loginpassword是登陆密码。 enabled是监控台的启用开关,此项一定要开启。Druid访问验证 启动服务即可访问,把用户服务启动,访问地址:http:127。0。0。1:10681druidindex。html oauth服务 项目结构 启动服务 申请token 新建一个请求,输入地址:127。0。0。1:9999oauthtoken 选择认证方式,填入Client的用户与密码信息,非ttradeuser信息。 填入granttype,认证模式;username和password对应ttradeuser表信息,scope作用域对应client用户的scope,不能填错。 采用post和get方式请求都可以,返回结果可以看到有两部分,一部分是内置的token信息,另外一部分就是我们自定义增强的token扩展信息。刷新token 刷新token,地址不变,需要传递refreshtoken,这个在申请token时可以拿到,granttype类型要设置为refreshtoken。 刷新成功,和上面申请的token值发生了变化,accesstoken已重新生成。网关服务启动后只需要把地址换成网关地址即可。sentinel http:106。14。250。251:8858dashboardhome账号密码:sentinel 现在主要配置限流和降级规则,规则配置在nacos sentinel如果部署到服务器上,本地启动项目时无法实时监控到的。 原因:Sentinel的监控需要双方互发包进行健康校验等实现监控,而阿里云ECS服务器无法ping通主机ip,导致出错用户注册 公司表,部门表配置好后,用户保存即可成功 接下来完成权限管理功能