数据插入机制

我想询问一下, 猪齿鱼是通过什么机制才能做到插入数据的同时自动补上版本号、创建人、创建时间、更新人、更新时间这些信息? 现在我想把自己的本地库也做成这个样子, 但是插入的数据创建人和更新人都是0, 也就是匿名用户

我看每一个操作后都跟着这样一条SQL语句, 这个SQL语句是在哪里自动执行的呢?

Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@25797e7f] was not registered for synchronization because synchronization is not active
JDBC Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@13619696] will not be managed by Spring
==>  Preparing: SELECT * FROM hzero_platform.iam_user WHERE 1 = 1 AND id = 0
==> Parameters: 
<==    Columns: id, login_name, email, organization_id, HASH_PASSWORD, real_name, phone, INTERNATIONAL_TEL_CODE, image_url, profile_photo, language, time_zone, last_password_updated_at, last_login_at, is_enabled, is_locked, is_ldap, is_admin, locked_until_at, password_attempt, object_version_number, created_by, creation_date, last_updated_by, last_update_date, user_type, attribute1, attribute2, attribute3, attribute4, attribute5, attribute6, attribute7, attribute8, attribute9, attribute10, attribute11, attribute12, attribute13, attribute14, attribute15
<==        Row: 0, ANONYMOUS, anonymous@hzero.com, 0, $2a$10$85L4lPocvM2/E2ru74bsbu.ZO2VBuKIbG5ke2G6FFLLGNzV6Juwc., 匿名用户, 18666666662, +86, null, <<BLOB>>, zh_CN, GMT+8, 2021-11-09 11:42:17.0, null, 1, 0, 0, 0, null, 0, 1, 0, 2021-11-09 11:42:17.0, -1, 2021-11-09 11:45:36.0, P, null, null, null, null, null, null, null, null, null, null, null, null, null, NMYH, nimingyonghu
<==      Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@25797e7f]

debug下来发现DetailsHelper.getUserDetails()这个方法返回null, 请问这个CustomUserDetails是在哪里把网页登录用户注入到上下文的?

公开接口和有异步操作获取不到上下文用户

现在的场景是我自己有个本地库, 这个数据库的表实体类和猪齿鱼的一样继承了AuditDomain, 但是在插入数据的时候发现插入数据的人员是匿名用户. 进一步debug发现DetailsHelper.getUserDetails这个方法获取不到上下文用户, 但是我已经在前端页面登录了, 传过来的token也是登录用户的token, 是有效的. 所以我想问下猪齿鱼的项目里是怎么获取到上下文用户的?通过拦截器还是什么其他机制? 如果获取不到我是否可以手动设置上下文用户? 设置方式又是怎样的?

公开接口是指的什么意思呢? 是没有加@Permission这个注解的接口都是公开接口吗?

需要加上这个注解,然后点进去看看注解的用法

我加上了之后, 使用@Permission(permissionLogin = true) 或者 @Permission(level = ResouceLevel.ORGANIZATION)都没有用, 上下文用户还是为空. 请问该如何使用才能注入上下文用户呢?

@Permission(level = ResouceLevel.ORGANIZATION)加上了你怎么访问的接口?直接访问该服务接口,还是通过网关路由访问的?

我是直接把前端网页的接口改成了自己的接口, 然后传了token过来. 但是就是在入自己库的时候显示是匿名用户, 调用猪齿鱼接口的时候不会. 所以我怀疑是缺少了某个上下文用户的注入环节, 导致自己的业务方法里没办法获取到上下文用户. 总之就是加了@Permission没有用, 我把里面的字段都试过了, 依然获取不到上下文用户…

不用手动注入上下文,都是自动注入的。
参考下这个文档,听你描述没发现什么问题
https://open.hand-china.com/document-center/doc/product/10137/10227?doc_id=173464&_back=%2Fdocument-center%2Fsearch%3Fs%3D%40permission&doc_code=134883

还有个配置,你的路由要有/choerodon/v1开头

意思是RequestMapping需要以/choerodon/v1开头是吗

我将我自己的接口改成/choerodon/v1开头, 报401了, No Jwt Token in request, 但是我已经在header里添加了Authorization了, 值就是bearer + accessToken, 这是咋回事呢?

用admin用户的token

admin可以访问任何接口,其他用户就要挂权限

可是我使用了admin用户的token的话, 插入数据的时候上下文不就识别成了admin用户了吗, 插入数据的创建人和更新人也会是admin吧? 并不是我当前实际使用的用户吧?

所以需要给其他用户挂权限

能否麻烦具体细说一下?

https://choerodon.com.cn/#/knowledge/share/ebc0dcfeb788f3fb
参考这个文档
或者在hzero界面,角色管理界面,给你需要的角色加上这个接口