From bf2401ac7d6dabc669bf47055c27d291fbf572d7 Mon Sep 17 00:00:00 2001 From: MaxKey Date: Mon, 8 Aug 2022 08:37:39 +0800 Subject: [PATCH] change refresh token RequestHeader->RequestParam change LoginTokenRefreshPoint -> AuthTokenRefreshPoint change refresh token RequestHeader->RequestParam log details --- .../authn/jwt/AuthRefreshTokenService.java | 2 +- .../maxkey/authn/jwt/AuthTokenService.java | 1 + ...hPoint.java => AuthTokenRefreshPoint.java} | 14 ++++--- .../interceptor/PermissionInterceptor.java | 2 +- .../main/java/org/maxkey/web/WebContext.java | 38 +++++++++--------- .../org/maxkey/web/WebInstRequestFilter.java | 2 +- .../org/maxkey/web/WebXssRequestFilter.java | 2 +- maxkey-lib/mybatis-jpa-extra-2.7.jar | Bin 83810 -> 82032 bytes .../src/app/core/net/default.interceptor.ts | 2 +- .../src/app/core/net/default.interceptor.ts | 2 +- 10 files changed, 34 insertions(+), 31 deletions(-) rename maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/web/{LoginTokenRefreshPoint.java => AuthTokenRefreshPoint.java} (86%) diff --git a/maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/jwt/AuthRefreshTokenService.java b/maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/jwt/AuthRefreshTokenService.java index 08383a515..865184f9a 100644 --- a/maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/jwt/AuthRefreshTokenService.java +++ b/maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/jwt/AuthRefreshTokenService.java @@ -42,7 +42,7 @@ public class AuthRefreshTokenService extends AuthJwtService{ * @return */ public String genRefreshToken(Authentication authentication) { - _logger.trace("gen Refresh Token"); + _logger.trace("generate Refresh JWT Token"); return genJwt( authentication, authJwkConfig.getIssuer(), diff --git a/maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/jwt/AuthTokenService.java b/maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/jwt/AuthTokenService.java index 994e7e15c..0329ef87a 100644 --- a/maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/jwt/AuthTokenService.java +++ b/maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/jwt/AuthTokenService.java @@ -66,6 +66,7 @@ public class AuthTokenService extends AuthJwtService{ public AuthJwt genAuthJwt(Authentication authentication) { if(authentication != null) { String refreshToken = refreshTokenService.genRefreshToken(authentication); + _logger.trace("generate JWT Token"); String accessToken = genJwt(authentication); AuthJwt authJwt = new AuthJwt( accessToken, diff --git a/maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/web/LoginTokenRefreshPoint.java b/maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/web/AuthTokenRefreshPoint.java similarity index 86% rename from maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/web/LoginTokenRefreshPoint.java rename to maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/web/AuthTokenRefreshPoint.java index 7c0da2bbb..012c0ade4 100644 --- a/maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/web/LoginTokenRefreshPoint.java +++ b/maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/web/AuthTokenRefreshPoint.java @@ -17,6 +17,8 @@ package org.maxkey.authn.web; +import javax.servlet.http.HttpServletRequest; + import org.maxkey.authn.jwt.AuthJwt; import org.maxkey.authn.jwt.AuthRefreshTokenService; import org.maxkey.authn.jwt.AuthTokenService; @@ -24,6 +26,7 @@ import org.maxkey.authn.session.Session; import org.maxkey.authn.session.SessionManager; import org.maxkey.entity.Message; import org.maxkey.util.StringUtils; +import org.maxkey.web.WebContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -31,13 +34,13 @@ import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestHeader; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; @Controller @RequestMapping(value = "/auth") -public class LoginTokenRefreshPoint { - private static final Logger _logger = LoggerFactory.getLogger(LoginTokenRefreshPoint.class); +public class AuthTokenRefreshPoint { + private static final Logger _logger = LoggerFactory.getLogger(AuthTokenRefreshPoint.class); @Autowired AuthTokenService authTokenService; @@ -49,10 +52,11 @@ public class LoginTokenRefreshPoint { SessionManager sessionManager; @RequestMapping(value={"/token/refresh"}, produces = {MediaType.APPLICATION_JSON_VALUE}) - public ResponseEntity refresh( - @RequestHeader(name = "refresh_token", required = false) String refreshToken) { + public ResponseEntity refresh(HttpServletRequest request, + @RequestParam(name = "refresh_token", required = false) String refreshToken) { _logger.debug("try to refresh token " ); _logger.trace("refresh token {} " , refreshToken); + if(_logger.isTraceEnabled()) {WebContext.printRequest(request);} try { if(StringUtils.isNotBlank(refreshToken) && refreshTokenService.validateJwtToken(refreshToken)) { diff --git a/maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/web/interceptor/PermissionInterceptor.java b/maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/web/interceptor/PermissionInterceptor.java index 6e845c293..033196253 100644 --- a/maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/web/interceptor/PermissionInterceptor.java +++ b/maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/web/interceptor/PermissionInterceptor.java @@ -63,7 +63,7 @@ public class PermissionInterceptor implements AsyncHandlerInterceptor { SignPrincipal principal = AuthorizationUtils.getPrincipal(); //判断用户是否登录,判断用户是否登录用户 if(principal == null){ - _logger.trace("No Authentication ... forward to /auth/entrypoint"); + _logger.trace("No Authentication ... forward to /auth/entrypoint , request URI " + request.getRequestURI()); RequestDispatcher dispatcher = request.getRequestDispatcher("/auth/entrypoint"); dispatcher.forward(request, response); return false; diff --git a/maxkey-core/src/main/java/org/maxkey/web/WebContext.java b/maxkey-core/src/main/java/org/maxkey/web/WebContext.java index 9833cea5c..6083d4aeb 100644 --- a/maxkey-core/src/main/java/org/maxkey/web/WebContext.java +++ b/maxkey-core/src/main/java/org/maxkey/web/WebContext.java @@ -237,26 +237,24 @@ public final class WebContext { * @param request */ public static void printRequest(final HttpServletRequest request) { - if(_logger.isTraceEnabled()) { - _logger.trace("getContextPath : {}" , request.getContextPath()); - _logger.trace("getRequestURL : {} " , request.getRequestURL()); - _logger.trace("URL : {}" , request.getRequestURI().substring(request.getContextPath().length())); - _logger.trace("getMethod : {} " , request.getMethod()); - - Enumeration headerNames = request.getHeaderNames(); - while (headerNames.hasMoreElements()) { - String key = (String) headerNames.nextElement(); - String value = request.getHeader(key); - _logger.trace("Header key {} , value {}" , key, value); - } - - Enumeration parameterNames = request.getParameterNames(); - while (parameterNames.hasMoreElements()) { - String key = (String) parameterNames.nextElement(); - String value = request.getParameter(key); - _logger.trace("Parameter {} , value {}",key , value); - } - } + _logger.info("getContextPath : {}" , request.getContextPath()); + _logger.info("getRequestURL : {} " , request.getRequestURL()); + _logger.info("URL : {}" , request.getRequestURI().substring(request.getContextPath().length())); + _logger.info("getMethod : {} " , request.getMethod()); + + Enumeration headerNames = request.getHeaderNames(); + while (headerNames.hasMoreElements()) { + String key = (String) headerNames.nextElement(); + String value = request.getHeader(key); + _logger.info("Header key {} , value {}" , key, value); + } + + Enumeration parameterNames = request.getParameterNames(); + while (parameterNames.hasMoreElements()) { + String key = (String) parameterNames.nextElement(); + String value = request.getParameter(key); + _logger.info("Parameter {} , value {}",key , value); + } } /** diff --git a/maxkey-core/src/main/java/org/maxkey/web/WebInstRequestFilter.java b/maxkey-core/src/main/java/org/maxkey/web/WebInstRequestFilter.java index 6379a631d..45a94a713 100644 --- a/maxkey-core/src/main/java/org/maxkey/web/WebInstRequestFilter.java +++ b/maxkey-core/src/main/java/org/maxkey/web/WebInstRequestFilter.java @@ -53,7 +53,7 @@ public class WebInstRequestFilter extends GenericFilterBean { HttpServletRequest request= ((HttpServletRequest)servletRequest); if(request.getSession().getAttribute(WebConstants.CURRENT_INST) == null) { - WebContext.printRequest(request); + if(_logger.isTraceEnabled()) {WebContext.printRequest(request);} String host = request.getHeader(HEADER_HOSTNAME); _logger.trace("hostname {}",host); if(StringUtils.isEmpty(host)) { diff --git a/maxkey-core/src/main/java/org/maxkey/web/WebXssRequestFilter.java b/maxkey-core/src/main/java/org/maxkey/web/WebXssRequestFilter.java index 6a425881b..b3812f7f5 100644 --- a/maxkey-core/src/main/java/org/maxkey/web/WebXssRequestFilter.java +++ b/maxkey-core/src/main/java/org/maxkey/web/WebXssRequestFilter.java @@ -72,7 +72,7 @@ public class WebXssRequestFilter extends GenericFilterBean { _logger.trace("WebXssRequestFilter"); boolean isWebXss = false; HttpServletRequest request= ((HttpServletRequest)servletRequest); - + if(_logger.isTraceEnabled()) {WebContext.printRequest(request);} if(skipUrlMap.containsKey(request.getRequestURI().substring(request.getContextPath().length()))) { isWebXss = false; }else { diff --git a/maxkey-lib/mybatis-jpa-extra-2.7.jar b/maxkey-lib/mybatis-jpa-extra-2.7.jar index 91ad62ce305bb56fb40e0ab260068e84e0fad0ed..9d394ca5d34f357431b0ec12063a16da3051fc87 100644 GIT binary patch delta 13083 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 diff --git a/maxkey-web-frontend/maxkey-web-app/src/app/core/net/default.interceptor.ts b/maxkey-web-frontend/maxkey-web-app/src/app/core/net/default.interceptor.ts index 9b1e51209..e05d6df07 100644 --- a/maxkey-web-frontend/maxkey-web-app/src/app/core/net/default.interceptor.ts +++ b/maxkey-web-frontend/maxkey-web-app/src/app/core/net/default.interceptor.ts @@ -107,7 +107,7 @@ export class DefaultInterceptor implements HttpInterceptor { */ private refreshTokenRequest(): Observable { const model = this.tokenSrv.get(); - return this.http.post(`/auth/token/refresh`, null, null, { headers: { refresh_token: model?.['refresh_token'] || '' } }); + return this.http.post(`/auth/token/refresh`, null, { refresh_token: model?.['refresh_token'] || '' }); } // #region 刷新Token方式一:使用 401 重新刷新 Token diff --git a/maxkey-web-frontend/maxkey-web-mgt-app/src/app/core/net/default.interceptor.ts b/maxkey-web-frontend/maxkey-web-mgt-app/src/app/core/net/default.interceptor.ts index 9b1e51209..e05d6df07 100644 --- a/maxkey-web-frontend/maxkey-web-mgt-app/src/app/core/net/default.interceptor.ts +++ b/maxkey-web-frontend/maxkey-web-mgt-app/src/app/core/net/default.interceptor.ts @@ -107,7 +107,7 @@ export class DefaultInterceptor implements HttpInterceptor { */ private refreshTokenRequest(): Observable { const model = this.tokenSrv.get(); - return this.http.post(`/auth/token/refresh`, null, null, { headers: { refresh_token: model?.['refresh_token'] || '' } }); + return this.http.post(`/auth/token/refresh`, null, { refresh_token: model?.['refresh_token'] || '' }); } // #region 刷新Token方式一:使用 401 重新刷新 Token