【已解决】Koca安全框架,获取当前登录人


我本地测试是OK的,暂不能重现出来,你断点一下看看能不能来

我的demo你参考一下
koca-auth-samples.zip (621.7 KB)


可以拦截到了,但是出现这个提示,是我需要进行其他的配置么

嗯,这个是用户没有权限
1、之前拦截不到现在可以拦截到了,是哪里的问题
2、auth.yml配置再发份出来

1、我们微服务中有多个application启动类,只有一个服务存放了application.yml文件,我启动的是没有application.yml文件的服务,所以读取不到配置,我更换到有Yml文件的服务后,成功读取到配置了;
2、还有个疑问,如果各个服务当中无法依赖一个服务的yml,那是不是每个服务都要配置一个yml?
3、我看了下我们项目里没有auth.yml这个配置文件,这个用户权限的关系在哪里配置的?

那就把全量配置发过来看一下

server:
  port: xx

spring:
  application:
    name: rms-bootapp-applicant
  servlet:
    multipart:
      max-file-size: 30MB
      max-request-size: 30MB

  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8

#使用fastDFS需添加如下配置
fdfs:
  so-timeout: 2500       # 读取时间
  connect-timeout: 600   # 连接超时时间
  tracker-list: ip:port  #tracker服务配置地址列表
  pool:
    max-total: 200   # 连接池最大数量
    max-total-per-key: 50  # 单个tracker最大连接数
    max-wait-millis: 5000 # 连接耗尽最大等待时间 毫秒

koca:
  mybatis:
    # 框架使用第三方插件PaeHelper来实现分页查询的功能,采用AOP的方法,使用 @Aspect 注解把分页dao层接口栏截器类标识为一个切面供容器读取
    # 切入点:com.szkingdom 下所有package为mapper的java类中的所有方法
#    page-advisor: execution(* com.szkingdom.**.*Mapper..*(..)) || execution(* com.szkingdom.**.ext.*MapperExt..*(..))
    page-advisor: execution(* com.szkingdom..*mapper..*(..)) || execution(* com.szkingdom..*mapper.ext..*(..)) # 这个可以
#    page-advisor: execution(* com.szkingdom.**.mapper.ext..*(..))
#    page-advisor: execution(* com.szkingdom.rfkj.rms.applicant.info.mapper.ext..*(..))
  idgenerator:
    # 不依赖zookeeper的雪花算法主键生成方式,其中workId和datacenterId是用于区分不同应用的配置,不同的应用,两个值的组合不应相同,否则有主键冲突的风险
    defaultStrategy: idwork_snowflake
    # 使用了美团leaf的雪花算法实现,该实现使用zookeeper获取唯一的workId值,并解决了雪花算法的时钟回拨问题。
    # defaultStrategy: leaf_snowflake
    workId: 11
    datacenterId: 12
#  registry:
#    type: eureka
#    #    service-url: http://ip:port/eureka
#    service-url: http://ip:port/eureka
#    #    service-url: http://localhost:8085/eureka
#    #是否进行服务发现
#    discovery: true
#    #是否进行服务注册
#    register: true
#    #连接超时时间,单位秒
#    connection-timeout: 60
#    instance:
#      #是否使用IP代替hostname
#      prefer-ip-address: true
      #主机名称
      #hostname:
      #实例IP地址
      #ipAddr: ip
      #端口
      #port: {server.port}
      #是否为SSLPort
      #secure: false
      #实例初始状态,默认为"UP"
      #status: UP
      #自定义数据内容
      #metadata:
#  jdbc:
#    defaultDataSourceId: rms  # 默认数据源
#    dataSources:
#      - id: rms               # 数据源id
#        pool:
#          # 数据源连接池配置 数据源对应的更多属性可直接在此追加
#          url: jdbc:mysql://ip:port/rms?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC&allowMultiQueries=true # 数据源url
#          username: xx         # 数据源用户名
#          password: xxxx        # 加密后的数据源密码
#          initialSize: 5         # Drud数据源属性  连接池的初始连接数
#          minIdle: 5            # Druid数据源属性 连接池的最小数据库连接数
#          maxActive: 20          # Druid数据源属性 连接池的最大数据库连接数
#          maxWait: 60000         # Druid数据源属性 配置获取连接等待超时的时间

  security:
    auth:
      #忽略掉需要登录才能访问的地址
      ignored-url:
