【已解决】自定义实现LoginService,登录成功后,其他所有接口无法访问,报一样错误。

KOCA版本 :4.3.0
KOCA模块 :自定义LiginService实现
模块版本 :4.3.0
场景 :自定义LiginService,实现登录接口并登录成功
问题 :登录成功后访问其他所有接口,皆报错500,后台提示:java.lang.IllegalArgumentException: Principal required
报错细节 :

尝试解决方案:@配置忽略地址仍无效。image

KOCA版本 :4.3.0
KOCA模块 :自定义LiginService实现
模块版本 :4.3.0
场景 :自定义LiginService,实现登录接口并登录成功
问题 :登录成功后访问其他所有接口,皆报错错误500,后台提升:java.lang.IllegalArgumentException: Principal required
报错细节 :

尝试解决方案:配置忽略地址仍无效。image

可能是配置问题,发一下代码我们这边验证一下

auth.yml配置如下:

koca:
  # 通信加密
  web:
    decrypt:
      # 后台是否开启通信加解密,默认false
      enabled: false
#      enabled: false
      # 是否开启动态密钥,默认false
      dynamic-key-enabled: true
      # 基于开启状态,如果此配置不为空则生效。只对配置的url进行解密
      need-decrypt-url:
      # 黑名单,配置了此项的url请求忽略通信加解密,优先级低于白名单
      ignored-decrypt-url: /test

  idgenerator:
    admin-seq:
      auto-init: false
      cache-time: 1000
  security:
    # 安全认证策略 默认session,还有token模式,配置token为jwt,idToken为定长21位token
    strategy: session
    # 认证开关,false该认证策略不生效,不会拦截
    enabled: true
    # 最大会话控制数-1不控制
    max-sessions: -1
    # 认证策略
    auth-strategy:
      strategy-name: kess
#      strategy-name: koca
    auth:
#      random-code-switch: false
      ignored-url:
        # 忽略掉需要登录才能访问的地址
        - /test/**
        - /api/**
        - /auth/**
        - /front/profiles
        - /dict/item/query
#      auth-code:
#        # 登录次数过多是否开启验证码,默认关闭
#        enabled: true
#        # 登录认证错误超过次数,出现验证码,默认3次
#        failure-retry-time: 3

      # 接口授权策略
      api-access-control:
        enabled: true
        strategy-name: role

    session-storage:
      # 会话数据存储方式分为redis和memory,单机时memory,默认memory
      strategy-name: redis
      # 过期时间,单位s,默认1800s
      session-expire: 1800

auth.yml配置如下:
koca:
web:
decrypt:
enabled: false
dynamic-key-enabled: true
need-decrypt-url:
ignored-decrypt-url: /test
idgenerator:
admin-seq:
auto-init: false
cache-time: 1000
security:
strategy: session
enabled: true
max-sessions: -1
# 认证策略
auth-strategy:
strategy-name: kess
auth:

random-code-switch: false

  ignored-url:
    # 忽略掉需要登录才能访问的地址
    - /test/**
    - /api/**
    - /auth/**
    - /front/profiles
    - /dict/item/query
  # 接口授权策略
  api-access-control:
    enabled: true
    strategy-name: role
session-storage:
  # 会话数据存储方式分为redis和memory,单机时memory,默认memory
  strategy-name: redis
  # 过期时间,单位s,默认1800s
  session-expire: 1800

代码如下:



老师,这个问题有验证是配置问题还是代码问题吗?或是版本问题?

解决方案:在重写LoginService,使用认证策略security:strategy: session,会话策略session-storage:strategy-name: redis时,返回值TrustedPrincipal必须设置userNo,否则底层就会按jwt方式来处理,导致出现该问题。