!433 更新登录日志以及在线用户展示信息
* update 更新登录日志, 在线用户展示信息(增加 客户端, 设备类型)
| | |
| | | loginService.checkLogin(LoginType.EMAIL, tenantId, user.getUserName(), () -> !validateEmailCode(tenantId, email, emailCode)); |
| | | // æ¤å¤å¯æ ¹æ®ç»å½ç¨æ·çæ°æ®ä¸å èªè¡å建 loginUser 屿§ä¸å¤ç¨ç»§æ¿æ©å±å°±è¡äº |
| | | LoginUser loginUser = loginService.buildLoginUser(user); |
| | | loginUser.setClientKey(client.getClientKey()); |
| | | loginUser.setDeviceType(client.getDeviceType()); |
| | | SaLoginModel model = new SaLoginModel(); |
| | | model.setDevice(client.getDeviceType()); |
| | | // èªå®ä¹åé
ä¸åç¨æ·ä½ç³» ä¸å token æææ¶é´ ä¸è®¾ç½®é»è®¤èµ°å
¨å± yml é
ç½® |
| | |
| | | loginService.checkLogin(LoginType.PASSWORD, tenantId, username, () -> !BCrypt.checkpw(password, user.getPassword())); |
| | | // æ¤å¤å¯æ ¹æ®ç»å½ç¨æ·çæ°æ®ä¸å èªè¡å建 loginUser |
| | | LoginUser loginUser = loginService.buildLoginUser(user); |
| | | loginUser.setClientKey(client.getClientKey()); |
| | | loginUser.setDeviceType(client.getDeviceType()); |
| | | SaLoginModel model = new SaLoginModel(); |
| | | model.setDevice(client.getDeviceType()); |
| | | // èªå®ä¹åé
ä¸åç¨æ·ä½ç³» ä¸å token æææ¶é´ ä¸è®¾ç½®é»è®¤èµ°å
¨å± yml é
ç½® |
| | |
| | | loginService.checkLogin(LoginType.SMS, tenantId, user.getUserName(), () -> !validateSmsCode(tenantId, phonenumber, smsCode)); |
| | | // æ¤å¤å¯æ ¹æ®ç»å½ç¨æ·çæ°æ®ä¸å èªè¡å建 loginUser 屿§ä¸å¤ç¨ç»§æ¿æ©å±å°±è¡äº |
| | | LoginUser loginUser = loginService.buildLoginUser(user); |
| | | loginUser.setClientKey(client.getClientKey()); |
| | | loginUser.setDeviceType(client.getDeviceType()); |
| | | SaLoginModel model = new SaLoginModel(); |
| | | model.setDevice(client.getDeviceType()); |
| | | // èªå®ä¹åé
ä¸åç¨æ·ä½ç³» ä¸å token æææ¶é´ ä¸è®¾ç½®é»è®¤èµ°å
¨å± yml é
ç½® |
| | |
| | | |
| | | // æ¤å¤å¯æ ¹æ®ç»å½ç¨æ·çæ°æ®ä¸å èªè¡å建 loginUser 屿§ä¸å¤ç¨ç»§æ¿æ©å±å°±è¡äº |
| | | LoginUser loginUser = loginService.buildLoginUser(user); |
| | | loginUser.setClientKey(client.getClientKey()); |
| | | loginUser.setDeviceType(client.getDeviceType()); |
| | | SaLoginModel model = new SaLoginModel(); |
| | | model.setDevice(client.getDeviceType()); |
| | | // èªå®ä¹åé
ä¸åç¨æ·ä½ç³» ä¸å token æææ¶é´ ä¸è®¾ç½®é»è®¤èµ°å
¨å± yml é
ç½® |
| | |
| | | loginUser.setUsername(user.getUserName()); |
| | | loginUser.setNickname(user.getNickName()); |
| | | loginUser.setUserType(user.getUserType()); |
| | | loginUser.setClientKey(client.getClientKey()); |
| | | loginUser.setDeviceType(client.getDeviceType()); |
| | | loginUser.setOpenid(openid); |
| | | |
| | | SaLoginModel model = new SaLoginModel(); |
| | |
| | | private String userName; |
| | | |
| | | /** |
| | | * 客æ·ç«¯ |
| | | */ |
| | | private String clientKey; |
| | | |
| | | /** |
| | | * 设å¤ç±»å |
| | | */ |
| | | private String deviceType; |
| | | |
| | | /** |
| | | * ç»å½IPå°å |
| | | */ |
| | | private String ipaddr; |
| | |
| | | private Long roleId; |
| | | |
| | | /** |
| | | * 客æ·ç«¯ |
| | | */ |
| | | private String clientKey; |
| | | |
| | | /** |
| | | * 设å¤ç±»å |
| | | */ |
| | | private String deviceType; |
| | | |
| | | /** |
| | | * è·åç»å½id |
| | | */ |
| | | public String getLoginId() { |
| | |
| | | dto.setLoginTime(System.currentTimeMillis()); |
| | | dto.setTokenId(tokenValue); |
| | | dto.setUserName(user.getUsername()); |
| | | dto.setClientKey(user.getClientKey()); |
| | | dto.setDeviceType(user.getDeviceType()); |
| | | dto.setDeptName(user.getDeptName()); |
| | | if(tokenConfig.getTimeout() == -1) { |
| | | RedisUtils.setCacheObject(CacheConstants.ONLINE_TOKEN_KEY + tokenValue, dto); |
| | |
| | | private String userName; |
| | | |
| | | /** |
| | | * 客æ·ç«¯ |
| | | */ |
| | | private String clientKey; |
| | | |
| | | /** |
| | | * 设å¤ç±»å |
| | | */ |
| | | private String deviceType; |
| | | |
| | | /** |
| | | * ç»å½ç¶æ 0æå 1失败 |
| | | */ |
| | | private String status; |
| | |
| | | private String userName; |
| | | |
| | | /** |
| | | * 客æ·ç«¯ |
| | | */ |
| | | private String clientKey; |
| | | |
| | | /** |
| | | * 设å¤ç±»å |
| | | */ |
| | | private String deviceType; |
| | | |
| | | /** |
| | | * ç»å½IPå°å |
| | | */ |
| | | private String ipaddr; |
| | |
| | | private String userName; |
| | | |
| | | /** |
| | | * 客æ·ç«¯ |
| | | */ |
| | | private String clientKey; |
| | | |
| | | /** |
| | | * 设å¤ç±»å |
| | | */ |
| | | private String deviceType; |
| | | |
| | | /** |
| | | * ç»å½IPå°å |
| | | */ |
| | | private String ipaddr; |
| | |
| | | private String userName; |
| | | |
| | | /** |
| | | * 客æ·ç«¯ |
| | | */ |
| | | @ExcelProperty(value = "客æ·ç«¯") |
| | | private String clientKey; |
| | | |
| | | /** |
| | | * 设å¤ç±»å |
| | | */ |
| | | @ExcelProperty(value = "设å¤ç±»å", converter = ExcelDictConvert.class) |
| | | @ExcelDictFormat(dictType = "sys_device_type") |
| | | private String deviceType; |
| | | |
| | | /** |
| | | * ç»å½ç¶æï¼0æå 1å¤±è´¥ï¼ |
| | | */ |
| | | @ExcelProperty(value = "ç»å½ç¶æ", converter = ExcelDictConvert.class) |
| | |
| | | package org.dromara.system.service.impl; |
| | | |
| | | import cn.hutool.core.util.ObjectUtil; |
| | | import cn.hutool.http.useragent.UserAgent; |
| | | import cn.hutool.http.useragent.UserAgentUtil; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | |
| | | import org.dromara.common.core.utils.ServletUtils; |
| | | import org.dromara.common.core.utils.StringUtils; |
| | | import org.dromara.common.core.utils.ip.AddressUtils; |
| | | import org.dromara.common.satoken.utils.LoginHelper; |
| | | import org.dromara.system.domain.SysClient; |
| | | import org.dromara.system.domain.SysLogininfor; |
| | | import org.dromara.system.domain.bo.SysLogininforBo; |
| | | import org.dromara.system.domain.vo.SysLogininforVo; |
| | | import org.dromara.system.mapper.SysClientMapper; |
| | | import org.dromara.system.mapper.SysLogininforMapper; |
| | | import org.dromara.system.service.ISysClientService; |
| | | import org.dromara.system.service.ISysLogininforService; |
| | | import lombok.RequiredArgsConstructor; |
| | | import lombok.extern.slf4j.Slf4j; |
| | |
| | | |
| | | private final SysLogininforMapper baseMapper; |
| | | |
| | | private final ISysClientService clientService; |
| | | |
| | | /** |
| | | * è®°å½ç»å½ä¿¡æ¯ |
| | | * |
| | |
| | | HttpServletRequest request = logininforEvent.getRequest(); |
| | | final UserAgent userAgent = UserAgentUtil.parse(request.getHeader("User-Agent")); |
| | | final String ip = ServletUtils.getClientIP(request); |
| | | // 客æ·ç«¯ä¿¡æ¯ |
| | | String clientid = request.getHeader(LoginHelper.CLIENT_KEY); |
| | | SysClient client = null; |
| | | if (StringUtils.isNotBlank(clientid)) { |
| | | client = clientService.queryByClientId(clientid); |
| | | } |
| | | |
| | | String address = AddressUtils.getRealAddressByIP(ip); |
| | | StringBuilder s = new StringBuilder(); |
| | |
| | | SysLogininforBo logininfor = new SysLogininforBo(); |
| | | logininfor.setTenantId(logininforEvent.getTenantId()); |
| | | logininfor.setUserName(logininforEvent.getUsername()); |
| | | if (ObjectUtil.isNotNull(client)) { |
| | | logininfor.setClientKey(client.getClientKey()); |
| | | logininfor.setDeviceType(client.getDeviceType()); |
| | | } |
| | | logininfor.setIpaddr(ip); |
| | | logininfor.setLoginLocation(address); |
| | | logininfor.setBrowser(browser); |
| | |
| | | info_id number(20) not null, |
| | | tenant_id varchar2(20) default '000000', |
| | | user_name varchar2(50) default '', |
| | | client_key varchar2(32) default '', |
| | | device_type varchar2(32) default '', |
| | | ipaddr varchar2(128) default '', |
| | | login_location varchar2(255) default '', |
| | | browser varchar2(50) default '', |
| | |
| | | comment on column sys_logininfor.info_id is '访é®ID'; |
| | | comment on column sys_logininfor.tenant_id is 'ç§æ·ç¼å·'; |
| | | comment on column sys_logininfor.user_name is 'ç»å½è´¦å·'; |
| | | comment on column sys_logininfor.client_key is '客æ·ç«¯'; |
| | | comment on column sys_logininfor.device_type is '设å¤ç±»å'; |
| | | comment on column sys_logininfor.ipaddr is 'ç»å½IPå°å'; |
| | | comment on column sys_logininfor.login_location is 'ç»å½å°ç¹'; |
| | | comment on column sys_logininfor.browser is 'æµè§å¨ç±»å'; |
| | |
| | | info_id int8, |
| | | tenant_id varchar(20) default '000000'::varchar, |
| | | user_name varchar(50) default ''::varchar, |
| | | client_key varchar(32) default ''::varchar, |
| | | device_type varchar(32) default ''::varchar, |
| | | ipaddr varchar(128) default ''::varchar, |
| | | login_location varchar(255) default ''::varchar, |
| | | browser varchar(50) default ''::varchar, |
| | |
| | | comment on column sys_logininfor.info_id is '访é®ID'; |
| | | comment on column sys_logininfor.tenant_id is 'ç§æ·ç¼å·'; |
| | | comment on column sys_logininfor.user_name is 'ç¨æ·è´¦å·'; |
| | | comment on column sys_logininfor.client_key is '客æ·ç«¯'; |
| | | comment on column sys_logininfor.device_type is '设å¤ç±»å'; |
| | | comment on column sys_logininfor.ipaddr is 'ç»å½IPå°å'; |
| | | comment on column sys_logininfor.login_location is 'ç»å½å°ç¹'; |
| | | comment on column sys_logininfor.browser is 'æµè§å¨ç±»å'; |
| | |
| | | info_id bigint(20) not null comment '访é®ID', |
| | | tenant_id varchar(20) default '000000' comment 'ç§æ·ç¼å·', |
| | | user_name varchar(50) default '' comment 'ç¨æ·è´¦å·', |
| | | client_key varchar(32) default '' comment '客æ·ç«¯', |
| | | device_type varchar(32) default '' comment '设å¤ç±»å', |
| | | ipaddr varchar(128) default '' comment 'ç»å½IPå°å', |
| | | login_location varchar(255) default '' comment 'ç»å½å°ç¹', |
| | | browser varchar(50) default '' comment 'æµè§å¨ç±»å', |
| | |
| | | info_id bigint NOT NULL, |
| | | tenant_id nvarchar(20) DEFAULT ('000000') NULL, |
| | | user_name nvarchar(50) DEFAULT '' NULL, |
| | | client_key nvarchar(32) DEFAULT '' NULL, |
| | | device_type nvarchar(32) DEFAULT '' NULL, |
| | | ipaddr nvarchar(128) DEFAULT '' NULL, |
| | | login_location nvarchar(255) DEFAULT '' NULL, |
| | | browser nvarchar(50) DEFAULT '' NULL, |
| | |
| | | 'COLUMN', N'user_name' |
| | | GO |
| | | EXEC sys.sp_addextendedproperty |
| | | 'MS_Description', N'客æ·ç«¯' , |
| | | 'SCHEMA', N'dbo', |
| | | 'TABLE', N'sys_logininfor', |
| | | 'COLUMN', N'client_key' |
| | | GO |
| | | EXEC sys.sp_addextendedproperty |
| | | 'MS_Description', N'设å¤ç±»å' , |
| | | 'SCHEMA', N'dbo', |
| | | 'TABLE', N'sys_logininfor', |
| | | 'COLUMN', N'device_type' |
| | | GO |
| | | EXEC sys.sp_addextendedproperty |
| | | 'MS_Description', N'ç»å½IPå°å' , |
| | | 'SCHEMA', N'dbo', |
| | | 'TABLE', N'sys_logininfor', |
¶Ô±ÈÐÂÎļþ |
| | |
| | | ALTER TABLE sys_logininfor ADD (client_key VARCHAR(32) DEFAULT ''); |
| | | COMMENT ON COLUMN sys_logininfor.client_key IS '客æ·ç«¯'; |
| | | |
| | | ALTER TABLE sys_logininfor ADD (device_type VARCHAR(32) DEFAULT ''); |
| | | COMMENT ON COLUMN sys_logininfor.device_type IS '设å¤ç±»å'; |
¶Ô±ÈÐÂÎļþ |
| | |
| | | ALTER TABLE sys_logininfor ADD client_key varchar(32) default ''::varchar; |
| | | COMMENT ON COLUMN sys_logininfor.client_key IS '客æ·ç«¯'; |
| | | |
| | | ALTER TABLE sys_logininfor ADD device_type varchar(32) default ''::varchar; |
| | | COMMENT ON COLUMN sys_logininfor.device_type IS '设å¤ç±»å'; |
¶Ô±ÈÐÂÎļþ |
| | |
| | | ALTER TABLE sys_logininfor ADD client_key nvarchar(32) DEFAULT '' NULL |
| | | GO |
| | | |
| | | EXEC sp_addextendedproperty |
| | | 'MS_Description', N'客æ·ç«¯', |
| | | 'SCHEMA', N'dbo', |
| | | 'TABLE', N'sys_logininfor', |
| | | 'COLUMN', N'client_key' |
| | | GO |
| | | |
| | | ALTER TABLE sys_logininfor ADD device_type nvarchar(32) DEFAULT '' NULL |
| | | GO |
| | | |
| | | EXEC sp_addextendedproperty |
| | | 'MS_Description', N'设å¤ç±»å', |
| | | 'SCHEMA', N'dbo', |
| | | 'TABLE', N'sys_logininfor', |
| | | 'COLUMN', N'device_type' |
| | | GO |
¶Ô±ÈÐÂÎļþ |
| | |
| | | ALTER TABLE sys_logininfor |
| | | ADD COLUMN client_key VARCHAR(32) NULL DEFAULT NULL COMMENT '客æ·ç«¯' AFTER `user_type`, |
| | | ADD COLUMN device_type VARCHAR(32) NULL DEFAULT NULL COMMENT '设å¤ç±»å' AFTER `client_key`; |