From e405b861b9521f5ea38c5402203a5b05988f9de2 Mon Sep 17 00:00:00 2001 From: ludc Date: 星期三, 04 十二月 2024 10:47:05 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/OsLoginController.java | 186 ++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 186 insertions(+), 0 deletions(-) diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/OsLoginController.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/OsLoginController.java new file mode 100644 index 0000000..097a66e --- /dev/null +++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/OsLoginController.java @@ -0,0 +1,186 @@ +package com.vci.web.controller; + +import com.vci.bo.LoginResultBO; +import com.vci.dto.LoginUserDTO; +import com.vci.starter.web.annotation.controller.VciUnCheckRight; +import com.vci.starter.web.annotation.log.VciBusinessLog; +import com.vci.starter.web.constant.TokenKeyConstant; +import com.vci.starter.web.pagemodel.BaseResult; +import com.vci.starter.web.pagemodel.RequestClientInfo; +import com.vci.starter.web.pagemodel.SessionInfo; +import com.vci.starter.web.util.MessageUtils; +import com.vci.starter.web.util.VciBaseUtil; +import com.vci.starter.web.util.WebThreadLocalUtil; +import com.vci.web.service.OsLoginServiceI; +import eu.bitwalker.useragentutils.*; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletRequest; +import java.util.Locale; +import java.util.Map; + +/** + * 鐧诲綍鎺у埗鍣� + * @author weidy + * @date 2021-1-28 + */ +@Controller +@RequestMapping("/framework/loginController") +@VciBusinessLog(modelName="鐧诲綍鏈嶅姟") +public class OsLoginController { + + /** + * 鐧诲綍鏈嶅姟 + */ + @Autowired + private OsLoginServiceI loginService; + + /** + * 鏃ュ織 + */ + private Logger logger = LoggerFactory.getLogger(getClass()); + + /** + * 鐧诲綍锛岃繖涓湴鏂逛富瑕佹槸涓轰簡鐧诲綍鍚庡崟鐙殑涓氬姟 + * @param userDTO 鐢ㄦ埛鐨勫璞� + * @param request 璇锋眰瀵硅薄 + * @param clientInfo 瀹㈡埛绔殑淇℃伅 + * @return 鎵ц缁撴灉 + */ + @VciBusinessLog(operateName="鐧诲綍") + @PostMapping(value = "/login") + @ResponseBody + @VciUnCheckRight() + public BaseResult login(LoginUserDTO userDTO, HttpServletRequest request, RequestClientInfo clientInfo){ + VciBaseUtil.alertNotNull(userDTO,"鐢ㄦ埛瀵硅薄",clientInfo,"璇锋眰瀹㈡埛绔俊鎭�"); + try { + wrapperBrowserInfo(clientInfo,request); + LoginResultBO loginResultBO = loginService.login(userDTO,clientInfo); + if(loginResultBO.isSuccess()){ + return BaseResult.success(loginResultBO); + }else{ + BaseResult result = BaseResult.fail(loginResultBO.getFailMsg()); + result.setCode(200);//鐘舵�佺爜涓嶆槸200鍓嶇鏃犳硶鑾峰彇鍒皁bj涓殑淇℃伅 + if(StringUtils.isBlank(loginResultBO.getFailMsg())){ + result.setMsg(MessageUtils.get(loginResultBO.getFailCode(),loginResultBO.getFailMsgArray())); + } + result.setObj(loginResultBO); + return result; + } + }catch (Exception e){ + e.printStackTrace(); + String msg = "璋冪敤鐧诲綍鏂规硶鏃跺嚭鐜伴敊璇紝鍘熷洜锛�"+VciBaseUtil.getExceptionMessage(e); + logger.error(msg); + return BaseResult.fail(msg); + } + } + + /** + * 鑾峰彇瀹㈡埛绔姹備俊鎭�,涓轰簡闅旂粷鍦╯erver灞備娇鐢╮equest + * @param request 璇锋眰瀵硅薄 + * @param clientInfo 瀹㈡埛绔俊鎭� + */ + private void wrapperBrowserInfo(RequestClientInfo clientInfo,HttpServletRequest request) { + UserAgent userAgent = UserAgent.parseUserAgentString(request.getHeader("User-Agent")); + if(StringUtils.isBlank(clientInfo.getIpaddress())){ + //鎵綢P鍦板潃 + clientInfo.setIpaddress(getIpAddressFromRequest(request)); + } + if(userAgent !=null) { + Browser browser = userAgent.getBrowser(); + OperatingSystem os = userAgent.getOperatingSystem(); + + clientInfo.setOsversion(os != null ? os.getName() : ""); + clientInfo.setBrowser(browser != null ? browser.getName() : "IE"); + String version = ""; + if (browser != null) { + Version version1 = browser.getVersion(request.getHeader("User-Agent")); + if (version1 != null) { + version = version1.getVersion(); + } + } + clientInfo.setBrowserversion(version); + if (os != null) { + clientInfo.setRequestType(os.getDeviceType().getName()); + if (DeviceType.COMPUTER.getName().equals(clientInfo.getRequestType())) { + clientInfo.setRequestType("browser"); + } + } + + Locale loc = Locale.getDefault(); + clientInfo.setCountry(loc.getCountry()); + clientInfo.setLanguage(loc.toLanguageTag()); + + Map<String,String> map = System.getenv(); + clientInfo.setMachine(map.get("COMPUTERNAME")); + clientInfo.setOsUser(map.get("USERNAME")); + } + } + + /** + * 浠庤姹備腑鑾峰彇ip鍦板潃锛屼负浜嗛殧缁濆湪server灞備娇鐢╮equest + * @param request 璇锋眰瀵硅薄 + * @return ip鍦板潃锛屾病鏈夋壘鍒伴粯璁や负127.0.0.1 + */ + private String getIpAddressFromRequest(HttpServletRequest request){ + String ip = request.getHeader("X-Forwarded-For"); + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("WL-Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("HTTP_CLIENT_IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("HTTP_X_FORWARDED_FOR"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getRemoteAddr(); + } + if (ip == null || ip.length() == 0 || ip.indexOf("0:0:0:0:0:0:0:1") >-1) { + //0:0:0:0:0:0:0:1鏄湰鏈哄湪璁块棶 + ip = "127.0.0.1"; + } + return ip; + } + + /** + * 鑾峰彇鐢ㄦ埛鐨勪細璇濅俊鎭� + * @return success涓簍rue琛ㄧず鑾峰彇鎴愬姛锛屽惁鍒檓sg鏄敊璇俊鎭紝obj灞炴�ф槸鑾峰彇鐨勪細璇濆璞′俊鎭� + */ + @VciUnCheckRight + @PostMapping("/getSessionInfo") + @ResponseBody + public BaseResult getSessionInfo(){ + BaseResult<SessionInfo> json = new BaseResult<>(); + SessionInfo sessionInfo = WebThreadLocalUtil.getCurrentUserSessionInfoInThread(); + if(sessionInfo != null){ + json = json.success(sessionInfo); + } + return json; + } + + /** + * 鎵ц閫�鍑� + * @param request 璇锋眰瀵硅薄 + * @return success涓簍rue琛ㄧず閫�鍑烘垚鍔燂紝鍓嶇涓嶉渶瑕佸垽鏂粨鏋� + */ + @VciUnCheckRight + @PostMapping("/logout") + @ResponseBody + public BaseResult logout(HttpServletRequest request){ + String userToken = request.getHeader(TokenKeyConstant.USER_TOKEN_KEY); + loginService.logout(userToken); + return BaseResult.success(); + } + +} -- Gitblit v1.9.3