server/src/main/java/doumeemes/api/system/SystemController.java
@@ -8,9 +8,12 @@ import doumeemes.core.model.LoginUserInfo; import doumeemes.core.utils.Constants; import doumeemes.dao.business.dto.CompanyInitDataDTO; import doumeemes.dao.ext.dto.WxLoginDTO; import doumeemes.dao.ext.vo.WxLoginVO; import doumeemes.dao.system.dto.LoginDTO; import doumeemes.dao.system.dto.UpdatePwdDto; import doumeemes.service.system.SystemLoginService; import doumeemes.service.system.WxLoginService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; @@ -46,22 +49,38 @@ @Autowired private SystemLoginService systemLoginService; @Autowired private WxLoginService wxLoginService; @PreventRepeat(limit = 10, lockTime = 10000) @ApiOperation("ç»å½") @PostMapping("/login") public ApiResponse<String> login (@Validated @RequestBody LoginDTO dto, HttpServletRequest request) { // dto.setCompanyId(Constants.de); return ApiResponse.success(systemLoginService.loginByPassword(dto, request)); } @PreventRepeat(limit = 10, lockTime = 10000) @ApiOperation("å¹³å°ç»å½") @PostMapping("/platform/login") public ApiResponse<String> platformLogin (@Validated @RequestBody LoginDTO dto, HttpServletRequest request) { // dto.setCompanyId(Constants.de); return ApiResponse.success(systemLoginService.platformLogin(dto, request)); } @PreventRepeat(limit = 10, lockTime = 10000) @ApiOperation("微信ç»å½") @GetMapping("/wxLogin") public ApiResponse<WxLoginVO> wxLogin (@RequestParam String code, HttpServletRequest request) { return ApiResponse.success(wxLoginService.wxLogin(code, request)); } @PreventRepeat(limit = 10, lockTime = 10000) @ApiOperation("微信ç»å½è´¦å·å¯ç ") @PostMapping("/wxAccountLogin") public ApiResponse<String> wxAccountLogin (@Validated @RequestBody WxLoginDTO dto, HttpServletRequest request) { return ApiResponse.success(wxLoginService.wxLoginByPassword(dto, request)); } @ApiOperation("éåºç»å½") @PostMapping("/logout") public ApiResponse logout () { server/src/main/java/doumeemes/config/shiro/ShiroConfig.java
@@ -71,6 +71,8 @@ Map<String, String> map = new LinkedHashMap<>(); // è·¯å¾æ¦æªé ç½® map.put("/system/login", "anon"); map.put("/system/wxLogin", "anon"); map.put("/system/wxAccountLogin", "anon"); map.put("/system/initCompany", "anon"); map.put("/system/logout", "anon"); map.put("/common/captcha", "anon"); server/src/main/java/doumeemes/config/shiro/ShiroCredentialsMatcher.java
@@ -35,6 +35,9 @@ if(usernamePasswordToken.getDdLogin()){ return Boolean.TRUE; } if(usernamePasswordToken.getWxLogin()){ return Boolean.TRUE; } // å å¯å¯ç String pwd = Utils.Secure.encryptPassword(new String(usernamePasswordToken.getPassword()), systemUser.getSalt()); // æ¯è¾å¯ç server/src/main/java/doumeemes/config/shiro/ShiroToken.java
@@ -36,13 +36,15 @@ */ Integer companyId; Boolean isDdLogin; Boolean isWxLogin; public ShiroToken() { } public ShiroToken(Integer companyId,String username, String password,boolean isDdLogin) { public ShiroToken(Integer companyId,String username, String password,boolean isDdLogin,boolean isWxLogin) { super(username, password, false, (String)null); this.companyId = companyId; this.isDdLogin = isDdLogin; this.isWxLogin = isWxLogin; } public Boolean getDdLogin() { @@ -53,6 +55,15 @@ isDdLogin = ddLogin; } public Boolean getWxLogin() { return isWxLogin; } public void setWxLogin(Boolean wxLogin) { isWxLogin = wxLogin; } public Integer getCompanyId() { return companyId; } server/src/main/java/doumeemes/core/utils/Constants.java
@@ -27,6 +27,11 @@ public static final String ACCESS_ID="ACCESS_ID"; public static final String BUCKETNAME = "BUCKETNAME"; public static final String OSS = "OSS"; public static final String WX_CONFIG = "WX_CONFIG"; public static final String APPID = "APPID"; public static final String APPSECRET = "APPSECRET"; public static final String WX_TOKEN = "WX_TOKEN"; public static final String ACCESS_KEY = "ACCESS_KEY"; public static final String ENDPOINT = "ENDPOINT"; public static final String RESOURCE_PATH = "RESOURCE_PATH"; server/src/main/java/doumeemes/core/utils/HttpsUtil.java
@@ -15,7 +15,12 @@ import org.apache.http.util.EntityUtils; import org.springframework.web.util.UriComponentsBuilder; import javax.net.ssl.*; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.URL; import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; @@ -24,6 +29,10 @@ import java.util.Map; public class HttpsUtil { public static String get(String url,boolean ignoreSSL) { return connection(url, "GET", null, null,ignoreSSL); } public static String sendPostByHttps(String url, Map<String, String> body, String token) { @@ -126,6 +135,64 @@ return null; } public static String connection(String url,String method,String data,String contentType,boolean ignoreSSL){ HttpsURLConnection connection = null; try { URL _url = new URL(url); connection = (HttpsURLConnection) _url.openConnection(); connection.setRequestMethod(method); connection.setDoOutput(true); connection.setDoInput(true); connection.setUseCaches(false); if(contentType != null){ connection.setRequestProperty("Content-Type", contentType); } if(ignoreSSL){ //ä¿¡ä»»ææsslè¯ä¹¦åä¸»æº TrustManager[] trustManagers = {new HttpsTrustManager()}; SSLContext context = SSLContext.getInstance("TLS"); context.init(null, trustManagers, new SecureRandom()); connection.setSSLSocketFactory(context.getSocketFactory()); connection.setHostnameVerifier(new HostnameVerifier() { @Override public boolean verify(String hostname, SSLSession session) { return true; } }); } connection.connect(); if(data != null){ OutputStream outputStream = connection.getOutputStream(); outputStream.write(data.getBytes("utf-8")); outputStream.close(); } int responseCode = connection.getResponseCode(); if (responseCode == HttpsURLConnection.HTTP_OK) { InputStream is = connection.getInputStream(); byte[] b = new byte[4096]; ByteArrayOutputStream baos = new ByteArrayOutputStream(b.length); int len; while ((len = is.read(b)) != -1) { baos.write(b, 0, len); } is.close(); return baos.toString("utf-8"); } return connection.getResponseMessage(); } catch (Exception e) { e.printStackTrace(); } finally { if(connection != null){ connection.disconnect(); } } return null; } public static void main(String[] args) { @@ -136,5 +203,43 @@ } } class HttpsTrustManager implements X509TrustManager { private static TrustManager[] trustManagers = {new HttpsTrustManager()}; @Override public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException { // TODO Auto-generated method stub } @Override public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException { // TODO Auto-generated method stub } @Override public X509Certificate[] getAcceptedIssuers() { // TODO Auto-generated method stub return null; } public static void allowAllSSL() { try { SSLContext context = SSLContext.getInstance("TLS"); context.init(null, trustManagers, new SecureRandom()); HttpsURLConnection.setDefaultSSLSocketFactory(context.getSocketFactory()); HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() { @Override public boolean verify(String hostname, SSLSession session) { return true; } }); } catch (NoSuchAlgorithmException | KeyManagementException e) { e.printStackTrace(); } } } server/src/main/java/doumeemes/dao/business/model/CompanyUser.java
@@ -148,4 +148,10 @@ @ExcelColumn(name="æ¯å¦æ¯ä¸»è´¦æ·ï¼0=å¦ï¼1=æ¯ï¼") private Integer isMaster; @ApiModelProperty(value = "微信openid") private String openid; @ApiModelProperty(value = "微信unionid") private String unionid; } server/src/main/java/doumeemes/dao/ext/dto/WxLoginDTO.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,35 @@ package doumeemes.dao.ext.dto; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotEmpty; /** * Created by IntelliJ IDEA. * * @Author : Rk * @create 2023/8/11 10:10 */ @Data public class WxLoginDTO { @ApiModelProperty(value = "ä¼ä¸ç¼ç ") private Integer companyId; @NotBlank(message = "ç¨æ·åä¸è½ä¸ºç©º") @ApiModelProperty(value = "ç¨æ·å") private String username; @NotBlank(message = "å¯ç ä¸è½ä¸ºç©º") @ApiModelProperty(value = "å¯ç ") private String password; @ApiModelProperty(value = "微信 openid") private String openid; @ApiModelProperty(value = "微信 unionid") private String unionid; } server/src/main/java/doumeemes/dao/ext/vo/WxLoginVO.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,27 @@ package doumeemes.dao.ext.vo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** * Created by IntelliJ IDEA. * * @Author : Rk * @create 2023/8/11 11:22 */ @Data public class WxLoginVO { @ApiModelProperty(value = "ç»å½ç¶æï¼0=微信ç»å½æåï¼1=微信ç»å½å¤±è´¥") private Integer loginStatus; @ApiModelProperty(value = "微信 openid") private String openid ; @ApiModelProperty(value = "微信 unionid") private String unionid ; @ApiModelProperty(value = "session") private String session ; } server/src/main/java/doumeemes/service/business/impl/WorkorderCheckServiceImpl.java
@@ -401,7 +401,7 @@ //å·¥å对象 Workorder workorder=workorderExtMapper.selectById(wc.getWorkorderId()); if(workorder==null || workorder.getStatus()==Constants.WORKORDER_STATUS.done||workorder.getStatus()==Constants.WORKORDER_STATUS.baogong if(workorder==null || workorder.getStatus()==Constants.WORKORDER_STATUS.done || workorder.getStatus()==Constants.WORKORDER_STATUS.done||workorder.getStatus()==Constants.WORKORDER_STATUS.baogong ||workorder.getStatus()==Constants.WORKORDER_STATUS.instock ||workorder.getStatus()==Constants.WORKORDER_STATUS.cancel){ return ApiResponse.failed("å·¥åä¸å 许æ£éª"); } server/src/main/java/doumeemes/service/ext/impl/WorkorderRecordStandardServiceImpl.java
@@ -389,9 +389,6 @@ dealAppliancePro(mp,user,allRecordList,updateApplianceList,updateApplianceProList, outboundDetailList,stockList); } if(1==1){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"123"); } //å¦æææ²¡bomé ç½®,æ£æ¥äº§åºï¼å 嫿£éªçä¸è¯åæ¥åºåï¼åæææ°éæ¯å¦ç¸çå¹é ï¼ä¸ä¸è´æç¤ºé误 if(bdparam==null){ @@ -512,6 +509,7 @@ //妿éè¦ææçç©æéåï¼å¨åºåä¸å¯»æ¾æææ¥æº for(WStock model : materialList){ for(WStock ts : allList){ if(Constants.equalsInteger(model.getMaterialId(),ts.getMaterialId())){ //è¿éè¦æææ°é BigDecimal actNum = Constants.formatBigdecimal(model.getNum()).subtract(Constants.formatBigdecimal(model.getTNum())); @@ -527,6 +525,10 @@ //å¦æå·²ç»æ»¡è¶³å©ä½éæ±é isfull =true; } //æ·»å ææè®°å½ workorderRecordExtMapper.insert(getWorkrecordModel(user,ts,mp,actNum)); //æ´æ°å·²ç»æææ°é model.setTNum(Constants.formatBigdecimal(model.getTNum()).add(actNum)); WOutbound outbound = getFromOutboundList(ts.getWarehouseId(),outboundList); server/src/main/java/doumeemes/service/system/SystemLoginService.java
@@ -18,6 +18,7 @@ * @date 2022/04/18 18:12 */ String loginByPassword (LoginDTO dto, HttpServletRequest request); String platformLogin(LoginDTO dto, HttpServletRequest request); String loginByDingdingCode(Integer companyId ,String code, HttpServletRequest request); String loginAutoBylingyangToken( String token, HttpServletRequest request,boolean isDemo); server/src/main/java/doumeemes/service/system/WxLoginService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,21 @@ package doumeemes.service.system; import doumeemes.dao.ext.dto.WxLoginDTO; import doumeemes.dao.ext.vo.WxLoginVO; import doumeemes.dao.system.dto.LoginDTO; import javax.servlet.http.HttpServletRequest; /** * Created by IntelliJ IDEA. * * @Author : Rk * @create 2023/8/11 10:13 */ public interface WxLoginService { WxLoginVO wxLogin(String code, HttpServletRequest request); String wxLoginByPassword (WxLoginDTO dto, HttpServletRequest request); } server/src/main/java/doumeemes/service/system/impl/SystemLoginServiceImpl.java
@@ -2,6 +2,7 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.iflytek.antelope.other.client.dto.resp.UserDTO; import doumeemes.biz.system.SystemDictDataBiz; import doumeemes.config.shiro.ShiroToken; @@ -93,9 +94,10 @@ throw e; } } // æ ¡éªç¨æ·ååå¯ç Subject subject = SecurityUtils.getSubject(); ShiroToken token = new ShiroToken(dto.getCompanyId(),dto.getUsername(), dto.getPassword(),false); ShiroToken token = new ShiroToken(dto.getCompanyId(),dto.getUsername(), dto.getPassword(),false,false); try { subject.login(token); LoginUserInfo loginUser = ((LoginUserInfo)subject.getPrincipal()); @@ -149,7 +151,7 @@ } // æ ¡éªç¨æ·ååå¯ç Subject subject = SecurityUtils.getSubject(); ShiroToken token = new ShiroToken(dto.getCompanyId(),dto.getUsername(), dto.getPassword(),false); ShiroToken token = new ShiroToken(dto.getCompanyId(),dto.getUsername(), dto.getPassword(),false,false); try { subject.login(token); LoginUserInfo loginUser = ((LoginUserInfo)subject.getPrincipal()); @@ -229,7 +231,7 @@ // æ ¡éªç¨æ·ååå¯ç Subject subject = SecurityUtils.getSubject(); // ééç»å½ ShiroToken token = new ShiroToken(companyId,mobile, null,true); ShiroToken token = new ShiroToken(companyId,mobile, null,true,false); subject.login(token); LoginUserInfo loginUser =(LoginUserInfo)subject.getPrincipal(); @@ -295,7 +297,7 @@ // æ ¡éªç¨æ·ååå¯ç Subject subject = SecurityUtils.getSubject(); // ééç»å½ ShiroToken atoken = new ShiroToken(companyId,mobile, null,true); ShiroToken atoken = new ShiroToken(companyId,mobile, null,true,false); subject.login(atoken); LoginUserInfo loginUser =(LoginUserInfo)subject.getPrincipal(); loginUser.getCompanyUser().setName(user.getName()); @@ -366,7 +368,7 @@ // æ ¡éªç¨æ·ååå¯ç Subject subject = SecurityUtils.getSubject(); // ééç»å½ ShiroToken atoken = new ShiroToken(companyId,mobile, null,true); ShiroToken atoken = new ShiroToken(companyId,mobile, null,true,false); subject.login(atoken); LoginUserInfo loginUser =(LoginUserInfo)subject.getPrincipal(); loginLog.setUserId(loginUser.getId()); @@ -451,7 +453,7 @@ // æ ¡éªç¨æ·ååå¯ç Subject subject = SecurityUtils.getSubject(); // ééç»å½ ShiroToken atoken = new ShiroToken(com.getId(),mobile, null,true); ShiroToken atoken = new ShiroToken(com.getId(),mobile, null,true,false); subject.login(atoken); LoginUserInfo loginUser =(LoginUserInfo)subject.getPrincipal(); loginUser.getCompanyUser().setName(user.getName()); @@ -522,7 +524,7 @@ // æ ¡éªç¨æ·ååå¯ç Subject subject = SecurityUtils.getSubject(); // ééç»å½ ShiroToken atoken = new ShiroToken(com.getId(),mobile, null,true); ShiroToken atoken = new ShiroToken(com.getId(),mobile, null,true,false); subject.login(atoken); LoginUserInfo loginUser =(LoginUserInfo)subject.getPrincipal(); loginUser.getCompanyUser().setName(user.getName()); @@ -554,4 +556,7 @@ } } } server/src/main/java/doumeemes/service/system/impl/WxLoginServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,215 @@ package doumeemes.service.system.impl; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import doumeemes.biz.system.SystemDictDataBiz; import doumeemes.config.shiro.ShiroToken; import doumeemes.core.constants.ResponseStatus; import doumeemes.core.exception.BusinessException; import doumeemes.core.model.LoginUserInfo; import doumeemes.core.utils.Constants; import doumeemes.core.utils.HttpsUtil; import doumeemes.core.utils.Utils; import doumeemes.dao.business.model.CompanyUser; import doumeemes.dao.business.model.Department; import doumeemes.dao.ext.CompanyExtMapper; import doumeemes.dao.ext.CompanyUserExtMapper; import doumeemes.dao.ext.DepartmentExtMapper; import doumeemes.dao.ext.dto.QueryCompanyUserExtDTO; import doumeemes.dao.ext.dto.WxLoginDTO; import doumeemes.dao.ext.vo.CompanyUserExtListVO; import doumeemes.dao.ext.vo.WxLoginVO; import doumeemes.dao.system.SystemUserMapper; import doumeemes.dao.system.dto.LoginDTO; import doumeemes.dao.system.model.SystemLoginLog; import doumeemes.dao.system.model.SystemUser; import doumeemes.service.common.CaptchaService; import doumeemes.service.ext.CompanyExtService; import doumeemes.service.ext.CompanyUserExtService; import doumeemes.service.system.SystemLoginLogService; import doumeemes.service.system.WxLoginService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.shiro.SecurityUtils; import org.apache.shiro.authc.AuthenticationException; import org.apache.shiro.subject.Subject; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import javax.servlet.http.HttpServletRequest; import java.util.Date; import java.util.Objects; /** * Created by IntelliJ IDEA. * * @Author : Rk * @create 2023/8/11 10:14 */ @Slf4j @Service public class WxLoginServiceImpl implements WxLoginService { @Autowired private SystemDictDataBiz systemDictDataBiz; @Value("${project.version}") private String systemVersion; @Autowired private CompanyUserExtMapper companyUserExtMapper; @Autowired private SystemUserMapper systemUserMapper; @Autowired private DepartmentExtMapper departmentExtMapper; @Autowired private SystemLoginLogService systemLoginLogService; /** * å¾®ä¿¡å ¬ä¼å·è·åTOKENå°å */ public static final String GET_ACCESS_TOKEN_URL = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code"; /** * å¾®ä¿¡å ¬ä¼å·è·åUSERINFOä¿¡æ¯å°å */ public static final String GET_USER_INFO_URL = "https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN"; @Override public WxLoginVO wxLogin(String code, HttpServletRequest request) { WxLoginVO wxLoginVO = new WxLoginVO(); String appId = systemDictDataBiz.queryByCode(Constants.WX_CONFIG,Constants.APPID).getCode(); String appSecret = systemDictDataBiz.queryByCode(Constants.WX_CONFIG,Constants.APPSECRET).getCode(); String getTokenUrl = GET_ACCESS_TOKEN_URL.replace("CODE", code).replace("APPID", appId).replace("SECRET", appSecret); JSONObject tokenJson = JSONObject.parseObject(HttpsUtil.get(getTokenUrl,true)); if(Objects.isNull(tokenJson.get("access_token"))){ throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),tokenJson.getString("errmsg")); } String accessToken = tokenJson.getString("access_token"); String openId = tokenJson.getString("openid"); String getUserInfoUrl = GET_USER_INFO_URL.replace("ACCESS_TOKEN", accessToken).replace("OPENID", openId); JSONObject userInfoJson = JSONObject.parseObject(HttpsUtil.get(getUserInfoUrl,true)); wxLoginVO.setOpenid(openId); wxLoginVO.setUnionid(userInfoJson.getString("unionid")); CompanyUser companyUser = companyUserExtMapper.selectOne(new QueryWrapper<CompanyUser>().eq("openid",openId).last(" limit 1 ")); if(Objects.isNull(companyUser)){ wxLoginVO.setLoginStatus(Constants.ONE); return wxLoginVO; } Department department = departmentExtMapper.selectById(companyUser.getRootDepartId()); if(Objects.isNull(department)){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"æªæ¥è¯¢å°ç»å®é¨é¨ä¿¡æ¯"); } SystemUser systemUser = systemUserMapper.selectById(companyUser.getUserId()); //æ¥è¯¢ç¨æ·æ°æ® LoginDTO dto = new LoginDTO(); dto.setCompanyId(department.getCompanyId()); dto.setUsername(systemUser.getUsername()); SystemLoginLog loginLog = new SystemLoginLog(); loginLog.setLoginUsername(dto.getUsername()); loginLog.setLoginTime(new Date()); loginLog.setSystemVersion(systemVersion); loginLog.setIp(Utils.User_Client.getIP(request)); loginLog.setLocation(Utils.Location.getLocationString(loginLog.getIp())); loginLog.setPlatform(Utils.User_Client.getPlatform(request)); loginLog.setClientInfo(Utils.User_Client.getBrowser(request)); loginLog.setOsInfo(Utils.User_Client.getOS(request)); loginLog.setServerIp(Utils.Server.getIP()); // æ ¡éªç¨æ·ååå¯ç Subject subject = SecurityUtils.getSubject(); ShiroToken token = new ShiroToken(dto.getCompanyId(),dto.getUsername(), null,false,true); try { subject.login(token); LoginUserInfo loginUser = ((LoginUserInfo)subject.getPrincipal()); loginLog.setUserId(loginUser.getId()); loginLog.setCompanyId(loginUser.getCompany()!=null?loginUser.getCompany().getId():null); loginLog.setCompanyUserId(loginUser.getCompanyUser()!=null?loginUser.getCompanyUser().getId():null); loginLog.setSuccess(Boolean.TRUE); systemLoginLogService.create(loginLog); String session = (String)subject.getSession().getId(); wxLoginVO.setLoginStatus(Constants.ONE); wxLoginVO.setSession(session); return wxLoginVO; }catch (AuthenticationException e) { BusinessException ee = null; loginLog.setSuccess(Boolean.FALSE); if(e.getCause()!=null && e.getCause() instanceof BusinessException){ ee = (BusinessException)e.getCause(); loginLog.setReason(ee.getMessage().length() > 200 ? (ee.getMessage().substring(0, 190) + "...") : ee.getMessage()); log.error(ee.getMessage(), e); }else{ log.error(ResponseStatus.ACCOUNT_INCORRECT.getMessage(), e); loginLog.setReason(e.getMessage().length() > 200 ? (e.getMessage().substring(0, 190) + "...") : e.getMessage()); ee = new BusinessException(ResponseStatus.ACCOUNT_INCORRECT); } systemLoginLogService.create(loginLog); throw ee; } } @Override public String wxLoginByPassword(WxLoginDTO dto, HttpServletRequest request) { SystemLoginLog loginLog = new SystemLoginLog(); loginLog.setLoginUsername(dto.getUsername()); loginLog.setLoginTime(new Date()); loginLog.setSystemVersion(systemVersion); loginLog.setIp(Utils.User_Client.getIP(request)); loginLog.setLocation(Utils.Location.getLocationString(loginLog.getIp())); loginLog.setPlatform(Utils.User_Client.getPlatform(request)); loginLog.setClientInfo(Utils.User_Client.getBrowser(request)); loginLog.setOsInfo(Utils.User_Client.getOS(request)); loginLog.setServerIp(Utils.Server.getIP()); // æ ¡éªç¨æ·ååå¯ç Subject subject = SecurityUtils.getSubject(); ShiroToken token = new ShiroToken(dto.getCompanyId(),dto.getUsername(), dto.getPassword(),false,false); try { subject.login(token); LoginUserInfo loginUser = ((LoginUserInfo)subject.getPrincipal()); loginLog.setUserId(loginUser.getId()); loginLog.setCompanyId(loginUser.getCompany()!=null?loginUser.getCompany().getId():null); loginLog.setCompanyUserId(loginUser.getCompanyUser()!=null?loginUser.getCompanyUser().getId():null); loginLog.setSuccess(Boolean.TRUE); systemLoginLogService.create(loginLog); //ç»å½æºå¸¦å¾®ä¿¡openidä¿¡æ¯ if(StringUtils.isNotBlank(dto.getOpenid())){ CompanyUser companyUser = companyUserExtMapper.selectById(loginLog.getCompanyUserId()); if(StringUtils.isBlank(companyUser.getOpenid())||!companyUser.getOpenid().equals(dto.getOpenid())){ //1ãç»å®å¾®ä¿¡openidå°companyUserè¡¨ä¿¡æ¯ companyUser.setOpenid(dto.getOpenid()); companyUser.setUnionid(dto.getUnionid()); companyUserExtMapper.updateById(companyUser); //2ãæ¸ 空åç¨æ·å ¶ä½companyUser表openidä¸ unionid companyUserExtMapper.update(null,new UpdateWrapper<CompanyUser>() .ne("ID",companyUser.getId()).set("UNIONID","").set("OPENID","") .eq("USER_ID",companyUser.getUserId()) ); } } return (String)subject.getSession().getId(); }catch (AuthenticationException e) { BusinessException ee = null; loginLog.setSuccess(Boolean.FALSE); if(e.getCause()!=null && e.getCause() instanceof BusinessException){ ee = (BusinessException)e.getCause(); loginLog.setReason(ee.getMessage().length() > 200 ? (ee.getMessage().substring(0, 190) + "...") : ee.getMessage()); log.error(ee.getMessage(), e); }else{ log.error(ResponseStatus.ACCOUNT_INCORRECT.getMessage(), e); loginLog.setReason(e.getMessage().length() > 200 ? (e.getMessage().substring(0, 190) + "...") : e.getMessage()); ee = new BusinessException(ResponseStatus.ACCOUNT_INCORRECT); } systemLoginLogService.create(loginLog); throw ee; } } } server/src/main/resources/application.yml
@@ -10,7 +10,7 @@ # application: # name: doumeemes profiles: active: standardPro active: standard # JSONè¿åé ç½® jackson: # é»è®¤æ¶åº