Procházet zdrojové kódy

1、修改登录相关

周兴 před 3 roky
rodič
revize
f2ab5c5586

+ 6 - 0
pom.xml

@@ -125,6 +125,12 @@
             <artifactId>shiro-ehcache</artifactId>
             <version>${spring.shiro.version}</version>
         </dependency>
+        <dependency>
+            <groupId>com.dk.mes</groupId>
+            <artifactId>mes-server-mdm</artifactId>
+            <version>3.0.0</version>
+            <scope>compile</scope>
+        </dependency>
         <!-- shiro end -->
     </dependencies>
 

+ 50 - 66
src/main/java/com/dk/oauth/controller/oauth/AccessTokenController.java

@@ -6,8 +6,7 @@ import com.alibaba.fastjson.serializer.SerializerFeature;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.dk.common.infrastructure.constant.Constant;
 import com.dk.common.infrastructure.enums.ErrorCodeEnum;
-import com.dk.common.model.vo.core.UserLoginVo;
-import com.dk.common.model.vo.system.UserVo;
+import com.dk.common.model.vo.core.UserVO;
 import com.dk.common.response.ResponseCodeEnum;
 import com.dk.common.response.ResponseResultUtil;
 import com.dk.common.response.ResponseResultVO;
@@ -75,7 +74,11 @@ public class AccessTokenController {
     @Value("${client-app-id}")
     private String clientAppId;
 
-
+    /**
+     * @desc : 获取token
+     * @author : 周兴
+     * @date : 2023/1/5 13:35
+     */
     @PostMapping(value = "/oauth/token")
     public ResponseResultVO token(HttpServletRequest request) throws Exception {
         AuthUserLoginLog authUserLoginLog = new AuthUserLoginLog();
@@ -110,7 +113,6 @@ public class AccessTokenController {
                 return ResponseResultUtil.error(ErrorCodeEnum.USER_PASSWORD_ERROR.getCode(), OauthConstants.INVALID_CLIENT_STOP);
             }
             authUserLoginLog.setClient(authCode);
-
             //endregion
 
             // region 根据不同grant_type处理
@@ -118,11 +120,11 @@ public class AccessTokenController {
              * 只校验 AUTHORIZATION_CODE、PASSWORD 、REFRESH_TOKEN 和 CLIENT_CREDENTIALS 类型
              * 具体查看 {@link GrantType}
              * */
-            UserVo userVo = null;
+            UserVO userVo = null;
 
             //定义api用户
-            UserVo apiUser = null;
-            ResponseResultVO validRes=ResponseResultUtil.error(ResponseCodeEnum.OPERATE_FAIL);
+            UserVO apiUser = null;
+            ResponseResultVO validRes = ResponseResultUtil.error(ResponseCodeEnum.OPERATE_FAIL);
 
             String appUuid = null;
             // region AUTHORIZATION_CODE
@@ -141,34 +143,25 @@ public class AccessTokenController {
 
             // region PASSWORD
             else if (oauthRequest.getParam(OAuth.OAUTH_GRANT_TYPE).equalsIgnoreCase(GrantType.PASSWORD.toString())) {
-                UserVo user;
-                ResponseResultVO<UserVo> userRes = userService.selectCpCodeByCodeOrPhone(request.getParameter("username"));
-                if (userRes.getCode() == ResponseCodeEnum.SUCCESS.getCode()) {
-                    user = userRes.getData();
-                } else {
-                    return userRes;
-                }
-                appUuid = Constant.LongConstant.COMPANY_HEGII_ID.getValue().equals(user.getCpId()) ?
-                        Constant.AppConstant.APP_WEB_HEGII.getName() : Constant.AppConstant.APP_WEB_MERCHANT.getName();
-                //创建登录实体
-                UserLoginVo userLoginVo=new UserLoginVo().setAppUuid(appUuid)
-                        .setCompanyCode(Constant.LongConstant.COMPANY_HEGII_ID.getValue().equals(user.getCpId()) ?
-                                null:user.getCpCode())
-                        .setName(user.getUserCode())
-                        .setPassword(request.getParameter("password"))
-                        .setSysId(Constant.LongConstant.COMPANY_HEGII_ID.getValue().equals(user.getCpId()) ?
-                                Constant.IntegerConstant.SYS_HEGII.getValue() : Constant.IntegerConstant.SYS_MERCHANT.getValue());
+                UserVO user = new UserVO();
+                user.setUserCode(request.getParameter("username")).setUserPwd(request.getParameter("password"))
+                        .setAppCode(Constant.AppConstant.WEB_MAIN.getName());
+//                ResponseResultVO<UserVO> userRes = userService.selectCpCodeByCodeOrPhone(request.getParameter("username"));
+//                if (userRes.getCode() == ResponseCodeEnum.SUCCESS.getCode()) {
+//                    user = userRes.getData();
+//                } else {
+//                    return userRes;
+//                }
                 //调用user服务进行业务校验
-                validRes = userService.loginValid(userLoginVo);
-                if (validRes.getCode()!= ResponseCodeEnum.SUCCESS.getCode()){
+                validRes = userService.loginValid(user);
+                if (validRes.getCode() != ResponseCodeEnum.SUCCESS.getCode()) {
                     authUserLoginLog.setLoginType(AuthUserLoginLog.LOGIN_TYPE3);
                     authUserLoginLog.setCommand(AuthUserLoginLog.LOGIN_COMMAND3);
                     loinLog(authUserLoginLog, request);
                     return validRes;
-                }else{
-                    userVo=JSON.parseObject(JSON.toJSONString(validRes.getData())).getObject("u",UserVo.class);
+                } else {
+                    userVo = JSON.parseObject(JSON.toJSONString(validRes.getData())).getObject("user", UserVO.class);
                     authAccessToken.setUserId(String.valueOf(userVo.getUserId()));
-                    authAccessToken.setCompanyId(String.valueOf(userVo.getCpId()));
                 }
             }
             // endregion
@@ -201,16 +194,14 @@ public class AccessTokenController {
                     return ResponseResultUtil.error(ErrorCodeEnum.USER_PASSWORD_ERROR.getCode(), OauthConstants.INVALID_CLIENT_DESCRIPTION);
                 }
                 //根据客户端主键id查询用户
-                apiUser=userService.selectByClientId(client.getId());
+                apiUser = userService.selectByClientId(client.getId());
                 //如果不存在,或已经停用
-                if(apiUser==null||!apiUser.getFlgValid()){
+                if (apiUser == null || !apiUser.getFlgValid()) {
                     return ResponseResultUtil.error(ErrorCodeEnum.USER_PASSWORD_ERROR.getCode(), OauthConstants.INVALID_CLIENT_STOP);
                 }
                 authAccessToken.setUserId(String.valueOf(apiUser.getUserId()));
-                authAccessToken.setCompanyId(String.valueOf(apiUser.getCpId()));
             }
             // endregion
-
             else {
                 authUserLoginLog.setCommand(AuthUserLoginLog.LOGIN_COMMAND3);
                 loinLog(authUserLoginLog, request);
@@ -222,31 +213,24 @@ public class AccessTokenController {
             String username = "";
             String userId = "";
             String companyId = "";
-            String appId="";
+            String appId = "";
             if (oauthRequest.getParam(OAuth.OAUTH_GRANT_TYPE).equals(GrantType.CLIENT_CREDENTIALS.toString())) {
                 // 客户端凭证
                 username = client.getClientId();
                 userId = String.valueOf(apiUser.getUserId());
-                companyId = String.valueOf(apiUser.getCpId());
-                appId=clientAppId;
             } else if (oauthRequest.getParam(OAuth.OAUTH_GRANT_TYPE).equals(GrantType.AUTHORIZATION_CODE.toString())) {
                 // auth2 code模式
                 username = code.getUserId();
                 userId = code.getUserId();
-                companyId = client.getClientId();
             } else {
                 // 密码模式
                 username = request.getParameter("username");
                 userId = String.valueOf(userVo.getUserId());
-                companyId = String.valueOf(userVo.getCpId());
-                appId= appUuid;
             }
             JWTGenerator jwtGenerator = new JWTGenerator();
             jwtGenerator.setSalt(username);
             jwtGenerator.setUsername(username);
             jwtGenerator.setUserId(userId);
-            jwtGenerator.setCompanyId(companyId);
-            jwtGenerator.setAppId(appId);
             jwtGenerator.setClientId(client.getClientId());
             jwtGenerator.setGrantType(oauthRequest.getParam(OAuth.OAUTH_GRANT_TYPE));
             OAuthIssuerImpl oAuthIssuer = new OAuthIssuerImpl(jwtGenerator);
@@ -283,25 +267,25 @@ public class AccessTokenController {
             loinLog(authUserLoginLog, request);
             // endregion
 
-            if (oauthRequest.getParam(OAuth.OAUTH_GRANT_TYPE).equalsIgnoreCase(GrantType.PASSWORD.toString())){
+            if (oauthRequest.getParam(OAuth.OAUTH_GRANT_TYPE).equalsIgnoreCase(GrantType.PASSWORD.toString())) {
                 //调用 loginAfterCheckPassword
-                ResponseResultVO<JSONObject> loginRes = userService.loginAfterCheckPassword(JSON.parseObject(JSON.toJSONString(validRes.getData())).fluentPut("accessToken",accessToken));
+                ResponseResultVO<JSONObject> loginRes = userService.loginAfterCheckPassword(JSON.parseObject(JSON.toJSONString(validRes.getData())).fluentPut("accessToken", accessToken));
 
                 return ResponseResultUtil.success(JSON.parseObject(JSON.toJSONString(loginRes.getData(), SerializerFeature.WRITE_MAP_NULL_FEATURES))
-                        .fluentPut("nowDate",DateUtil.dateToString(authAccessToken.getCreateDate()))
-                        .fluentPut("expires_in",String.valueOf(OauthConstants.EXPIRES_IN)));
-            }else{
+                        .fluentPut("nowDate", DateUtil.dateToString(authAccessToken.getCreateDate()))
+                        .fluentPut("expires_in", String.valueOf(OauthConstants.EXPIRES_IN)));
+            } else {
                 // region 生成OAuth响应
-            OAuthResponse response = OAuthASResponse
-                    .tokenResponse(HttpServletResponse.SC_OK)
-                    .setAccessToken(accessToken)
-                    .setExpiresIn(String.valueOf(OauthConstants.EXPIRES_IN))
-                    .setParam("nowDate", DateUtil.dateToString(authAccessToken.getCreateDate()))
+                OAuthResponse response = OAuthASResponse
+                        .tokenResponse(HttpServletResponse.SC_OK)
+                        .setAccessToken(accessToken)
+                        .setExpiresIn(String.valueOf(OauthConstants.EXPIRES_IN))
+                        .setParam("nowDate", DateUtil.dateToString(authAccessToken.getCreateDate()))
 //                    .setParam("username", username)
 //                    .setParam("companyId", companyId)
-                    .buildJSONMessage();
-            log.info("---->>>SecurityUtils.getSubject().isAuthenticated() =" + SecurityUtils.getSubject().isAuthenticated());
-            return ResponseResultUtil.success(response.getResponseStatus(), "", JSONObject.parse(response.getBody()));
+                        .buildJSONMessage();
+                log.info("---->>>SecurityUtils.getSubject().isAuthenticated() =" + SecurityUtils.getSubject().isAuthenticated());
+                return ResponseResultUtil.success(response.getResponseStatus(), "", JSONObject.parse(response.getBody()));
                 // endregion
             }
 
@@ -335,13 +319,13 @@ public class AccessTokenController {
     }
 
     @PostMapping(value = "/oauth/wx_token")
-    public String wxToken(@RequestBody Map<String,Object> param) throws Exception{
-        log.info("wx_token_param=>{}",JSON.toJSONString(param));
-        String username=param.get("userCode").toString();
-        String userId=param.get("userId").toString();
-        String companyId=param.get("cpId").toString();
-        String appId=param.get("appId").toString();
-        String clientId=param.get("clientId").toString();
+    public String wxToken(@RequestBody Map<String, Object> param) throws Exception {
+        log.info("wx_token_param=>{}", JSON.toJSONString(param));
+        String username = param.get("username").toString();
+        String userId = param.get("userId").toString();
+        String companyId = param.get("cpId").toString();
+        String appId = param.get("appId").toString();
+        String clientId = param.get("clientId").toString();
 
         AuthUserLoginLog authUserLoginLog = new AuthUserLoginLog();
         AuthAccessToken authAccessToken = new AuthAccessToken();
@@ -380,11 +364,11 @@ public class AccessTokenController {
         }
 
         authUserLoginLog.setCommand(AuthUserLoginLog.LOGIN_COMMAND1);
-        wxLoginLog(authUserLoginLog, param.get("ip").toString(),param.get("browser").toString());
+        wxLoginLog(authUserLoginLog, param.get("ip").toString(), param.get("browser").toString());
         return accessToken;
     }
 
-    private void wxLoginLog(AuthUserLoginLog authUserLoginLog,String ip,String browser) {
+    private void wxLoginLog(AuthUserLoginLog authUserLoginLog, String ip, String browser) {
         Date date = new Date();
         authUserLoginLog.setCreateDate(date);
         authUserLoginLog.setLastUpdateDate(date);
@@ -399,12 +383,12 @@ public class AccessTokenController {
 
 
     /**
-     * @desc   : 查询用户最新token
+     * @desc : 查询用户最新token
      * @author : 洪旭东
-     * @date   : 2022-08-02 18:44
+     * @date : 2022-08-02 18:44
      */
     @PostMapping(value = "current_token/{userId}")
-    public String getCurrentToken(@PathVariable Long userId){
+    public String getCurrentToken(@PathVariable Long userId) {
         return authAccessTokenService.getCurrentToken(userId);
     }
 }

+ 55 - 73
src/main/java/com/dk/oauth/controller/oauth/UserInfoController.java

@@ -1,36 +1,18 @@
 package com.dk.oauth.controller.oauth;
 
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.dk.common.infrastructure.enums.ErrorCodeEnum;
-import com.dk.common.model.pojo.PageList;
-import com.dk.common.model.vo.system.UserVo;
 import com.dk.common.response.ResponseResultUtil;
 import com.dk.common.response.ResponseResultVO;
 import com.dk.common.service.UserService;
-import com.dk.common.infrastructure.constant.OauthConstants;
-import com.dk.oauth.entity.AuthAccessToken;
 import com.dk.oauth.service.IAuthAccessTokenService;
-import com.dk.oauth.util.AESSecurityUtil;
-import com.dk.oauth.util.JwtUtil;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.collections.CollectionUtils;
-import org.apache.oltu.oauth2.common.OAuth;
-import org.apache.oltu.oauth2.common.exception.OAuthProblemException;
 import org.apache.oltu.oauth2.common.exception.OAuthSystemException;
-import org.apache.oltu.oauth2.common.message.OAuthResponse;
-import org.apache.oltu.oauth2.common.utils.OAuthUtils;
-import org.apache.oltu.oauth2.rs.request.OAuthAccessResourceRequest;
-import org.apache.oltu.oauth2.rs.response.OAuthRSResponse;
-import org.apache.shiro.SecurityUtils;
 import org.springframework.beans.factory.annotation.Value;
-import org.springframework.http.HttpHeaders;
 import org.springframework.http.HttpStatus;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
 
 @Slf4j
 @RestController
@@ -50,61 +32,61 @@ public class UserInfoController {
     @GetMapping(value = "/getUser")
     public ResponseResultVO userInfo(HttpServletRequest request) throws OAuthSystemException {
         try {
-            System.out.println("--->>> SecurityUtils.getSubject().getPrincipal()" + SecurityUtils.getSubject().getPrincipal());
-            System.out.println("SecurityUtils.getSubject().isAuthenticated() = " + SecurityUtils.getSubject().isAuthenticated());
-            // 解析token
-            String decryptToken = JwtUtil.getDecryptToken(request, AESKey);
-            String userNameForToken = JwtUtil.getUserName(decryptToken);
-            String userIdForToken = JwtUtil.getUserId(decryptToken);
-            String companyIdForToken = JwtUtil.getCompanyId(decryptToken);
-            String grantTypeForToken = JwtUtil.getGrantType(decryptToken);
-
-            // 构建 OAuth2 资源请求
-            OAuthAccessResourceRequest oauthRequest = new OAuthAccessResourceRequest(request);
-            // 获取Access Token
-            String accessToken = oauthRequest.getAccessToken();
-            accessToken = AESSecurityUtil.decrypt(AESKey, accessToken);
-            // 验证Access Token
-            AuthAccessToken token = tokenService.getOne(new QueryWrapper<AuthAccessToken>().lambda().eq(AuthAccessToken::getTokenId, accessToken));
-            long expiredTime = token.getCreateDate().getTime() + token.getTokenExpiredSeconds();
-            long currentTime = System.currentTimeMillis();
-            if (expiredTime < currentTime) {
-                log.info("accessToken 已过期  accessToken=" + accessToken);
-                // 不存在(过期),则返回未验证,需重新验证
-                return ResponseResultUtil.error(ErrorCodeEnum.USER_TOKEN_EXPIRE.getCode(), ErrorCodeEnum.USER_TOKEN_EXPIRE.getMessage());
-            }
-            // 返回用户名
-            String username = token.getUserId();
-            String companyId = token.getCompanyId();
-            UserVo resultVo = new UserVo();
-            // 查询用户信息
-            UserVo selectVo = new UserVo();
-            // 用户编码为登录名
-            selectVo.setUserCode(username);
-            selectVo.setCpId(Long.valueOf(companyId));
-            ResponseResultVO<PageList<UserVo>> selectResponse = userService.selectByCond(selectVo);
-            if (selectResponse != null && selectResponse.getData() != null && CollectionUtils.isNotEmpty(selectResponse.getData().getList())) {
-                resultVo = selectResponse.getData().getList().get(0);
-            }
-            return ResponseResultUtil.success(resultVo);
-        } catch (OAuthProblemException e) {
-            // 检查是否设置了错误码
-            String errorCode = e.getError();
-            if (OAuthUtils.isEmpty(errorCode)) {
-                return ResponseResultUtil.error(HttpServletResponse.SC_UNAUTHORIZED, OauthConstants.RESOURCE_SERVER_NAME);
-            }
-
-            OAuthResponse oauthResponse = OAuthRSResponse
-                    .errorResponse(HttpServletResponse.SC_UNAUTHORIZED)
-                    .setRealm(OauthConstants.RESOURCE_SERVER_NAME)
-                    .setError(e.getError())
-                    .setErrorDescription(e.getDescription())
-                    .setErrorUri(e.getUri())
-                    .buildHeaderMessage();
-            HttpHeaders headers = new HttpHeaders();
-            headers.add(OAuth.HeaderType.WWW_AUTHENTICATE,
-                    oauthResponse.getHeader(OAuth.HeaderType.WWW_AUTHENTICATE));
-            return ResponseResultUtil.error(HttpStatus.BAD_REQUEST.value(), HttpStatus.BAD_REQUEST.getReasonPhrase());
+//            System.out.println("--->>> SecurityUtils.getSubject().getPrincipal()" + SecurityUtils.getSubject().getPrincipal());
+//            System.out.println("SecurityUtils.getSubject().isAuthenticated() = " + SecurityUtils.getSubject().isAuthenticated());
+//            // 解析token
+//            String decryptToken = JwtUtil.getDecryptToken(request, AESKey);
+//            String userNameForToken = JwtUtil.getUserName(decryptToken);
+//            String userIdForToken = JwtUtil.getUserId(decryptToken);
+//            String companyIdForToken = JwtUtil.getCompanyId(decryptToken);
+//            String grantTypeForToken = JwtUtil.getGrantType(decryptToken);
+//
+//            // 构建 OAuth2 资源请求
+//            OAuthAccessResourceRequest oauthRequest = new OAuthAccessResourceRequest(request);
+//            // 获取Access Token
+//            String accessToken = oauthRequest.getAccessToken();
+//            accessToken = AESSecurityUtil.decrypt(AESKey, accessToken);
+//            // 验证Access Token
+//            AuthAccessToken token = tokenService.getOne(new QueryWrapper<AuthAccessToken>().lambda().eq(AuthAccessToken::getTokenId, accessToken));
+//            long expiredTime = token.getCreateDate().getTime() + token.getTokenExpiredSeconds();
+//            long currentTime = System.currentTimeMillis();
+//            if (expiredTime < currentTime) {
+//                log.info("accessToken 已过期  accessToken=" + accessToken);
+//                // 不存在(过期),则返回未验证,需重新验证
+//                return ResponseResultUtil.error(ErrorCodeEnum.USER_TOKEN_EXPIRE.getCode(), ErrorCodeEnum.USER_TOKEN_EXPIRE.getMessage());
+//            }
+//            // 返回用户名
+//            String username = token.getUserId();
+//            String companyId = token.getCompanyId();
+//            UserVO resultVo = new UserVO();
+//            // 查询用户信息
+//            UserVO selectVo = new UserVO();
+//            // 用户编码为登录名
+//            selectVo.setUserCode(username);
+//            ResponseResultVO<PageList<UserVO>> selectResponse = userService.selectByCond(selectVo);
+//            if (selectResponse != null && selectResponse.getData() != null && CollectionUtils.isNotEmpty(selectResponse.getData().getList())) {
+//                resultVo = selectResponse.getData().getList().get(0);
+//            }
+//            return ResponseResultUtil.success(resultVo);
+//        } catch (OAuthProblemException e) {
+//            // 检查是否设置了错误码
+//            String errorCode = e.getError();
+//            if (OAuthUtils.isEmpty(errorCode)) {
+//                return ResponseResultUtil.error(HttpServletResponse.SC_UNAUTHORIZED, OauthConstants.RESOURCE_SERVER_NAME);
+//            }
+//
+//            OAuthResponse oauthResponse = OAuthRSResponse
+//                    .errorResponse(HttpServletResponse.SC_UNAUTHORIZED)
+//                    .setRealm(OauthConstants.RESOURCE_SERVER_NAME)
+//                    .setError(e.getError())
+//                    .setErrorDescription(e.getDescription())
+//                    .setErrorUri(e.getUri())
+//                    .buildHeaderMessage();
+//            HttpHeaders headers = new HttpHeaders();
+//            headers.add(OAuth.HeaderType.WWW_AUTHENTICATE,
+//                    oauthResponse.getHeader(OAuth.HeaderType.WWW_AUTHENTICATE));
+//            return ResponseResultUtil.error(HttpStatus.BAD_REQUEST.value(), HttpStatus.BAD_REQUEST.getReasonPhrase());
+            return null;
         } catch (Exception e) {
             e.printStackTrace();
         }

+ 2 - 3
src/main/java/com/dk/oauth/feign/service/UserFeignService.java

@@ -1,8 +1,7 @@
 package com.dk.oauth.feign.service;
 
-import com.dk.common.infrastructure.constant.Constant;
 import com.dk.common.model.pojo.PageList;
-import com.dk.common.model.vo.system.UserVo;
+import com.dk.common.model.vo.core.UserVO;
 import com.dk.common.response.ResponseResultVO;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -16,6 +15,6 @@ import org.springframework.web.bind.annotation.RequestBody;
 public interface UserFeignService {
 
     @PostMapping("{list_by}")
-    ResponseResultVO<PageList<UserVo>> selectByCond(@RequestBody UserVo userVo);
+    ResponseResultVO<PageList<UserVO>> selectByCond(@RequestBody UserVO userVo);
 
 }

+ 2 - 2
src/main/java/com/dk/oauth/feign/service/impl/UserFeignServiceImpl.java

@@ -1,7 +1,7 @@
 package com.dk.oauth.feign.service.impl;
 
 import com.dk.common.model.pojo.PageList;
-import com.dk.common.model.vo.system.UserVo;
+import com.dk.common.model.vo.core.UserVO;
 import com.dk.common.response.ResponseResultVO;
 import com.dk.oauth.feign.service.UserFeignService;
 import lombok.extern.slf4j.Slf4j;
@@ -15,7 +15,7 @@ import lombok.extern.slf4j.Slf4j;
 //@Component
 public class UserFeignServiceImpl implements UserFeignService {
     @Override
-    public ResponseResultVO<PageList<UserVo>> selectByCond(UserVo userVo) {
+    public ResponseResultVO<PageList<UserVO>> selectByCond(UserVO userVo) {
         log.error("sorry,UserService feign selectByCond error!");
         return null;
     }