您的位置 首页 java

java微服务实战项目股票项目搭建,网关会员统一登陆基本功能实现

前期准备工作完成后,现在开始搭建项目,今天主要完成项目的搭建和基本功能的调试。

网关

  • 网关服务认证转发配置
  • 监控数据源Druid的集成配置

工程结构

  • 全局过滤器
 @Component
@ log4j 2
public class Stock Request GlobalFilter implements GlobalFilter, Ordered {
    

    /**
     * 通过filter来自定义配置转发信息
     * @param exchange
     * @param chain
     * @return
     */    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        String authentication = exchange.getRequest().getHeaders().getFirst("Authorization");
        if(!StringUtil.isNullOrEmpty(authentication)){
            log.info("enter stockRequestGlobalFilter filter method: " + authentication);
            exchange.getRequest().mutate().header("Authorization",authentication);
        }
        return chain.filter(exchange.mutate().build());
    }

    @Override
    public int getOrder() {
        return -1000;
    }
}  

网关配置:

 server:
  port: 10680

spring:
  application:
    name: stock-gateway
  cloud:
    nacos:
      discovery:
        server-addr:  127.0.0.1 : 8848 
        service: stock-gateway
    gateway:
      discovery:
        # 允许通过服务名称进行路由转发访问, 
        locator:
          enabled: true
      # 路由配置
      routes:
        - id: stock-user
          uri: lb://stock-user
          predicates:
            - Path=/user/**
        - id: trade-auth
          uri: lb://trade-auth
          predicates:
            # - Method=GET,POST  不要开启此项
            - Path=/oauth/**
logging:
  level:
     root : info  

经过实践摸索,如果网关只是转发,按照我们OAUTH2的设计方案, Spring Cloud Gateway 可以不用集成Spring Security。网关的职责就是接收客户端的请求并进行转发, 所以 鉴权 可以不用放置在网关, 各 微服务 直接作为资源服务进行认证,也可以避免微服务直接对外暴露产生的安全问题, 在这里学习如何通过Gateway转发请求, 实现OAuth2的认证。

用户服务

  • Druid集成配置
 server:
  port: 10681
spring:
  application:
    name: stock-user
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
       config :
        server-addr: 127.0.0.1:8848
     sentinel :
      transport:
        # Sentinel管理后台的连接配置
        dashboard: 127.0.0.1:8858
      datasource:
        # 用户的降级规则配置:
        user-degrade:
          nacos:
            server-addr: 127.0.0.1:8848
            dataId: sentinel-user-degrade
            groupId: DEFAULT_GROUP
            data-type: json
            rule-type: degrade
        #用户限流的规则配置:
        user-flow:
          nacos:
            server-addr: 127.0.0.1:8848
            dataId: sentinel-user-flow
            groupId: DEFAULT_GROUP
            data-type: json
            rule-type: flow
  # 数据源配置, 采用Druid
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.my SQL .cj. jdbc .Driver
    username: root
    password: root12349876
    url: jdbc:mysql://106.14.250.251:3306/trade_stock?useUnicode=true&characterEncoding=UTF-8&useSSL=false
    druid:
      # 连接池的配置信息
      # 初始化大小,最小,最大
      initial-size: 5
      min-idle: 5
      maxActive: 20
      # 配置获取连接等待超时的时间
      maxWait: 60000
      # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
      timeBetweenEvictionRunsMillis: 60000
      # 配置一个连接在池中最小生存的时间,单位是毫秒
      minEvictableIdleTimeMillis: 300000
      validationQuery: SELECT 1 FROM DUAL
      testWhileIdle: true
      testOnBorrow: false
      testOnReturn: false
      # 打开PSCache,并且指定每个连接上PSCache的大小
      poolPreparedStatements: true
      maxPoolPreparedStatementPerConnectionSize: 20
      # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
      filters: stat,wall,log4j
      # 通过connectProperties属性来打开 merge Sql功能;慢SQL记录
      connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
      # 配置DruidStatFilter
      web-stat-filter:
        enabled: true
        url-pattern: "/*"
        exclusions: "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*"
      # 配置DruidStatViewServlet
      stat-view-servlet:
        url-pattern: "/druid/*"
        # IP白名单(没有配置或者为空,则允许所有访问)
        allow:
        # IP黑名单 (存在共同时,deny优先于allow)
        deny:
        #  禁用HTML页面上的“Reset All”功能
        reset-enable: false
        # 登录名
        login-username: admin
        # 登录密码
        login-password: admin123
        # 监控后台开关, 开启可通过后台管理查看
        enabled: true
## spring security 配置
security:
  oauth2:
    resource:
      loadBalanced: true
      token-info-uri: 
     Client :
      client-id: app
      client-secret: app
      scope: server
      access-token-uri:  oauth /token
      user-authorization-uri: 

#mybatis 配置
 mybatis -plus:
  configuration:
    map-underscore-to- camel -case: true
    auto-mapping-behavior: full
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  mapper-locations:
    - classpath:com/itcast/bulls/stock/user/dao/mapper/*.xml
    - classpath:com/itcast/bulls/stock/common/system/dao/mapper/*Mapper.xml
  global-config:
    #  逻辑删除 配置
    db-config:
      # 删除前
      logic-not-delete-value: 1
      # 删除后
      logic-delete-value: 0  

主要是stat-view-servlet下面配置:

url-pattern是配置监控台的访问地址。

allow是允许哪些IP进行访问。

deny是 IP 黑名单, 优先级高于allow。

reset-enable是复位功能, 谨慎使用。

login-username是登陆了用户名。

login-password是登陆密码。

enabled是监控台的启用开关, 此项一定要开启。

  • Druid访问验证

启动服务即可访问, 把用户服务启动, 访问地址:

oauth服务

项目结构

  • 启动服务

申请token

新建一个请求, 输入地址: 127.0.0.1:9999/oauth/token

选择认证方式, 填入Client的用户与密码信息,非t_trade_user信息。

填入 grant _type, 认证模式; username和password对应t_trade_user表信息, scope 作用域对应client用户的scope, 不能填错。

采用post和get方式请求都可以, 返回结果可以看到有两部分, 一部分是内置的token信息, 另外一部分就是我们自定义增强的token扩展信息。

  • 刷新token

刷新token, 地址不变, 需要传递refresh_token, 这个在申请token时可以拿到, grant_type类型要设置为refresh_token。

刷新成功, 和上面申请的token值发生了变化, access_token已重新生成。

  • 网关服务启动后只需要把地址换成网关地址即可。

sentinel

#/dashboard/home 账号密码: sentinel

现在主要配置限流和降级规则,规则配置在nacos

sentinel如果部署到服务器上,本地启动项目时无法实时监控到的。
原因: Sentinel的监控需要双方互发包进行健康校验等实现监控,而阿里云ECS服务器无法ping通主机ip,导致出错

用户注册

公司表,部门表配置好后,用户保存即可成功

接下来完成权限管理功能

文章来源:智云一二三科技

文章标题:java微服务实战项目股票项目搭建,网关会员统一登陆基本功能实现

文章地址:https://www.zhihuclub.com/184411.shtml

关于作者: 智云科技

热门文章

网站地图