#        - /*/**
        #- /cust/custService
        #- /user/pwd/rule
      #登录的用户名参数,就是当前传入的用作用户名参数的名称,默认值loginName
      login-name-param: loginName
      # 登录的密码参数,当前传入的作为密码的名称,默认值password
      login-password-param: password
      # 登录提交的地址,默认值/auth/login
      login-submit-url: /auth/login
      # 登录成功页面地址,默认值"/#/login"
      login-page-url: /#/login
      # 退出地址,默认值/auth/logout
      logout-submit-url: /auth/logout
      random-code-switch: true # CryptoUtils.sm4Encrypt 随机码开关,默认true开启,及登录时是否会用randomcode加解密,1.4详解
      auth-code:
        enabled: true #登录次数过多是否开启验证码,默认关闭
        failure-retry-time: 5  #登录认证错误超过次数,出现验证码,默认3次
      # 未登录或会话过期后的跳转地址
      static-page:
        index: /login/login.html
      admin-management: #adminManagement认证,这个是管理端点的,一些endpoint,是否需要认证。
        #可通过management.endpoints.web.base-path配置,默认/actuator
        enabled: false #是否开启,默认false
        login-name: xx  
        login-password: xxx 
      api-access-control:
        enabled: false #默认关闭
        strategy-name: default #接口权限控制策略,默认default,可通过实现ApiControlService接口自定义实现

    #以下为spring security相关配置
    strategy: token #模式选择,还有token模式
    enabled: true #认证开关,false该认证策略不生效,不会拦截
    csrf:
      enabled: true #csrf 防御开关 2.6.0新增,默认关闭,开启后请求需要携带csrf token才能正常访问
    max-sessions: -1 #最大会话控制数-1不控制
    max-sessions-prevents-login: false #默认false
    jwt:
      secret: xxxx #jwt模式的secret,需要至少64个字节
      expireTime: 86400000 #过期时间,单位毫秒ms
      refreshTime: 300000 #自动刷新时间,当token还有refreshTime就过期的时候将刷新返回新的token,单位ms。
    auth-strategy: #认证策略,分为basic和其他,1.3详细说明
      strategy-name: koca
    #      username: xxx
    #      password: xxx
    session-storage:
      strategy-name: memory #会话数据存储方式分为redis和memory,单机时memory,默认memory
      session-expire: 1800 #过期时间,单位s,默认1800s
      name-space:  #redis相关登录次数与时间存储key前缀
    multi-login: #多种登录策略
      - type: phoneAuthcode #手机验证码登录
        loginUrl: /auth/phone/authcode #登录url
        strategy-name: koca_phone_authcode #使用的loginservice策略,koca_phone_authcode为本地调用,                                                 remote_phone_authcode为远程调用,默认remote_phone_authcode
        auth-url: #远程调用url,为远程调用方式使用
      - type: phonePassword    #手机密码登录模式
        loginUrl: /auth/phone/password  #手机密码登录url
        tokenEnabled: true #登录token模式开关,true为token,false为session,不填为与auth.security.strategy相同
        strategy-name: koca_phone_password #默认remote_phone_password

认证服务是需要配置的,其它服务可以不用配置

你这个配置看上去是没有问题的

问题已解决:
1、业务服务和认证服务需要引用auth-server和auth-client包
2、对于不需要 CSRF防御的业务服务,关闭csrf: enabled: 的配置
3、不使用Jwt模式时不要配置jwt: secret

感谢赵老师细心解答

嗯,不用客气,以后我们就用这种模式,先论坛发帖,如果解决不了我们再远程 ,远程之后的解决方案再回归到论坛,方便日后出现重复的问题我们有处可查。

还有个问题想问下,如果从数据库层面去创建账号,需要初始化数据到哪几张表?我目前往Koca_user_info_base和koca_user_pwd插入了数据但是登录失败