Parcourir la source

1、修改登录相关

周兴 il y a 3 ans
Parent
commit
a7ec88f292

+ 6 - 3
src/main/java/com/dk/oauth/controller/oauth/AccessTokenController.java

@@ -142,7 +142,7 @@ public class AccessTokenController {
             else if (oauthRequest.getParam(OAuth.OAUTH_GRANT_TYPE).equalsIgnoreCase(GrantType.PASSWORD.toString())) {
                 UserVO user = new UserVO();
                 user.setUserCode(request.getParameter("username")).setUserPwd(request.getParameter("password"))
-                        .setAppCode(request.getParameter("appcode"));
+                        .setAppCode(request.getParameter("appcode")).setFtyCode(request.getParameter("ftycode"));
 //                ResponseResultVO<UserVO> userRes = userService.selectCpCodeByCodeOrPhone(request.getParameter("username"));
 //                if (userRes.getCode() == ResponseCodeEnum.SUCCESS.getCode()) {
 //                    user = userRes.getData();
@@ -225,11 +225,13 @@ public class AccessTokenController {
             String lang = request.getParameter("lang");
             // 应用编码
             String appCode = request.getParameter("appcode");
+            String ftyCode = userVo.getFtyCode();
             JWTGenerator jwtGenerator = new JWTGenerator();
             jwtGenerator.setSalt(username);
             jwtGenerator.setUsername(username);
             jwtGenerator.setUserId(userId);
-            jwtGenerator.setFtyId(userVo.getFtyId().toString()); // TODO
+            jwtGenerator.setFtyId(userVo.getFtyId().toString());
+            jwtGenerator.setFtyCode(ftyCode);
             jwtGenerator.setClientId(client.getClientId());
             jwtGenerator.setGrantType(oauthRequest.getParam(OAuth.OAUTH_GRANT_TYPE));
             jwtGenerator.setAppCode(appCode);
@@ -247,8 +249,9 @@ public class AccessTokenController {
             authAccessToken.setAuthenticationId(authCode);
             authAccessToken.setTokenExpiredSeconds(OauthConstants.EXPIRES_IN);
             authAccessToken.setFtyId(userVo.getFtyId().toString());
+            authAccessToken.setFtyCode(userVo.getFtyCode());
             log.info("---->>>SecurityUtils.getSubject().isAuthenticated() = " + SecurityUtils.getSubject().isAuthenticated());
-            JWTToken jwtToken = JWTToken.build(accessToken, username, appCode, username, OauthConstants.EXPIRES_IN, oauthRequest.getParam(OAuth.OAUTH_GRANT_TYPE), client.getClientId(),lang);
+            JWTToken jwtToken = JWTToken.build(accessToken, username, userVo.getFtyId().toString(), ftyCode, username, OauthConstants.EXPIRES_IN, oauthRequest.getParam(OAuth.OAUTH_GRANT_TYPE), client.getClientId(),lang);
             SecurityUtils.getSubject().login(jwtToken);
             authAccessTokenService.save(authAccessToken);
             if (oauthRequest.getParam(OAuth.OAUTH_GRANT_TYPE).equals(GrantType.AUTHORIZATION_CODE.toString())) {

+ 4 - 3
src/main/java/com/dk/oauth/controller/oauth/AuthorizeController.java

@@ -152,15 +152,16 @@ public class AuthorizeController {
             return false;
         }
         String username = request.getParameter("username");
-        String companyId = request.getParameter("companyId");
+        String ftyId = request.getParameter("ftyId");
+        String ftyCode = request.getParameter("ftycode");
         String lang = request.getParameter("lang");
         if (StringUtils.isEmpty(username)) {
             return false;
         }
         //UsernamePasswordToken token = new UsernamePasswordToken(username, password);
-        String token = JwtUtil.sign(username, companyId, clientId, username,lang);
+        String token = JwtUtil.sign(username, ftyId, ftyCode, clientId, username,lang);
         //JwtToken jwtToken = new JwtToken(token);
-        JWTToken jwtToken = JWTToken.build(token, username, companyId, username, OauthConstants.EXPIRES_IN, GrantType.AUTHORIZATION_CODE.toString(), null,lang);
+        JWTToken jwtToken = JWTToken.build(token, username, ftyId, ftyCode, username, OauthConstants.EXPIRES_IN, GrantType.AUTHORIZATION_CODE.toString(), null,lang);
         try {
             //token.setRememberMe(true);
             subject.login(jwtToken);

+ 3 - 0
src/main/java/com/dk/oauth/entity/AuthAccessToken.java

@@ -46,6 +46,9 @@ public class AuthAccessToken {
     @TableField("fty_id")
     private String ftyId;
 
+    @TableField("fty_code")
+    private String ftyCode;
+
     @TableField("token_type")
     private String tokenType;
 

+ 3 - 2
src/main/java/com/dk/oauth/shiro/filter/OAuth2AuthenticationFilter.java

@@ -61,8 +61,9 @@ public class OAuth2AuthenticationFilter extends AuthenticatingFilter {
             } else {
                 // 登陆处理,不走shiro自带的登陆方法
                 String userName = JwtUtil.getUserName(accessToken);
-                String companyId = JwtUtil.getCompanyId(accessToken);
-                JWTToken jwtToken = JWTToken.build(accessToken, userName, companyId, userName, OauthConstants.EXPIRES_IN, GrantType.AUTHORIZATION_CODE.toString(), clientId, request.getParameter("lang"));
+                String ftyId = JwtUtil.getFtyId(accessToken);
+                String ftyCode = JwtUtil.getFtyCode(accessToken);
+                JWTToken jwtToken = JWTToken.build(accessToken, userName, ftyId, ftyCode, userName, OauthConstants.EXPIRES_IN, GrantType.AUTHORIZATION_CODE.toString(), clientId, request.getParameter("lang"));
                 WebUtils.saveRequest(request);
                 SecurityUtils.getSubject().login(jwtToken);
                 return true;

+ 3 - 2
src/main/java/com/dk/oauth/shiro/jwt/JWTGenerator.java

@@ -11,6 +11,7 @@ public class JWTGenerator implements ValueGenerator {
     private String username;
     private String userId;
     private String ftyId;
+    private String ftyCode;
     private String clientId;
     private String salt;
     private String grantType;
@@ -20,13 +21,13 @@ public class JWTGenerator implements ValueGenerator {
     @Override
     public String generateValue() throws OAuthSystemException {
         System.out.println("--->>> generateValue()");
-        return JwtUtil.sign(username, userId, appCode, clientId, salt, ftyId,lang);
+        return JwtUtil.sign(username, userId, appCode, clientId, salt, ftyId, ftyCode, lang);
     }
 
     @Override
     public String generateValue(String param) throws OAuthSystemException {
         System.out.println("--->>> generateValuegenerateValue(String param)");
-        return JwtUtil.sign(username, userId, appCode, clientId, salt, ftyId,lang);
+        return JwtUtil.sign(username, userId, appCode, clientId, salt, ftyId, ftyCode, lang);
     }
 
 }

+ 9 - 4
src/main/java/com/dk/oauth/shiro/jwt/JWTToken.java

@@ -34,9 +34,13 @@ public class JWTToken implements AuthenticationToken {
      */
     private String username;
     /**
-     * 公司id
+     * 工厂Id
      */
-    private String companyId;
+    private String ftyId;
+    /**
+     * 工厂编码
+     */
+    private String ftyCode;
     /**
      * 登录盐值
      */
@@ -73,7 +77,7 @@ public class JWTToken implements AuthenticationToken {
         return token;
     }
 
-    public static JWTToken build(String token, String username, String companyId, String salt, long expireSecond, String grantType, String clientId, String lang) {
+    public static JWTToken build(String token, String username, String ftyId, String ftyCode, String salt, long expireSecond, String grantType, String clientId, String lang) {
         DecodedJWT decodedJwt = JwtUtil.getJwtInfo(token);
         Date createDate = decodedJwt.getIssuedAt();
         Date expireDate = decodedJwt.getExpiresAt();
@@ -82,7 +86,8 @@ public class JWTToken implements AuthenticationToken {
         }
         return new JWTToken()
                 .setUsername(username)
-                .setCompanyId(companyId)
+                .setFtyId(ftyId)
+                .setFtyCode(ftyCode)
                 .setToken(token)
                 .setHost("127.0.0.1")
                 .setSalt(salt)

+ 6 - 5
src/main/java/com/dk/oauth/shiro/realm/JWTClientRealm.java

@@ -76,18 +76,19 @@ public class JWTClientRealm extends AuthorizingRealm implements CustomeRealm {
         }
         AuthClient client = authClientService.getOne(new QueryWrapper<AuthClient>().lambda().eq(AuthClient::getClientId, jwtToken.getClientId()));
         String userName = JwtUtil.getUserName(jwtToken.getToken());
-        String companyId = JwtUtil.getCompanyId(jwtToken.getToken());
+        String ftyId = JwtUtil.getFtyId(jwtToken.getToken());
+        String ftyCode = JwtUtil.getFtyCode(jwtToken.getToken());
         String lang = JwtUtil.getLang(jwtToken.getToken());
         log.info("----------------->>>>>");
         String token = "";
         JWTToken buildToken = null;
         if ("微信".equals(client.getClientName())) {
-            token = JwtUtil.sign(userName, companyId, client.getClientId(), userName,lang);
-            buildToken = JWTToken.build(token, userName, companyId, userName, OauthConstants.EXPIRES_IN, GrantType.CLIENT_CREDENTIALS.toString(), client.getClientId(), lang);
+            token = JwtUtil.sign(userName, ftyId, ftyCode, client.getClientId(), userName,lang);
+            buildToken = JWTToken.build(token, userName, ftyId, ftyCode, userName, OauthConstants.EXPIRES_IN, GrantType.CLIENT_CREDENTIALS.toString(), client.getClientId(), lang);
             return new SimpleAuthenticationInfo(buildToken, userName, getName());
         } else {
-            token = JwtUtil.sign(userName, companyId, client.getClientId(), client.getClientSecret(),lang);
-            buildToken = JWTToken.build(token, client.getClientId(), companyId, client.getClientId(), OauthConstants.EXPIRES_IN, GrantType.CLIENT_CREDENTIALS.toString(), client.getClientId(), lang);
+            token = JwtUtil.sign(userName, ftyId, ftyCode, client.getClientId(), client.getClientSecret(),lang);
+            buildToken = JWTToken.build(token, client.getClientId(), ftyId, ftyCode, client.getClientId(), OauthConstants.EXPIRES_IN, GrantType.CLIENT_CREDENTIALS.toString(), client.getClientId(), lang);
             return new SimpleAuthenticationInfo(buildToken, client.getClientId(), getName());
         }
     }

+ 4 - 3
src/main/java/com/dk/oauth/shiro/realm/JWTRealm.java

@@ -93,11 +93,12 @@ public class JWTRealm extends AuthorizingRealm implements CustomeRealm {
             throw new AuthenticationException("salt is null");
         }
         String userName = jwtToken.getUsername();
-        String companyId = jwtToken.getCompanyId();
+        String ftyId = jwtToken.getFtyId();
+        String ftyCode = jwtToken.getFtyCode();
         String lang = jwtToken.getLang();
-        String token = JwtUtil.sign(userName, companyId, jwtToken.getClientId(), userName,lang);
+        String token = JwtUtil.sign(userName, ftyId, ftyCode, jwtToken.getClientId(), userName,lang);
         // SALT字段需要替换
-        JWTToken buildToken = JWTToken.build(token, userName, companyId, salt, OauthConstants.EXPIRES_IN, GrantType.AUTHORIZATION_CODE.toString(), null,lang);
+        JWTToken buildToken = JWTToken.build(token, userName, ftyId, ftyCode, salt, OauthConstants.EXPIRES_IN, GrantType.AUTHORIZATION_CODE.toString(), null,lang);
         return new SimpleAuthenticationInfo(buildToken, salt, getName());
     }
 

+ 42 - 8
src/main/java/com/dk/oauth/util/JwtUtil.java

@@ -17,6 +17,7 @@ public class JwtUtil {
     public static final String SHIRO_USER_NAME = "username";
     public static final String SHIRO_USER_ID = "userId";
     public static final String SHIRO_FTY_ID = "ftyId";
+    public static final String SHIRO_FTY_CODE = "ftyCode";
     public static final String SHIRO_CLIENT_ID = "clientId";
     public static final String SHIRO_APP_CODE = "appCode";
     public static final String SHIRO_USER_SALT = "salt";
@@ -59,7 +60,7 @@ public class JwtUtil {
      * @param request
      * @return
      */
-    public static String getDecryptToken(HttpServletRequest request,String AESKey) {
+    public static String getDecryptToken(HttpServletRequest request, String AESKey) {
         String token = "";
         try {
             // 构建 OAuth2 资源请求
@@ -74,9 +75,9 @@ public class JwtUtil {
     }
 
     /**
-     * 获得token中的信息无需secret解密也能获得
-     *
-     * @return token中包含的用户名
+     * @desc : 获取token中UserName
+     * @author : 周兴
+     * @date : 2023/2/26 16:32
      */
     public static String getUserName(String token) {
         try {
@@ -88,6 +89,11 @@ public class JwtUtil {
         }
     }
 
+    /**
+     * @desc : 获取token中UserId
+     * @author : 周兴
+     * @date : 2023/2/26 16:32
+     */
     public static String getUserId(String token) {
         try {
             DecodedJWT jwt = JWT.decode(token);
@@ -98,7 +104,12 @@ public class JwtUtil {
         }
     }
 
-    public static String getCompanyId(String token) {
+    /**
+     * @desc : 获取token中FtyId
+     * @author : 周兴
+     * @date : 2023/2/26 16:32
+     */
+    public static String getFtyId(String token) {
         try {
             DecodedJWT jwt = JWT.decode(token);
             return jwt.getClaim(SHIRO_FTY_ID).asString();
@@ -108,6 +119,26 @@ public class JwtUtil {
         }
     }
 
+    /**
+     * @desc : 获取token中FtyCode
+     * @author : 周兴
+     * @date : 2023/2/26 16:32
+     */
+    public static String getFtyCode(String token) {
+        try {
+            DecodedJWT jwt = JWT.decode(token);
+            return jwt.getClaim(SHIRO_FTY_CODE).asString();
+        } catch (JWTDecodeException e) {
+            log.error("error:{}", e.getMessage());
+            return null;
+        }
+    }
+
+    /**
+     * @desc : 获取token中Lang
+     * @author : 周兴
+     * @date : 2023/2/26 16:32
+     */
     public static String getLang(String token) {
         try {
             DecodedJWT jwt = JWT.decode(token);
@@ -145,7 +176,7 @@ public class JwtUtil {
      * @param salt     盐值
      * @return 加密的token
      */
-    public static String sign(String username, String userId, String appCode, String clientId, String salt,String ftyId,String lang) {
+    public static String sign(String username, String userId, String appCode, String clientId, String salt, String ftyId, String ftyCode, String lang) {
         Date expireDate = new Date(System.currentTimeMillis() + OauthConstants.EXPIRES_IN);
         //加盐值
         Algorithm algorithm = Algorithm.HMAC256(salt);
@@ -154,6 +185,7 @@ public class JwtUtil {
                 .withClaim(SHIRO_USER_NAME, username)
                 .withClaim(SHIRO_USER_ID, userId)
                 .withClaim(SHIRO_FTY_ID, ftyId)
+                .withClaim(SHIRO_FTY_CODE, ftyCode)
                 .withClaim(SHIRO_APP_CODE, appCode)
                 .withClaim(SHIRO_CLIENT_ID, clientId)
                 .withClaim(SHIRO_USER_SALT, salt)
@@ -174,7 +206,7 @@ public class JwtUtil {
                 .sign(algorithm);
     }
 
-    public static String sign(String username, String userId, String appCode, String clientId, String salt, String grantType,String ftyId,String lang) {
+    public static String sign(String username, String userId, String appCode, String clientId, String salt, String grantType, String ftyId, String ftyCode, String lang) {
         Date expireDate = new Date(System.currentTimeMillis() + OauthConstants.EXPIRES_IN);
         //加盐值
         Algorithm algorithm = Algorithm.HMAC256(salt);
@@ -183,6 +215,7 @@ public class JwtUtil {
                 .withClaim(SHIRO_USER_NAME, username)
                 .withClaim(SHIRO_USER_ID, userId)
                 .withClaim(SHIRO_FTY_ID, ftyId)
+                .withClaim(SHIRO_FTY_CODE, ftyCode)
                 .withClaim(SHIRO_APP_CODE, appCode)
                 .withClaim(SHIRO_CLIENT_ID, clientId)
                 .withClaim(SHIRO_USER_SALT, salt)
@@ -204,7 +237,7 @@ public class JwtUtil {
                 .sign(algorithm);
     }
 
-    public static String sign(String username, String clientId, String salt,String ftyId,String lang) {
+    public static String sign(String username, String clientId, String salt, String ftyId, String ftyCode, String lang) {
         Date expireDate = new Date(System.currentTimeMillis() + OauthConstants.EXPIRES_IN);
         //加盐值
         Algorithm algorithm = Algorithm.HMAC256(salt);
@@ -212,6 +245,7 @@ public class JwtUtil {
         return JWT.create()
                 .withClaim(SHIRO_USER_NAME, username)
                 .withClaim(SHIRO_FTY_ID, ftyId)
+                .withClaim(SHIRO_FTY_CODE, ftyCode)
                 .withClaim(SHIRO_CLIENT_ID, clientId)
                 .withClaim(SHIRO_USER_SALT, salt)
                 .withClaim(SHIRO_APP_LANG, lang)