冲突解决

yun-zuoyi
wynne1005 4 years ago
commit 252969cbc9

@ -2,7 +2,13 @@ package cn.estsh.i3plus.core.api.iservice.base;
import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.platform.platbean.*;
import cn.estsh.i3plus.pojo.model.platform.LogFieldModel;
import cn.estsh.i3plus.pojo.model.platform.SysLogModel;
import cn.estsh.i3plus.pojo.platform.platbean.SysLogConsole;
import cn.estsh.i3plus.pojo.platform.platbean.SysLogException;
import cn.estsh.i3plus.pojo.platform.platbean.SysLogOperate;
import cn.estsh.i3plus.pojo.platform.platbean.SysLogSystem;
import cn.estsh.i3plus.pojo.platform.platbean.SysLogTaskTime;
import io.swagger.annotations.ApiOperation;
import java.util.List;
@ -60,4 +66,6 @@ public interface ISysLogService {
@ApiOperation(value = "查询时间段内各等级日志数量",notes = "查询时间段内各等级日志数量")
Map<String, Object> querySysLogSystemByLevel(String startTime, String endTime);
List<LogFieldModel> querySysLog(SysLogModel logModel,Pager pager);
}

@ -1,11 +1,14 @@
package cn.estsh.i3plus.core.api.iservice.base;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.shirotoken.AdminToken;
import cn.estsh.i3plus.pojo.base.shirotoken.SaAdminToken;
import cn.estsh.i3plus.pojo.base.shirotoken.UserToken;
import cn.estsh.i3plus.pojo.platform.bean.SessionUser;
import io.swagger.annotations.ApiOperation;
import javax.servlet.http.HttpServletRequest;
/**
* @Description :
* @Reference :
@ -17,6 +20,7 @@ public interface ISystemLoginService {
/**
*
*
* @param loginName
* @param loginPwd
* @param languageCode
@ -27,6 +31,7 @@ public interface ISystemLoginService {
/**
*
*
* @param loginName
* @param loginPwd
* @param languageCode
@ -37,6 +42,7 @@ public interface ISystemLoginService {
/**
*
*
* @param authenticationToken
* @return
*/
@ -45,6 +51,7 @@ public interface ISystemLoginService {
/**
*
*
* @param authenticationToken
* @return
*/
@ -53,18 +60,52 @@ public interface ISystemLoginService {
/**
*
*
* @param authenticationToken
* @return
*/
@ApiOperation(value = "封装用户", notes = "封装超级管理员信息")
SessionUser queryCheckSaAdminLogin(SaAdminToken authenticationToken);
/**
* E9
*
* @param userToken token
* @return
*/
@ApiOperation(value = "封装用户", notes = "封装普通用户信息")
SessionUser queryCheckE9UserLogin(UserToken userToken);
/**
* E9Admin
*
* @param adminToken admin token
* @return
*/
@ApiOperation(value = "封装用户", notes = "封装管理员信息")
SessionUser queryCheckE9AdminLogin(AdminToken adminToken);
/**
* E9 SA
* @param saAdminToken sa token
* @return
*/
@ApiOperation(value = "封装用户", notes = "封装超级管理员信息")
SessionUser queryCheckE9SaAdminLogin(SaAdminToken saAdminToken);
/**
*
*
* @param loginName
* @param sessionId Session ID
* @return
*/
@ApiOperation(value = "登录密码错误", notes = "登录密码错误记录错误次数功能")
Integer doLoginPasswordError(String loginName, String sessionId);
/**
*
*
* @param request http
* @return
*/
CommonEnumUtil.LOG_LOGIN_PLATFORM getLoginPlatform(HttpServletRequest request);
}

@ -0,0 +1,21 @@
package cn.estsh.i3plus.core.api.iservice.base;
import cn.estsh.i3plus.pojo.model.platform.SysLoginModel;
import cn.estsh.impp.framework.boot.util.ResultBean;
import javax.servlet.http.HttpServletRequest;
import java.util.function.BiFunction;
/**
* @author Wynne.Lu
* @date 2021/1/18 10:50
* @desc
*/
public interface ISystemLoginStrategyService {
/**
* @param request
* @param loginModel
* @return
*/
BiFunction<HttpServletRequest, SysLoginModel, ResultBean> login();
}

@ -20,19 +20,21 @@ public interface ISysUserService {
/**
*
*
* @param loginName
* @param password
* @param languageCode
* @return
*/
@ApiOperation(value = "账号登录", notes = "普通账号登录功能")
SessionUser queryUserLogin(String loginName, String password, String languageCode,Integer loginPlatform,String deviceId) throws AuthenticationException;
SessionUser loginUser(String loginName, String password, String languageCode, Integer loginPlatform, String deviceId) throws AuthenticationException;
@ApiOperation(value = "获取Token", notes = "根据登录名判断是否是管理员")
BaseToken getToken(String loginName, String password, String languageCode, Integer loginPlatform);
/**
*
*
* @param id
* @param status
* @param user
@ -46,6 +48,7 @@ public interface ISysUserService {
/**
*
*
* @param ids
* @param status
* @param user
@ -55,6 +58,7 @@ public interface ISysUserService {
/**
*
*
* @param sysUser
*/
@ApiOperation(value = "修改账号信息", notes = "修改账号信息")
@ -62,6 +66,7 @@ public interface ISysUserService {
/**
*
*
* @param userId ID
* @param password
* @param newPwd
@ -71,6 +76,7 @@ public interface ISysUserService {
/**
*
*
* @param userId
*/
@ApiOperation(value = "刷新账号", notes = "刷新账号登录信息")
@ -78,6 +84,7 @@ public interface ISysUserService {
/**
*
*
* @param sysUser
* @return
*/
@ -86,6 +93,7 @@ public interface ISysUserService {
/**
*
*
* @param sysLogUserLogin
* @return
*/
@ -94,6 +102,7 @@ public interface ISysUserService {
/**
*
*
* @param sysUser
* @param roleIds
* @param userName
@ -103,6 +112,7 @@ public interface ISysUserService {
/**
* Key
*
* @param id
* @return
*/
@ -111,6 +121,7 @@ public interface ISysUserService {
/**
*
*
* @param ids ID
* @param user
*/
@ -119,6 +130,7 @@ public interface ISysUserService {
/**
*
*
* @return
*/
@ApiOperation(value = "查询所有", notes = "查询所有账号信息")
@ -126,6 +138,7 @@ public interface ISysUserService {
/**
*
*
* @return
*/
@ApiOperation(value = "查询所有", notes = "查询所有账号信息")
@ -133,6 +146,7 @@ public interface ISysUserService {
/**
*
*
* @param roleId ID
* @return ID
*/
@ -149,6 +163,7 @@ public interface ISysUserService {
/**
*
*
* @param user
* @param pager
* @return
@ -161,6 +176,7 @@ public interface ISysUserService {
/**
* id
*
* @param id
* @return
*/
@ -169,6 +185,7 @@ public interface ISysUserService {
/**
*
*
* @param id
* @return
*/
@ -177,6 +194,7 @@ public interface ISysUserService {
/**
*
*
* @param loginName
* @return
*/
@ -185,6 +203,7 @@ public interface ISysUserService {
/**
*
*
* @param email
* @return
*/
@ -193,6 +212,7 @@ public interface ISysUserService {
/**
*
*
* @param phone
* @return
*/
@ -201,6 +221,7 @@ public interface ISysUserService {
/**
*
*
* @param userId
* @return
*/
@ -209,6 +230,7 @@ public interface ISysUserService {
/**
*
*
* @param userLoginName
* @param id
* @return
@ -218,6 +240,7 @@ public interface ISysUserService {
/**
*
*
* @param email
* @param id
* @return
@ -227,6 +250,7 @@ public interface ISysUserService {
/**
*
*
* @param phone
* @param id
* @return
@ -236,6 +260,7 @@ public interface ISysUserService {
/**
*
*
* @param user
*/
@ApiOperation(value = "账号检查", notes = "检查账号信息唯一(登录名、邮箱、手机号)")
@ -243,6 +268,7 @@ public interface ISysUserService {
/**
*
*
* @return
*/
@ApiOperation(value = "查询账户数量")
@ -250,6 +276,7 @@ public interface ISysUserService {
/**
*
*
* @param sessionUser
* @param user
* @param userType
@ -267,6 +294,7 @@ public interface ISysUserService {
/**
* id
*
* @param ids id
* @return
*/

@ -216,6 +216,12 @@
<artifactId>elasticsearch</artifactId>
<version>7.5.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
<version>2.4.2</version>
</dependency>
</dependencies>
<build>

@ -4,18 +4,23 @@ import cn.estsh.i3plus.core.apiservice.auth.realm.AdminAuthRealm;
import cn.estsh.i3plus.core.apiservice.auth.realm.DefaultModularRealm;
import cn.estsh.i3plus.core.apiservice.auth.realm.SaAuthRealm;
import cn.estsh.i3plus.core.apiservice.auth.realm.UserAuthRealm;
import cn.estsh.i3plus.core.apiservice.auth.realm.strategy.e9.E9AdminAuthRealm;
import cn.estsh.i3plus.core.apiservice.auth.realm.strategy.e9.E9SaAuthRealm;
import cn.estsh.i3plus.core.apiservice.auth.realm.strategy.e9.E9UserAuthRealm;
import cn.estsh.i3plus.platform.common.util.CommonConstWords;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.enumutil.ImppEnumUtil;
import cn.estsh.i3plus.pojo.model.platform.RoleRealmModel;
import cn.estsh.impp.framework.boot.auth.filter.AdminFilter;
import cn.estsh.impp.framework.boot.auth.filter.SaAdminFilter;
import cn.estsh.impp.framework.boot.auth.filter.UserFilter;
import cn.estsh.impp.framework.boot.configuration.RedisConfig;
import org.apache.shiro.authc.pam.ModularRealmAuthenticator;
import org.apache.shiro.cache.CacheManager;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.realm.Realm;
import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.web.session.mgt.DefaultWebSessionManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -26,9 +31,13 @@ import org.springframework.context.annotation.Configuration;
import javax.annotation.Resource;
import javax.servlet.Filter;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @Description : shiro
@ -83,12 +92,36 @@ public class ShiroAuthConfiguration {
return new UserAuthRealm();
}
public Map<String,Realm> supportRealmMap(){
@Bean
public E9AdminAuthRealm e9AdminAuthRealm() {
return new E9AdminAuthRealm();
}
@Bean
public E9SaAuthRealm e9SaAuthRealm() {
return new E9SaAuthRealm();
}
@Bean
public E9UserAuthRealm e9UserAuthRealm() {
return new E9UserAuthRealm();
}
public Map<String, RoleRealmModel> supportRealmMap() {
//支持的授权规则
Map<String,Realm> realms = new HashMap();
realms.put(CommonEnumUtil.USER_TYPE.USER.getCode(),userAuthRealm());
realms.put(CommonEnumUtil.USER_TYPE.ADMIN.getCode(),adminAuthRealm());
realms.put(CommonEnumUtil.USER_TYPE.SA.getCode(),saAuthRealm());
Map<String, RoleRealmModel> realms = new HashMap(8);
RoleRealmModel defaultRoleRealmModel = RoleRealmModel.builder()
.userRealm(userAuthRealm())
.adminRealm(adminAuthRealm())
.saRealm(saAuthRealm()).build();
realms.put(ImppEnumUtil.AUTH_LOGIN_STRATEGY.ACCOUNT.getCode(), defaultRoleRealmModel);
RoleRealmModel e9RoleRealmModel = RoleRealmModel.builder()
.userRealm(e9UserAuthRealm())
.adminRealm(e9AdminAuthRealm())
.saRealm(e9SaAuthRealm()).build();
realms.put(ImppEnumUtil.AUTH_LOGIN_STRATEGY.E9.getCode(), e9RoleRealmModel);
return realms;
}
@ -103,7 +136,14 @@ public class ShiroAuthConfiguration {
LOGGER.info("【app-shiro-加载securityManager】");
DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
securityManager.setAuthenticator(modularRealmAuthenticator());
securityManager.setRealms(supportRealmMap().values());
List<Realm> allRealmBeans = new ArrayList<>();
supportRealmMap().values().forEach(d -> {
allRealmBeans.add(d.getUserRealm());
allRealmBeans.add(d.getAdminRealm());
allRealmBeans.add(d.getSaRealm());
});
securityManager.setRealms(allRealmBeans);
securityManager.setCacheManager(getEhCacheManage); //缓存管理
securityManager.setSessionManager(getSessionManage); //会话管理
//securityManager.setRememberMeManager(getRememberManager());
@ -115,7 +155,7 @@ public class ShiroAuthConfiguration {
ShiroFilterFactoryBean factoryBean = new ShiroFilterFactoryBean();
factoryBean.setSecurityManager(securityManager);
Map<String, Filter> filterMap = new HashMap();
Map<String, Filter> filterMap = new HashMap(8);
filterMap.put("user_filter", new UserFilter());
filterMap.put("admin_filter", new AdminFilter());
filterMap.put("saadmin_filter", new SaAdminFilter());

@ -1,10 +1,13 @@
package cn.estsh.i3plus.core.apiservice.auth.realm;
import cn.estsh.i3plus.core.apiservice.controller.DemoAuthController;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.platform.common.util.PlatformConstWords;
import cn.estsh.i3plus.pojo.base.bean.BaseThreadLocal;
import cn.estsh.i3plus.pojo.base.enumutil.ImppEnumUtil;
import cn.estsh.i3plus.pojo.base.shirotoken.AdminToken;
import cn.estsh.i3plus.pojo.base.shirotoken.SaAdminToken;
import cn.estsh.i3plus.pojo.base.shirotoken.UserToken;
import cn.estsh.i3plus.pojo.model.platform.RoleRealmModel;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
@ -25,9 +28,10 @@ import java.util.Map;
**/
public class DefaultModularRealm extends ModularRealmAuthenticator {
private static final Logger LOGGER = LoggerFactory.getLogger(DefaultModularRealm.class);
private Map<String, Realm> definedRealms;
public DefaultModularRealm(Map<String, Realm> definedRealms) {
private Map<String, RoleRealmModel> definedRealms;
public DefaultModularRealm(Map<String, RoleRealmModel> definedRealms) {
this.definedRealms = definedRealms;
}
@ -36,31 +40,38 @@ public class DefaultModularRealm extends ModularRealmAuthenticator {
return super.doMultiRealmAuthentication(realms, token);
}
public Map<String, Realm> getDefinedRealms() {
return this.definedRealms;
@Override
protected AuthenticationInfo doAuthenticate(AuthenticationToken token) throws AuthenticationException {
Realm realm;
RoleRealmModel roleRealmModel;
String realmStrategy = (String) BaseThreadLocal.getData(PlatformConstWords.AUTH_LOGIN_STRATEGY);
if (StringUtils.isEmpty(realmStrategy)) {
roleRealmModel = this.definedRealms.get(ImppEnumUtil.AUTH_LOGIN_STRATEGY.ACCOUNT.getCode());
} else {
roleRealmModel = this.definedRealms.get(realmStrategy);
}
public void setDefinedRealms(Map<String, Realm> definedRealms) {
this.definedRealms = definedRealms;
realm = chooseRealmByUserType(token, roleRealmModel);
return this.doSingleRealmAuthentication(realm, token);
}
@Override
protected AuthenticationInfo doAuthenticate(AuthenticationToken token) throws AuthenticationException {
private Realm chooseRealmByUserType(AuthenticationToken token, RoleRealmModel roleRealmModel) {
Realm realm;
if (token instanceof SaAdminToken) {
//超级管理员
realm = (Realm)this.definedRealms.get(CommonEnumUtil.USER_TYPE.SA.getCode());
realm = roleRealmModel.getSaRealm();
} else if (token instanceof AdminToken) {
//管理员
realm = (Realm)this.definedRealms.get(CommonEnumUtil.USER_TYPE.ADMIN.getCode());
realm = roleRealmModel.getAdminRealm();
} else if (token instanceof UserToken) {
//用户
realm = (Realm)this.definedRealms.get(CommonEnumUtil.USER_TYPE.USER.getCode());
realm = roleRealmModel.getUserRealm();
} else {
throw new AuthenticationException("不存在TOKEN请联系管理员" + token + "");
}
return this.doSingleRealmAuthentication(realm, token);
return realm;
}
@Override

@ -0,0 +1,55 @@
package cn.estsh.i3plus.core.apiservice.auth.realm.strategy.e9;
import cn.estsh.i3plus.core.api.iservice.base.ISystemLoginService;
import cn.estsh.i3plus.pojo.base.shirotoken.AdminToken;
import cn.estsh.i3plus.pojo.platform.bean.SessionUser;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.SimpleAuthenticationInfo;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.authz.SimpleAuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
/**
* @Description :
* @Reference :
* @Author : alwaysfrin
* @CreateDate : 2018-10-13 14:04
* @Modify:
**/
public class E9AdminAuthRealm extends AuthorizingRealm {
public static final Logger LOGGER = LoggerFactory.getLogger(E9AdminAuthRealm.class);
@Autowired
private ISystemLoginService systemLoginService;
public E9AdminAuthRealm() {
//添加支持的token
this.setAuthenticationTokenClass(AdminToken.class);
}
//权限验证
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
return new SimpleAuthorizationInfo();
}
//令牌确认
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
try {
//管理员令牌
SessionUser sessionUser = systemLoginService.queryCheckE9AdminLogin((AdminToken) authenticationToken);
LOGGER.info("管理员令牌验证:{}", sessionUser);
return new SimpleAuthenticationInfo(sessionUser, ((AdminToken) authenticationToken).getLoginName(), this.getName());
} catch (Exception e) {
e.printStackTrace();
throw new AuthenticationException(e.getMessage());
}
}
}

@ -0,0 +1,50 @@
package cn.estsh.i3plus.core.apiservice.auth.realm.strategy.e9;
import cn.estsh.i3plus.core.api.iservice.base.ISystemLoginService;
import cn.estsh.i3plus.pojo.base.shirotoken.SaAdminToken;
import cn.estsh.i3plus.pojo.platform.bean.SessionUser;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.SimpleAuthenticationInfo;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.authz.SimpleAuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
/**
* @Description :
* @Reference :
* @Author : alwaysfrin
* @CreateDate : 2018-10-13 14:04
* @Modify:
**/
public class E9SaAuthRealm extends AuthorizingRealm {
public static final Logger LOGGER = LoggerFactory.getLogger(E9SaAuthRealm.class);
@Autowired
private ISystemLoginService systemLoginService;
public E9SaAuthRealm() {
//添加支持的token
this.setAuthenticationTokenClass(SaAdminToken.class);
}
//权限验证
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
return new SimpleAuthorizationInfo();
}
//令牌确认
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
//管理员令牌
SessionUser sessionUser = systemLoginService.queryCheckE9SaAdminLogin((SaAdminToken) authenticationToken);
LOGGER.info("超级管理员令牌验证:{}", sessionUser);
return new SimpleAuthenticationInfo(sessionUser, ((SaAdminToken) authenticationToken).getLoginName(), this.getName());
}
}

@ -0,0 +1,57 @@
package cn.estsh.i3plus.core.apiservice.auth.realm.strategy.e9;
import cn.estsh.i3plus.core.api.iservice.base.ISystemLoginService;
import cn.estsh.i3plus.pojo.base.shirotoken.AdminToken;
import cn.estsh.i3plus.pojo.base.shirotoken.UserToken;
import cn.estsh.i3plus.pojo.platform.bean.SessionUser;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.SimpleAuthenticationInfo;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.authz.SimpleAuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @Description :
* @Reference :-
* @Author : alwaysfrin
* @CreateDate : 2018-10-13 14:04
* @Modify:
**/
public class E9UserAuthRealm extends AuthorizingRealm {
public static final Logger LOGGER = LoggerFactory.getLogger(E9UserAuthRealm.class);
@Autowired
private ISystemLoginService systemLoginService;
public E9UserAuthRealm() {
//添加支持的token
this.setAuthenticationTokenClass(UserToken.class);
}
//权限验证
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
return new SimpleAuthorizationInfo();
}
//令牌确认
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
try {
//管理员令牌
SessionUser sessionUser = systemLoginService.queryCheckE9UserLogin((UserToken) authenticationToken);
LOGGER.info("用户令牌验证:{}", sessionUser);
return new SimpleAuthenticationInfo(sessionUser, ((UserToken) authenticationToken).getLoginName(), this.getName());
} catch (Exception e) {
e.printStackTrace();
throw new AuthenticationException(e.getMessage());
}
}
}

@ -47,6 +47,7 @@ public class DemoController extends CoreBaseController {
@ApiOperation(value = "添加操作日志", notes = "添加操作日志,可用于国际化")
public ResultBean putRedisList(boolean isUpdate) {
try {
int x= 1/0;
// pojoVersionPlanService.refreshCache(isUpdate);
return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
} catch (ImppBusiException busExcep) {

@ -0,0 +1,91 @@
package cn.estsh.i3plus.core.apiservice.controller.base;
import cn.estsh.i3plus.core.api.iservice.base.ISysLogService;
import cn.estsh.i3plus.platform.plugin.elasticsearch.ElasticSearchTool;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.model.platform.LogFieldModel;
import cn.estsh.i3plus.pojo.model.platform.SysLogModel;
import cn.estsh.impp.framework.boot.util.ResultBean;
import cn.estsh.impp.framework.boot.util.ValidatorBean;
import com.alibaba.fastjson.JSON;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.bucket.histogram.DateHistogramAggregationBuilder;
import org.elasticsearch.search.aggregations.bucket.histogram.DateHistogramInterval;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author Wynne.Lu
* @date 2021/2/20 10:49
* @desc
*/
@Slf4j
@Api(tags = "系统日志查询服务")
@RestController
@RequestMapping("/log")
public class SysLogController {
@Autowired
private ISysLogService sysLogService;
@Value(value = "${elasticsearch.host:}")
private String elasticsearchHost;
@GetMapping("/log-query")
@ApiOperation(value = "按条件分页查询日志", notes = "按条件分页查询日志")
public ResultBean queryLogs(SysLogModel sysLogModel, Pager pager) {
try {
ValidatorBean.beginValid(sysLogModel)
.notNull("queryDate", sysLogModel.getQueryDate())
.notNull("queryBeginTime", sysLogModel.getQueryBeginTime())
.notNull("queryEndTime", sysLogModel.getQueryEndTime())
.notNull("level", sysLogModel.getLevel())
.notNull("indexName", sysLogModel.getIndexName());
List<LogFieldModel> list = sysLogService.querySysLog(sysLogModel, pager);
sysLogModel.setLogs(list);
return ResultBean.success(JSON.toJSONString(sysLogModel));
} catch (NoSuchFieldException e) {
log.error("字段缺省 发生异常:", e);
return ResultBean.fail(e.getMessage());
} catch (Exception e) {
log.error("搜索日志 发生异常:", e);
return ResultBean.fail(e.getMessage());
}
}
@GetMapping("/log-count-query")
@ApiOperation(value = "按条件分页查询日志", notes = "按条件分页查询日志")
public ResultBean queryLogsCount(SysLogModel sysLogModel, Pager pager) {
DateHistogramAggregationBuilder dateHistogramAgg = AggregationBuilders.dateHistogram("groupDate").field("@timestamp")
.calendarInterval(DateHistogramInterval.DAY).minDocCount(1);
return null;
}
@GetMapping("/indices-query")
@ApiOperation(value = "所有索引查询", notes = "所有索引查询")
public ResultBean queryIndices(String date) {
if (StringUtils.isEmpty(elasticsearchHost)) {
return ResultBean.fail("未在配置文件中配置Elasticsearch的地址");
}
ElasticSearchTool.init(elasticsearchHost);
List<String> indices = ElasticSearchTool.findMappingMetaData().keySet()
.stream().filter(d -> d.contains(date)).collect(Collectors.toList());
return ResultBean.success(JSON.toJSONString(indices));
}
}

@ -2,13 +2,18 @@ package cn.estsh.i3plus.core.apiservice.controller.base;
import cn.estsh.i3plus.core.api.iservice.base.ISynchronizedService;
import cn.estsh.i3plus.core.api.iservice.base.ISystemInitService;
import cn.estsh.i3plus.core.api.iservice.base.ISystemLoginService;
import cn.estsh.i3plus.core.api.iservice.base.ISystemLoginStrategyService;
import cn.estsh.i3plus.core.api.iservice.busi.*;
import cn.estsh.i3plus.core.apiservice.controller.busi.PersonnelController;
import cn.estsh.i3plus.core.apiservice.controller.busi.SysUserInfoController;
import cn.estsh.i3plus.core.apiservice.util.SysUserPasswordUtil;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum;
import cn.estsh.i3plus.platform.common.tool.*;
import cn.estsh.i3plus.platform.common.tool.JsonUtilTool;
import cn.estsh.i3plus.platform.common.tool.ServletRequestTool;
import cn.estsh.i3plus.platform.common.tool.StringTool;
import cn.estsh.i3plus.platform.common.tool.TimeTool;
import cn.estsh.i3plus.platform.common.util.CommonConstWords;
import cn.estsh.i3plus.platform.common.util.PlatformConstWords;
import cn.estsh.i3plus.pojo.base.annotation.AnnoIgnoreLog;
@ -16,9 +21,11 @@ import cn.estsh.i3plus.pojo.base.bean.BaseConstWords;
import cn.estsh.i3plus.pojo.base.bean.BaseThreadLocal;
import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.enumutil.ImppEnumUtil;
import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil;
import cn.estsh.i3plus.pojo.model.common.CloudPagerModel;
import cn.estsh.i3plus.pojo.model.license.ImppLicense;
import cn.estsh.i3plus.pojo.model.platform.SysLoginModel;
import cn.estsh.i3plus.pojo.model.platform.UserDetailModel;
import cn.estsh.i3plus.pojo.model.platform.UserDetailPagerModel;
import cn.estsh.i3plus.pojo.platform.bean.*;
@ -28,24 +35,48 @@ import cn.estsh.impp.framework.boot.exception.ImppBusiException;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import cn.estsh.impp.framework.boot.license.ImppLicenseTool;
import cn.estsh.impp.framework.boot.license.serviceimpl.ImppLicenseDecoder;
import cn.estsh.impp.framework.boot.util.*;
import cn.estsh.impp.framework.boot.util.ImppRedis;
import cn.estsh.impp.framework.boot.util.LocaleUtils;
import cn.estsh.impp.framework.boot.util.RedisCacheTool;
import cn.estsh.impp.framework.boot.util.ResultBean;
import cn.estsh.impp.framework.boot.util.SpringContextsUtil;
import cn.estsh.impp.framework.boot.util.ValidatorBean;
import com.alibaba.fastjson.JSONObject;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.authc.*;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.CredentialsException;
import org.apache.shiro.authc.IncorrectCredentialsException;
import org.apache.shiro.authc.LockedAccountException;
import org.apache.shiro.authc.UnknownAccountException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
import java.util.function.BiFunction;
import java.util.stream.Collectors;
import static cn.estsh.i3plus.platform.common.util.CommonConstWords.DEFAULT_LANGUAGE;
/**
* @Description :
* @Reference :
@ -100,6 +131,9 @@ public class WhiteController extends CoreBaseController {
private ISysConfigService configService;
@Autowired
private ISystemLoginService loginService;
@Autowired
private SysUserPasswordUtil userPasswordUtil;
@Resource(name = CommonConstWords.IMPP_REDIS_RES)
@ -114,7 +148,6 @@ public class WhiteController extends CoreBaseController {
@Autowired
private RabbitTemplate rabbitTemplate;
@GetMapping(value = "/sys-locale-language/list")
@ApiOperation(value = "查询可用语言", notes = "查询可用语言")
public ResultBean listSysLocaleLanguage() {
@ -140,6 +173,19 @@ public class WhiteController extends CoreBaseController {
}
}
@GetMapping(value = "/session-user")
@ApiOperation(value = "获取用户信息", notes = "获取当前登录用户账号详细信息")
public ResultBean getSession() {
LOGGER.info("获取用户信息...lang:{}", AuthUtil.getSessionAttribute("languageCode"));
try {
SessionUser sUser = AuthUtil.getSessionUser();
LOGGER.info("用户:{}", sUser);
return new ResultBean(true, "", sUser);
} catch (ImppBusiException e) {
return new ResultBean(false, e.getErrorDetail() + "-[解决]" + e.getErrorSolution());
}
}
/**
* @return
*/
@ -155,97 +201,109 @@ public class WhiteController extends CoreBaseController {
}
}
@GetMapping(value = "/auth/login")
@ApiOperation(value = "登陆", notes = "登陆")
public ResultBean login(HttpServletRequest request, String loginName, String loginPwd,
@RequestParam(required = false) String languageCode,
@RequestParam(required = false) String deviceId) {
Long startTime = System.currentTimeMillis();
startMultiService();
licenseClickService.checkLicenseNumberLogin();
@GetMapping(value = "/auth/{loginStrategy}/sso-login")
@ApiOperation(value = "登录", notes = "登录")
public ResultBean ssoLogin(HttpServletRequest request, @PathVariable(name = "loginStrategy") String loginStrategy) throws NoSuchFieldException {
String fieldMapping = RedisCacheTool.getSysConfigStrVal(PlatformConstWords.SSO_REQUEST_MAPPING);
if (StringUtils.isEmpty(fieldMapping)) {
return ResultBean.fail("请在平台数据库中配置表添加字段映射配置");
}
LOGGER.info("用户登陆 loginName:{} loginPwd:{} languageCode:{}", loginName, loginPwd, languageCode);
ResultBean result = null;
CommonEnumUtil.USER_LOGIN_STATUS userLoginStatus = CommonEnumUtil.USER_LOGIN_STATUS.LOGIN_SUCCESS;
SysLoginModel loginModel = assembleLoginModelByRequest(request, fieldMapping);
loginModel.setLoginStrategy(loginStrategy);
try {
ValidatorBean.checkNotNull(languageCode, "语言不能为空");
// TODO 后期移除,暂时用于避免自动登录后前台没有正确的传输组织代码信息
if ("null".equals(languageCode)) {
languageCode = DEFAULT_LANGUAGE;
ValidatorBean.beginValid(loginModel)
.notNull("loginStrategy", loginModel.getLoginStrategy())
.notNull("loginName", loginModel.getLoginName());
String beanName = ImppEnumUtil.AUTH_LOGIN_STRATEGY.codeOfStrategyName(loginModel.getLoginStrategy());
ISystemLoginStrategyService loginStrategyService = (ISystemLoginStrategyService) SpringContextsUtil.getBean(beanName);
BaseThreadLocal.setData(PlatformConstWords.IS_SSO_LOGIN, true);
return loginByStrategy(request, loginModel, loginStrategyService.login());
}
// 设置语言代码
BaseThreadLocal.setData(BaseThreadLocal.LANGUAGE_CODE, languageCode);
private SysLoginModel assembleLoginModelByRequest(HttpServletRequest request, String fieldMapping) {
JSONObject mappingObject = (JSONObject) JSONObject.parse(fieldMapping);
ValidatorBean.checkNotNull(loginName, "用户名不能为空");
ValidatorBean.checkNotNull(loginPwd, "密码不能为空");
SysLoginModel loginModel = new SysLoginModel();
getJsonObjectParameterFromRequest("loginName", request, mappingObject).ifPresent(d -> loginModel.setLoginName(d.toString()));
getJsonObjectParameterFromRequest("loginPwd", request, mappingObject).ifPresent(d -> loginModel.setLoginPwd(d.toString()));
getJsonObjectParameterFromRequest("appId", request, mappingObject).ifPresent(d -> loginModel.setAppId(d.toString()));
getJsonObjectParameterFromRequest("languageCode", request, mappingObject).ifPresent(d -> loginModel.setLanguageCode(d.toString()));
getJsonObjectParameterFromRequest("deviceId", request, mappingObject).ifPresent(d -> loginModel.setDeviceId(d.toString()));
int sessionMode = RedisCacheTool.getSysConfigIntVal(CommonConstWords.CONFIG_SESSION_MODE, CommonConstWords.CONFIG_SESSION_MODE_DEFAULT);
if (sessionMode != CommonEnumUtil.SESSION_MODE.SEIZE.getValue()) {
logout();
return loginModel;
}
SessionUser user = userService.queryUserLogin(loginName.trim(), loginPwd.trim(), languageCode, getLoginPlatform().getValue(), deviceId);
private Optional<Object> getJsonObjectParameterFromRequest(String key, HttpServletRequest request, JSONObject mappingObject) {
Object data = request.getParameter(mappingObject.get(key) == null ? "" : mappingObject.get(key).toString());
return Optional.ofNullable(data);
}
String redisKey = CommonConstWords.USER_LOGIN_ERROR + "_" + user.getUser().getId();
redisCore.deleteKey(redisKey);
@GetMapping(value = "/auth/login")
@ApiOperation(value = "登录", notes = "登录")
public ResultBean login(HttpServletRequest request, String loginName, String loginPwd,
@RequestParam(required = false) String languageCode,
@RequestParam(required = false) String deviceId) {
SysLoginModel loginModel = SysLoginModel.builder()
.loginName(loginName)
.loginPwd(loginPwd)
.languageCode(languageCode)
.deviceId(deviceId)
.loginStrategy(ImppEnumUtil.AUTH_LOGIN_STRATEGY.ACCOUNT.getCode()).build();
String beanName = ImppEnumUtil.AUTH_LOGIN_STRATEGY.codeOfStrategyName(loginModel.getLoginStrategy());
ISystemLoginStrategyService loginStrategyService = (ISystemLoginStrategyService) SpringContextsUtil.getBean(beanName);
// LOGGER.info("会员登陆:{}",user);
return loginByStrategy(request, loginModel, loginStrategyService.login());
}
result = new ResultBean(true, AuthUtil.getSession().getId().toString(), AuthUtil.getSessionUser());
result.setUrl("/");
// 记录登录记录
recordSysUserLog(user.getUser().getUserInfoId(), loginName, CommonEnumUtil.USER_LOGIN_STATUS.LOGIN_SUCCESS.getValue());
AuthUtil.setOrganize(user.getUser().getOrganize());
private ResultBean loginByStrategy(HttpServletRequest request, SysLoginModel loginModel, BiFunction<HttpServletRequest, SysLoginModel, ResultBean> loginStrategy) {
long startTime = System.currentTimeMillis();
licenseClickService.checkLicenseNumberLogin();
LOGGER.info("用户登陆 loginName:{} loginPwd:{} languageCode:{}", loginModel.getLoginName(), loginModel.getLoginPwd(), loginModel.getLanguageCode());
ResultBean result = null;
CommonEnumUtil.USER_LOGIN_STATUS userLoginStatus = CommonEnumUtil.USER_LOGIN_STATUS.LOGIN_SUCCESS;
try {
result = loginStrategy.apply(request, loginModel);
} catch (IncorrectCredentialsException e) {
result = ResultBean.fail(ImppExceptionEnum.LOGIN_EXCEPTION_USER_PASSWORD);
userPasswordUtil.checkLoginErrorNumber(loginName, result, e);
userPasswordUtil.checkLoginErrorNumber(loginModel.getLoginName(), result, e);
userLoginStatus = CommonEnumUtil.USER_LOGIN_STATUS.WRONG_PASSWORD;
} catch (CredentialsException e) {
// 用户名或密码错误
result = ResultBean.fail(ImppExceptionEnum.LOGIN_EXCEPTION_USER_NAME);
// 记录登录记录
userLoginStatus = CommonEnumUtil.USER_LOGIN_STATUS.WRONG_USERNAME_OR_PASSWORD;
} catch (LockedAccountException e) {
// 账号已锁定
result = ResultBean.fail(ImppExceptionEnum.LOGIN_EXCEPTION_USER_LOCKING);
// 记录登录记录
userLoginStatus = CommonEnumUtil.USER_LOGIN_STATUS.USER_LOGIN_LOCKING;
} catch (UnknownAccountException e) {
// 用户信息不存在
result = ResultBean.fail(ImppExceptionEnum.LOGIN_EXCEPTION_USER_INFO_NULL);
// 记录登录记录
userLoginStatus = CommonEnumUtil.USER_LOGIN_STATUS.USER_INFO_NULL;
} catch (AuthenticationException e) {
// 系统异常
result = ResultBean.fail(ImppExceptionEnum.LOGIN_EXCEPTION_USER_PASSWORD.getDescription()).setCode(ImppExceptionEnum.LOGIN_EXCEPTION_USER_PASSWORD.getCode());
result.setErrorMsg(e.getMessage());
// 记录登录记录
userLoginStatus = CommonEnumUtil.USER_LOGIN_STATUS.SYSTEM_ERROR;
} catch (ImppBusiException e) {
result = ResultBean.fail(e);
// 记录登录记录
userLoginStatus = CommonEnumUtil.USER_LOGIN_STATUS.SYSTEM_ERROR;
} catch (Exception e) {
result = ResultBean.fail(e.getMessage()).setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode())
.setErrorMsg(LocaleUtils.getEnumLocaleResDesc(ImppExceptionEnum.SYSTEM_EXCEPTION, ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription()));
// 记录登录记录
userLoginStatus = CommonEnumUtil.USER_LOGIN_STATUS.SYSTEM_ERROR;
} finally {
// 记录登录记录
recordSysUserLog(null, loginName, userLoginStatus.getValue());
recordSysUserLog(null, loginModel.getLoginName(), userLoginStatus.getValue());
}
LOGGER.info("会员{}登陆登录完成 ,语言:{} , 登录耗时:{}", loginName, BaseThreadLocal.getThreadLanguageCode(), (System.currentTimeMillis() - startTime));
LOGGER.info("会员{}登陆登录完成 ,语言:{} , 登录耗时:{}", loginModel.getLoginName(), BaseThreadLocal.getThreadLanguageCode(), (System.currentTimeMillis() - startTime));
return result;
}
@ -493,30 +551,6 @@ public class WhiteController extends CoreBaseController {
Arrays.asList(CommonEnumUtil.LOG_LOGIN_PLATFORM.values()));
}
/**
*
*
* @return
*/
private CommonEnumUtil.LOG_LOGIN_PLATFORM getLoginPlatform() {
String value = CookieTool.getCookieValue(request, CommonConstWords.SESSION_LOGIN_PLATFORM);
if (StringUtils.isBlank(value)) {
value = CommonEnumUtil.LOG_LOGIN_PLATFORM.PC_IMPP_CORE.getValue() + "";
} else {
try {
Integer.parseInt(value);
} catch (Exception e) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_FORMAT.getCode())
.setErrorDetail("平台登录标识转换错误")
.setErrorSolution("请重新操作")
.build();
}
}
CommonEnumUtil.LOG_LOGIN_PLATFORM platform = CommonEnumUtil.LOG_LOGIN_PLATFORM.valueOf(Integer.parseInt(value));
return platform == null ? CommonEnumUtil.LOG_LOGIN_PLATFORM.PC_IMPP_CORE : platform;
}
@GetMapping("/sys-organize/list")
@ApiOperation(value = "获取全部组织", notes = "获取全部组织")

@ -268,7 +268,6 @@ public class SysEnumController extends CoreBaseController {
}
/**
* @return
*/
@ -293,6 +292,7 @@ public class SysEnumController extends CoreBaseController {
/**
*
*
* @return
*/
@GetMapping("/external-notice-method")
@ -305,6 +305,7 @@ public class SysEnumController extends CoreBaseController {
/**
*
*
* @return
*/
@GetMapping("/dictionary-group")

@ -9,7 +9,13 @@ import cn.estsh.i3plus.platform.plugin.elasticsearch.ElasticSearchTool;
import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.base.enumutil.ImppEnumUtil;
import cn.estsh.i3plus.pojo.platform.platbean.*;
import cn.estsh.i3plus.pojo.model.platform.LogFieldModel;
import cn.estsh.i3plus.pojo.model.platform.SysLogModel;
import cn.estsh.i3plus.pojo.platform.platbean.SysLogConsole;
import cn.estsh.i3plus.pojo.platform.platbean.SysLogException;
import cn.estsh.i3plus.pojo.platform.platbean.SysLogOperate;
import cn.estsh.i3plus.pojo.platform.platbean.SysLogSystem;
import cn.estsh.i3plus.pojo.platform.platbean.SysLogTaskTime;
import cn.estsh.impp.framework.boot.log.ImppLog;
import org.elasticsearch.search.aggregations.Aggregation;
import org.elasticsearch.search.aggregations.bucket.terms.ParsedTerms;
@ -18,7 +24,9 @@ import org.elasticsearch.search.aggregations.metrics.ParsedAvg;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.util.LinkedHashMap;
import java.util.List;
@ -40,6 +48,9 @@ public class SysLogElasticSearchService implements ISysLogService {
@Autowired
private ImppLog imppLog;
@Value(value = "${elasticsearch.host:}")
private String elasticsearchHost;
@Override
public ListPager<SysLogException> queryLogExceptionPager(SysLogException log, Pager pager) {
return ElasticSearchTool.searchPager(NoSqlPack.packEsSysLogException(log), pager, SysLogException.class);
@ -275,6 +286,32 @@ public class SysLogElasticSearchService implements ISysLogService {
return resultData;
}
@Override
public List<LogFieldModel> querySysLog(SysLogModel sysLogModel, Pager pager) {
final String time = "time";
ElasticSearchTool.init(elasticsearchHost);
ElasticSearchPack pack = new ElasticSearchPack(sysLogModel.getIndexName());
pack.andKeywordEquals("level", sysLogModel.getLevel());
if (!StringUtils.isEmpty(sysLogModel.getHostId())) {
pack.andKeywordEquals("hostId", sysLogModel.getHostId());
}
if (!StringUtils.isEmpty(sysLogModel.getIndexType())) {
pack.andKeywordEquals("indexType", sysLogModel.getIndexType());
}
if (!StringUtils.isEmpty(sysLogModel.getThread())) {
pack.andKeywordEquals("thread", sysLogModel.getThread());
}
pack.andKeywordDateTimeBetween(time,
sysLogModel.getQueryDate().trim() + " " + sysLogModel.getQueryBeginTime(),
sysLogModel.getQueryDate().trim() + " " + sysLogModel.getQueryEndTime());
pack.orderKeywordDesc(time);
ListPager<LogFieldModel> listPager = ElasticSearchTool.searchPager(pack, pager, LogFieldModel.class);
return listPager.getObjectList();
}
/******************************************************* 系统异常日志 End *********************************************************/

@ -6,7 +6,13 @@ import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.enumutil.ImppEnumUtil;
import cn.estsh.i3plus.pojo.platform.platbean.*;
import cn.estsh.i3plus.pojo.model.platform.LogFieldModel;
import cn.estsh.i3plus.pojo.model.platform.SysLogModel;
import cn.estsh.i3plus.pojo.platform.platbean.SysLogConsole;
import cn.estsh.i3plus.pojo.platform.platbean.SysLogException;
import cn.estsh.i3plus.pojo.platform.platbean.SysLogOperate;
import cn.estsh.i3plus.pojo.platform.platbean.SysLogSystem;
import cn.estsh.i3plus.pojo.platform.platbean.SysLogTaskTime;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import cn.estsh.impp.framework.boot.log.ImppLog;
import cn.estsh.impp.framework.boot.util.ImppSwitchUtil;
@ -246,6 +252,11 @@ public class SysLogFactory implements ISysLogService {
return getSysLogService().querySysLogSystemByLevel(startTime, endTime);
}
@Override
public List<LogFieldModel> querySysLog(SysLogModel logModel, Pager pager) {
return getSysLogService().querySysLog(logModel, pager);
}
/******************************************************* 系统异常日志 End *********************************************************/

@ -11,7 +11,13 @@ import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.base.common.PagerHelper;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.enumutil.ImppEnumUtil;
import cn.estsh.i3plus.pojo.platform.platbean.*;
import cn.estsh.i3plus.pojo.model.platform.LogFieldModel;
import cn.estsh.i3plus.pojo.model.platform.SysLogModel;
import cn.estsh.i3plus.pojo.platform.platbean.SysLogConsole;
import cn.estsh.i3plus.pojo.platform.platbean.SysLogException;
import cn.estsh.i3plus.pojo.platform.platbean.SysLogOperate;
import cn.estsh.i3plus.pojo.platform.platbean.SysLogSystem;
import cn.estsh.i3plus.pojo.platform.platbean.SysLogTaskTime;
import cn.estsh.i3plus.pojo.platform.platrepositorymongo.SysLogExceptionRepository;
import cn.estsh.i3plus.pojo.platform.platrepositorymongo.SysLogOperateRepository;
import cn.estsh.i3plus.pojo.platform.platrepositorymongo.SysLogSystemRepository;
@ -153,7 +159,6 @@ public class SysLogMongoService implements ISysLogService {
}
@Override
public ListPager<SysLogException> queryLogExceptionPager(SysLogException log, Pager pager) {
Bson bson = NoSqlPack.packMongoBySysLogException(log);
@ -467,6 +472,16 @@ public class SysLogMongoService implements ISysLogService {
return resultData;
}
@Override
public List<LogFieldModel> querySysLog(SysLogModel logModel, Pager pager) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode())
.setErrorCode(cn.estsh.impp.framework.boot.exception.ImppExceptionEnum.DATABASE_EXCEPTION.getCode())
.setErrorDetail("querySysLog 为elasticsearch使用方法")
.setErrorSolution("请联系管理人员")
.build();
}
/******************************************************* 系统异常日志 End *********************************************************/

@ -4,7 +4,8 @@ import cn.estsh.i3plus.core.api.iservice.base.ISystemLoginService;
import cn.estsh.i3plus.core.api.iservice.busi.ISysUserPasswordService;
import cn.estsh.i3plus.core.apiservice.util.SysUserPasswordUtil;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.platform.common.tool.EncryptTool;
import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum;
import cn.estsh.i3plus.platform.common.tool.CookieTool;
import cn.estsh.i3plus.platform.common.util.CommonConstWords;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.shirotoken.AdminToken;
@ -16,13 +17,11 @@ import cn.estsh.i3plus.pojo.platform.bean.SysUserPassword;
import cn.estsh.i3plus.pojo.platform.repository.SysUserRepository;
import cn.estsh.impp.framework.boot.auth.AuthUtil;
import cn.estsh.impp.framework.boot.exception.ImppBusiException;
import cn.estsh.impp.framework.boot.util.ImppLdapUtils;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import cn.estsh.impp.framework.boot.util.ImppRedis;
import cn.estsh.impp.framework.boot.util.ImppSwitchUtil;
import cn.estsh.impp.framework.boot.util.ValidatorBean;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils;
import org.apache.shiro.authc.CredentialsException;
import org.apache.shiro.authc.IncorrectCredentialsException;
import org.apache.shiro.authc.LockedAccountException;
@ -33,8 +32,7 @@ import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.io.UnsupportedEncodingException;
import java.security.NoSuchAlgorithmException;
import javax.servlet.http.HttpServletRequest;
import java.util.Objects;
/**
@ -74,6 +72,10 @@ public class SystemLoginService implements ISystemLoginService {
return AuthUtil.login(ut);
}
public static void main(String[] args) {
System.out.println(1+2+"a");
}
@Override
@ApiOperation(value = "用户登录", notes = "管理用户登录")
public SessionUser queryAdminLogin(String loginName, String loginPwd, String languageCode) {
@ -110,6 +112,32 @@ public class SystemLoginService implements ISystemLoginService {
}
@Override
@ApiOperation(value = "封装用户", notes = "封装普通用户信息")
public SessionUser queryCheckE9UserLogin(UserToken userToken) {
//验证用户
SysUser user = getUserLoginInfo(userToken.getLoginName());
LOGGER.info("【验证用户checkUserLogin】{}", user);
//用户单地登录
return packSessionUser(user, CommonEnumUtil.USER_TYPE.USER.getCode(), userToken.getLanguageCode());
}
@Override
@ApiOperation(value = "封装用户", notes = "封装管理员信息")
public SessionUser queryCheckE9AdminLogin(AdminToken adminToken) {
//验证用户
SysUser user = getUserLoginInfo(adminToken.getLoginName());
//未抛异常,封装用户
return packSessionUser(user, CommonEnumUtil.USER_TYPE.ADMIN.getCode(), adminToken.getLanguageCode());
}
@Override
@ApiOperation(value = "封装用户", notes = "封装超级管理员信息")
public SessionUser queryCheckE9SaAdminLogin(SaAdminToken saAdminToken) {
SysUser user = getUserLoginInfo(saAdminToken.getLoginName());
return packSessionUser(user, CommonEnumUtil.USER_TYPE.SA.getCode(), saAdminToken.getLanguageCode());
}
@Override
@ApiOperation(value = "登录密码错误", notes = "登录密码错误记录错误次数功能")
public Integer doLoginPasswordError(String loginName, String sessionId) {
SysUser user = sysUserRDao.getByProperty(new String[]{"userLoginName", "isValid"},
@ -132,23 +160,41 @@ public class SystemLoginService implements ISystemLoginService {
}
/**
*
*
* @return
*/
@Override
public CommonEnumUtil.LOG_LOGIN_PLATFORM getLoginPlatform(HttpServletRequest request) {
String value = CookieTool.getCookieValue(request, CommonConstWords.SESSION_LOGIN_PLATFORM);
if (StringUtils.isBlank(value)) {
value = CommonEnumUtil.LOG_LOGIN_PLATFORM.PC_IMPP_CORE.getValue() + "";
} else {
try {
Integer.parseInt(value);
} catch (Exception e) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_FORMAT.getCode())
.setErrorDetail("平台登录标识转换错误")
.setErrorSolution("请重新操作")
.build();
}
}
CommonEnumUtil.LOG_LOGIN_PLATFORM platform = CommonEnumUtil.LOG_LOGIN_PLATFORM.valueOf(Integer.parseInt(value));
return platform == null ? CommonEnumUtil.LOG_LOGIN_PLATFORM.PC_IMPP_CORE : platform;
}
/**
*
*
* @param loginName
* @param pwd
* @return
*/
public SysUser getUserLoginInfo(String loginName, String pwd) {
SysUser user = sysUserRDao.getByProperty(
new String[]{"userLoginName","isValid"},
new Object[]{loginName,CommonEnumUtil.IS_VAILD.VAILD.getValue()});
if(user == null){ //用户不存在
throw new CredentialsException("用户不存在");
}
if(user.getUserStatus() != CommonEnumUtil.USER_STATUS.ENABLE.getValue()){
throw new LockedAccountException("账号已被锁定");
}
SysUser user = getValidUserByName(loginName);
// 登录AD 域检查
if (ImppSwitchUtil.isLoginActiveDirectory()) {
@ -192,8 +238,37 @@ public class SystemLoginService implements ISystemLoginService {
throw new IncorrectCredentialsException("登陆密码错误");
}
public SysUser getUserLoginInfo(String loginName) {
SysUser user = getValidUserByName(loginName);
// 登录AD 域检查
if (ImppSwitchUtil.isLoginActiveDirectory()) {
userPasswordUtil.checkActiveDirectory(user);
return user;
}
userPasswordUtil.checkSysUserLogin(user);
return user;
}
public SysUser getValidUserByName(String loginName) {
SysUser user = sysUserRDao.getByProperty(
new String[]{"userLoginName", "isValid"},
new Object[]{loginName, CommonEnumUtil.IS_VAILD.VAILD.getValue()});
if (user == null) {
throw new CredentialsException("用户不存在");
}
if (user.getUserStatus() != CommonEnumUtil.USER_STATUS.ENABLE.getValue()) {
throw new LockedAccountException("账号已被锁定");
}
return user;
}
/**
*
*
* @param user
* @param userType
* @param languageCode

@ -0,0 +1,87 @@
package cn.estsh.i3plus.core.apiservice.serviceimpl.base.login.strategy;
import cn.estsh.i3plus.core.api.iservice.base.ISystemLoginService;
import cn.estsh.i3plus.core.api.iservice.base.ISystemLoginStrategyService;
import cn.estsh.i3plus.core.api.iservice.busi.ILicenseClickService;
import cn.estsh.i3plus.core.api.iservice.busi.ISysUserService;
import cn.estsh.i3plus.platform.common.util.CommonConstWords;
import cn.estsh.i3plus.pojo.base.bean.BaseThreadLocal;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.model.platform.SysLoginModel;
import cn.estsh.i3plus.pojo.platform.bean.SessionUser;
import cn.estsh.impp.framework.boot.auth.AuthUtil;
import cn.estsh.impp.framework.boot.util.ImppRedis;
import cn.estsh.impp.framework.boot.util.RedisCacheTool;
import cn.estsh.impp.framework.boot.util.ResultBean;
import cn.estsh.impp.framework.boot.util.ValidatorBean;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.function.BiFunction;
import static cn.estsh.i3plus.platform.common.util.CommonConstWords.DEFAULT_LANGUAGE;
/**
* @author Wynne.Lu
* @date 2021/1/18 4:39
* @desc
*/
@Slf4j
@Service
public class DefaultLoginStrategy implements ISystemLoginStrategyService {
@Resource(name = "redisCore")
protected ImppRedis redisCore;
@Autowired
private ILicenseClickService licenseClickService;
@Autowired
private ISysUserService userService;
@Autowired
private ISystemLoginService loginService;
@Override
public BiFunction<HttpServletRequest, SysLoginModel, ResultBean> login() {
return (request, loginModel) -> {
ResultBean result;
ValidatorBean.checkNotNull(loginModel.getLanguageCode(), "语言不能为空");
// TODO 后期移除,暂时用于避免自动登录后前台没有正确的传输组织代码信息
if ("null".equals(loginModel.getLanguageCode())) {
loginModel.setLanguageCode(DEFAULT_LANGUAGE);
}
// 设置语言代码
BaseThreadLocal.setData(BaseThreadLocal.LANGUAGE_CODE, loginModel.getLanguageCode());
ValidatorBean.checkNotNull(loginModel.getLoginName(), "用户名不能为空");
ValidatorBean.checkNotNull(loginModel.getLoginPwd(), "密码不能为空");
int sessionMode = RedisCacheTool.getSysConfigIntVal(CommonConstWords.CONFIG_SESSION_MODE, CommonConstWords.CONFIG_SESSION_MODE_DEFAULT);
if (sessionMode != CommonEnumUtil.SESSION_MODE.SEIZE.getValue()) {
AuthUtil.logout();
}
SessionUser user = userService.loginUser(
loginModel.getLoginName().trim(),
loginModel.getLoginPwd().trim(),
loginModel.getLanguageCode(),
loginService.getLoginPlatform(request).getValue(),
loginModel.getDeviceId()
);
String redisKey = CommonConstWords.USER_LOGIN_ERROR + "_" + user.getUser().getId();
redisCore.deleteKey(redisKey);
result = new ResultBean(true, AuthUtil.getSession().getId().toString(), AuthUtil.getSessionUser());
result.setUrl("/");
AuthUtil.setOrganize(user.getUser().getOrganize());
return result;
};
}
}

@ -0,0 +1,104 @@
package cn.estsh.i3plus.core.apiservice.serviceimpl.base.login.strategy;
import cn.estsh.i3plus.core.api.iservice.base.ISystemLoginService;
import cn.estsh.i3plus.core.api.iservice.base.ISystemLoginStrategyService;
import cn.estsh.i3plus.core.api.iservice.busi.ILicenseClickService;
import cn.estsh.i3plus.core.api.iservice.busi.ISysUserService;
import cn.estsh.i3plus.platform.common.tool.ServletRequestTool;
import cn.estsh.i3plus.platform.common.util.CommonConstWords;
import cn.estsh.i3plus.platform.common.util.PlatformConstWords;
import cn.estsh.i3plus.pojo.base.bean.BaseThreadLocal;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.enumutil.ImppEnumUtil;
import cn.estsh.i3plus.pojo.model.platform.SysLoginModel;
import cn.estsh.i3plus.pojo.platform.bean.SessionUser;
import cn.estsh.impp.framework.boot.auth.AuthUtil;
import cn.estsh.impp.framework.boot.util.ImppRedis;
import cn.estsh.impp.framework.boot.util.RedisCacheTool;
import cn.estsh.impp.framework.boot.util.ResultBean;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.Arrays;
import java.util.function.BiFunction;
import static cn.estsh.i3plus.platform.common.util.CommonConstWords.DEFAULT_LANGUAGE;
/**
* @author Wynne.Lu
* @date 2021/1/18 10:53
* @desc
*/
@Lazy
@Slf4j
@Service
public class E9LoginStrategy implements ISystemLoginStrategyService {
@Resource(name = "redisCore")
protected ImppRedis redisCore;
@Autowired
private ILicenseClickService licenseClickService;
@Autowired
private ISysUserService userService;
@Autowired
private ISystemLoginService loginService;
@Override
public BiFunction<HttpServletRequest, SysLoginModel, ResultBean> login() {
return (request, loginModel) -> {
boolean isRequestFromSpecificIp = validateHost(request);
if (!isRequestFromSpecificIp) {
return ResultBean.fail("单点登录请求未从指定授权服务器发送,校验失败。");
}
licenseClickService.checkLicenseNumberLogin();
// TODO 后期移除,暂时用于避免自动登录后前台没有正确的传输组织代码信息
if ("null".equals(loginModel.getLanguageCode())|| StringUtils.isEmpty(loginModel.getLanguageCode())) {
loginModel.setLanguageCode(DEFAULT_LANGUAGE);
}
// 设置语言代码
BaseThreadLocal.setData(BaseThreadLocal.LANGUAGE_CODE, loginModel.getLanguageCode());
BaseThreadLocal.setData(PlatformConstWords.AUTH_LOGIN_STRATEGY, ImppEnumUtil.AUTH_LOGIN_STRATEGY.E9.getCode());
int sessionMode = RedisCacheTool.getSysConfigIntVal(CommonConstWords.CONFIG_SESSION_MODE, CommonConstWords.CONFIG_SESSION_MODE_DEFAULT);
if (sessionMode != CommonEnumUtil.SESSION_MODE.SEIZE.getValue()) {
AuthUtil.logout();
}
SessionUser user = userService.loginUser(
loginModel.getLoginName().trim(),
loginModel.getLoginName().trim(),
loginModel.getLanguageCode(),
loginService.getLoginPlatform(request).getValue(),
loginModel.getDeviceId()
);
String redisKey = CommonConstWords.USER_LOGIN_ERROR + "_" + user.getUser().getId();
redisCore.deleteKey(redisKey);
ResultBean result = new ResultBean(true, AuthUtil.getSession().getId().toString(), AuthUtil.getSessionUser());
result.setUrl("/");
AuthUtil.setOrganize(user.getUser().getOrganize());
return result;
};
}
private boolean validateHost(HttpServletRequest request) {
final String delimiter = ",";
String hostsConfig = RedisCacheTool.getSysConfigStrVal(PlatformConstWords.SSO_REQUEST_HOST);
String[] hosts = hostsConfig.split(delimiter);
String requestHost = ServletRequestTool.getRequestHost(request);
return Arrays.stream(hosts).anyMatch(d -> requestHost.equals(d));
}
}

@ -65,15 +65,6 @@ public class SysUserService implements ISysUserService {
private SysUserInfoRepository sysUserInfoRDao;
@Autowired
private IUserPermissionDao userPermissionDao;
// @Autowired
// private SysOrganizeRepository organizeRDao;
//
// @Autowired
// private SysRoleRepository sysRoleRDao;
@Autowired
private SysRefUserRoleRepository refUserRoleRDao;
@Autowired
@ -83,15 +74,6 @@ public class SysUserService implements ISysUserService {
private SysRefUserPositionRepository refUserPositionRDao;
@Autowired
private SysFileRepository sysFileRDao;
//
// @Autowired
// private SysDepartmentRepository departmentRDao;
//
// @Autowired
// private SysPositionRepository sysPositionRDao;
@Autowired
private ISysUserInfoService sysUserInfoService;
@Autowired
@ -119,18 +101,13 @@ public class SysUserService implements ISysUserService {
private ISysMenuService menuService;
@Autowired
private ICoreMemTreeService memTreeService;
@Autowired
private ISysFileService fileService;
@Autowired
private SysUserPasswordUtil passwordUtil;
@Autowired ISysUserPasswordService userPasswordService;
@Resource(name = CommonConstWords.IMPP_REDIS_RES)
private ImppRedis redisRes;
@Autowired
ISysUserPasswordService userPasswordService;
/**
*
@ -141,7 +118,7 @@ public class SysUserService implements ISysUserService {
@Override
@ApiOperation(value = "用户登录", notes = "用户登录功能实现")
@Transactional(propagation = Propagation.REQUIRED)
public SessionUser queryUserLogin(String loginName, String password, String languageCode,Integer loginPlatform,String deviceId) throws AuthenticationException {
public SessionUser loginUser(String loginName, String password, String languageCode, Integer loginPlatform, String deviceId) throws AuthenticationException {
LOGGER.debug("平台用户 SYS_USER loginName:{} \t password:{} \t languageCode:{}", loginName, password, languageCode);
BaseToken token = getToken(loginName, password, languageCode, loginPlatform);
@ -741,6 +718,7 @@ public class SysUserService implements ISysUserService {
* +
*
*
*
* @param user
*/
public void packSysUserSort(SysUser user) {
@ -770,6 +748,7 @@ public class SysUserService implements ISysUserService {
*
*
*
*
* @param info
*/
public void packSysUserInfoSort(SysUserInfo info) {
@ -788,6 +767,7 @@ public class SysUserService implements ISysUserService {
/**
*
*
* @param user
* @return
*/
@ -805,6 +785,7 @@ public class SysUserService implements ISysUserService {
/**
*
*
* @param user
* @return
*/
@ -872,6 +853,7 @@ public class SysUserService implements ISysUserService {
/**
*
*
* @param userInfo
* @return
*/
@ -891,6 +873,7 @@ public class SysUserService implements ISysUserService {
/**
*
*
* @param user
* @return
*/
@ -908,6 +891,7 @@ public class SysUserService implements ISysUserService {
/**
*
*
* @param userInfo
* @return
*/
@ -932,6 +916,7 @@ public class SysUserService implements ISysUserService {
/**
*
*
* @param userInfo
* @return
*/
@ -939,7 +924,8 @@ public class SysUserService implements ISysUserService {
try {
LOGGER.debug("平台用户 SYS_USER user id :{}", userInfo.getId());
userInfo.setOrganize(organizeService.get(userInfo.getOrganizeId()));
userInfo.setOrganizeList(personnelService.findSysUserInfoOrganize(userInfo.getId()));;
userInfo.setOrganizeList(personnelService.findSysUserInfoOrganize(userInfo.getId()));
;
} catch (Exception e) {
LOGGER.error(" SysUser Peck Organize information Error userId : {} Exception Message : {} ", userInfo.getId(), e.getMessage());
}
@ -947,6 +933,7 @@ public class SysUserService implements ISysUserService {
/**
*
*
* @param userInfo
* @return
*/
@ -966,6 +953,7 @@ public class SysUserService implements ISysUserService {
/**
*
*
* @param user
* @return
*/
@ -973,7 +961,8 @@ public class SysUserService implements ISysUserService {
try {
LOGGER.debug("平台用户 SYS_USER user id :{}", user.getId());
user.setOrganize(organizeService.get(user.getOrganizeId()));
user.setOrganizeList(personnelService.findSysUserOrganize(user.getId()));;
user.setOrganizeList(personnelService.findSysUserOrganize(user.getId()));
;
} catch (Exception e) {
LOGGER.error(" SysUser Peck Organize information Error userId : {} Exception Message : {} ", user.getId(), e.getMessage());
}
@ -981,6 +970,7 @@ public class SysUserService implements ISysUserService {
/**
* Root Id
*
* @param menus
* @return
*/

@ -25,6 +25,8 @@ impp.config.fileserver=fastdfs
impp.log.detail.controller=true
#\u662F\u5426\u5BF9\u8C03\u7528\u670D\u52A1\u8FDB\u884C\u8BE6\u7EC6\u65E5\u5FD7\u5206\u6790
impp.log.detail.service=true
# elasticsearch\u641C\u7D22\u670D\u52A1
impp.config.elasticsearch=true
#\u662F\u5426\u5F00\u542F\u5FAE\u670D
eureka.client.enabled=true
#\u6253\u5F00feign\u7684\u7194\u65AD

@ -7,7 +7,7 @@
<Property name="log4j2.level" value="INFO"/>
<!-- 日志输出格式 -->
<Property name="info_pattern">[%p] %d{yyyy-MM-dd HH:mm:ss-SSS} %c(%M:%L) 信息:%m%n</Property>
<Property name="info_pattern">%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %p %c(%M:%L) - %m%n</Property>
</Properties>
<appenders>

@ -9,8 +9,8 @@
<Property name="logFileRootPath" value="../logs"/>
<!-- 日志输出格式 -->
<Property name="info_pattern">[%p] %d{yyyy-MM-dd HH:mm:ss-SSS} %c(%M:%L) 信息:%m%n</Property>
<Property name="file_pattern">[%p] %d{yyyy-MM-dd HH:mm:ss-SSS} %-5level %class{36} %L %M - %msg%xEx%n</Property>
<Property name="info_pattern">%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %p %c(%M:%L) - %m%n</Property>
<Property name="file_pattern">%d{yyyy-MM-dd HH:mm:s.SSS} %p %-5level %class{36} %L %M - %msg%xEx%n</Property>
</Properties>
<appenders>

@ -22,7 +22,7 @@
<properties>
<!--项目坝称坂照CommonEnumUtil.SOFT_TYPE-->
<project.name>i3core</project.name>
<project.name>i3core-W</project.name>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
@ -199,6 +199,13 @@
<version>12.2.0.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
<version>2.4.2</version>
</dependency>
<!-- sqlserver -->
<dependency>
<groupId>com.microsoft.sqlserver</groupId>

Loading…
Cancel
Save