¶Ô±ÈÐÂÎļþ |
| | |
| | | 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åç«¯æ æ³è·åå°objä¸çä¿¡æ¯ |
| | | 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); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * è·å客æ·ç«¯è¯·æ±ä¿¡æ¯,为äºéç»å¨serverå±ä½¿ç¨request |
| | | * @param request 请æ±å¯¹è±¡ |
| | | * @param clientInfo 客æ·ç«¯ä¿¡æ¯ |
| | | */ |
| | | private void wrapperBrowserInfo(RequestClientInfo clientInfo,HttpServletRequest request) { |
| | | UserAgent userAgent = UserAgent.parseUserAgentString(request.getHeader("User-Agent")); |
| | | if(StringUtils.isBlank(clientInfo.getIpaddress())){ |
| | | //æ¾IPå°å |
| | | 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å±ä½¿ç¨request |
| | | * @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为true表示è·åæåï¼å¦åmsgæ¯é误信æ¯ï¼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为true表示éåºæåï¼å端ä¸éè¦å¤æç»æ |
| | | */ |
| | | @VciUnCheckRight |
| | | @PostMapping("/logout") |
| | | @ResponseBody |
| | | public BaseResult logout(HttpServletRequest request){ |
| | | String userToken = request.getHeader(TokenKeyConstant.USER_TOKEN_KEY); |
| | | loginService.logout(userToken); |
| | | return BaseResult.success(); |
| | | } |
| | | |
| | | } |