用户注销 user_session 立即失效
用户登录后 user_session 的失效时间,默认是12个小时,如果要立即失效,需要通过 redis 记录状态
定制企业门户
参考《门户定制》文档,定制企业门户,打开企业门户 IDE
添加 redis
在企业门户 IDE 中,切换到架构,从市场中选择 redis 模版组件
把 redis 组件拖放到架构中,服务名填写 redis,点确定,然后点 IDE 的保存,进行 IDE 重启
IDE 重启后,切换到代码,在“门户自定义”组件服务端目录 model/service/comp/portalConfig/deplay 下的 dev.def.xml 和 production.def.xml 文件中,添加 redis 组件的属性配置和引用
属性配置如下:
<property value="1000" name="redis_timeout" env="AUTHENTICATION_REDIS_TIMEOUT">
<label label="redis_timeout"/>
</property>
<property value="${redis.redisServiceAddress}" name="redis_host" env="AUTHENTICATION_REDIS_HOST">
<label label="redis_host"/>
</property>
<property value="${redis.redisAuth}" name="redis_password" env="AUTHENTICATION_REDIS_PASSWORD">
<label label="redis_password"/>
</property>
引用如下:
<use name="redis" optional="true" instance="comp.redis"/>
完整的配置,如下图所示
保存文件,重新发布门户,发布成功后就有了状态,注销的时候 user_session 就会立即失效,而且也可以从后端调用注销
特别说明
- 由于架构新增了 redis 模板组件,需要 redis 资源支持,因此在门户发布完成后进入重启状态前,请先保证有可分配的 redis 资源
配置一个账户可登录多台设备
经过上面的配置,一个账户只能在一个地方登录,后登录的会踢掉前面登录的账户,如果要设置一个账户可以同时登录多台设备,可以通过配置 authentication 插件中 login 和 logout 两个 api 的 session_account_mode_redis 参数值实现
这个参数的值有三个选择,默认是 replace
- replace:后登录的踢掉前面登录的账户,开启 redis 后默认为 replace 模式
- refuse:后登录的账户禁止登录,必须注销前面登录的账户
- multiply:支持一个账户登录多台设备
配置过程如下:
打开门户的 IDE,切换到代码页,在“门户自定义”组件服务端目录 model/service/comp/portalConfig 下新建一个目录 plugins,用于存放插件配置文件。在 model/service/comp/portalConfig/plugins 目录下创建一个目录,目录名可以自己定义,如 redislogin。在创建的目录下,创建一个 app.m 文件
在创建的 app.m 中重写 authentication 插件中 login 和 logut 两个 api 的参数,重写的时候,需要注意默认的参数也要添加上,默认的参数定义在 model/service/comp/entryinit/login 和 model/service/comp/entryinit/logout 目录下的 app.m 文件中的 authentication 插件中,如下图所示是 login 中的默认参数
app.m 中重写 authentication 插件中 login 和 logut 两个 api 的参数,使用默认参数,再加上需要的 session_account_mode_redis 参数,代码如下
{% raw %}
<?xml version="1.0" encoding="UTF-8" ?>
<service order="999" target="kong2">
<plugin name="authentication" enabled="true" api_name="login">
<app_key>{{.Env.API_KEY}}</app_key>
<app_secret>{{.Env.API_SECRET}}</app_secret>
<redis_timeout>{{.Env.AUTHENTICATION_REDIS_TIMEOUT}}</redis_timeout>
<redis_host>{{.Env.AUTHENTICATION_REDIS_HOST}}</redis_host>
<redis_port>{{.Env.AUTHENTICATION_REDIS_PORT}}</redis_port>
<redis_password>{{.Env.AUTHENTICATION_REDIS_PASSWORD}}</redis_password>
<session_account_mode_redis>multiply</session_account_mode_redis>
</plugin>
<plugin name="authentication" enabled="true" api_name="logout">
<app_key>{{.Env.API_KEY}}</app_key>
<app_secret>{{.Env.API_SECRET}}</app_secret>
<admin_users>system</admin_users>
<silent_mode>true</silent_mode>
<redis_timeout>{{.Env.AUTHENTICATION_REDIS_TIMEOUT}}</redis_timeout>
<redis_host>{{.Env.AUTHENTICATION_REDIS_HOST}}</redis_host>
<redis_port>{{.Env.AUTHENTICATION_REDIS_PORT}}</redis_port>
<redis_password>{{.Env.AUTHENTICATION_REDIS_PASSWORD}}</redis_password>
<session_account_mode_redis>multiply</session_account_mode_redis>
</plugin>
</service>
{% endraw %}
完整的配置,如下图所示,其中 order 是设置优先级
保存文件,重新发布门户即可