test client 跳过登陆验证和密码解密,便于测试使用

This commit is contained in:
b2baccline
2021-01-21 22:50:15 +08:00
parent db5bff41e6
commit 2c8fc18f05
7 changed files with 40 additions and 39 deletions

View File

@@ -2,7 +2,7 @@ package com.hccake.ballcat.admin;
import com.anji.captcha.service.CaptchaService;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.hccake.ballcat.admin.constants.UrlMappingConst;
import com.hccake.ballcat.admin.constants.SecurityConst;
import com.hccake.ballcat.admin.modules.notify.push.MailNotifyPusher;
import com.hccake.ballcat.admin.modules.sys.checker.AdminRuleProperties;
import com.hccake.ballcat.admin.oauth.UserInfoCoordinator;
@@ -53,7 +53,7 @@ public class UpmsAutoConfiguration {
bean.setFilter(filter);
// 比密码解密早一步
bean.setOrder(-1);
bean.addUrlPatterns(UrlMappingConst.OAUTH_LOGIN);
bean.addUrlPatterns(SecurityConst.LOGIN_URL);
return bean;
}

View File

@@ -23,4 +23,14 @@ public final class SecurityConst {
*/
public static final String OAUTH_PREFIX = "oauth:";
/**
* 登陆地址
*/
public static final String LOGIN_URL = "/oauth/token";
/**
* 测试客户端的client_id
*/
public static final String TEST_CLIENT_ID = "test";
}

View File

@@ -1,15 +0,0 @@
package com.hccake.ballcat.admin.constants;
/**
* @author Hccake
* @version 1.0
* @date 2019/9/28 17:00
*/
public final class UrlMappingConst {
private UrlMappingConst() {
}
public static final String OAUTH_LOGIN = "/oauth/token";
}

View File

@@ -4,6 +4,7 @@ import com.anji.captcha.model.common.ResponseModel;
import com.anji.captcha.model.vo.CaptchaVO;
import com.anji.captcha.service.CaptchaService;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.hccake.ballcat.admin.oauth.util.SecurityUtils;
import com.hccake.ballcat.common.core.result.R;
import com.hccake.ballcat.common.core.result.SystemResultCode;
import lombok.RequiredArgsConstructor;
@@ -34,6 +35,12 @@ public class LoginCaptchaFilter extends OncePerRequestFilter {
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
// 测试客户端 跳过验证码swagger 或 postman测试时使用
if (SecurityUtils.isTestClient()) {
filterChain.doFilter(request, response);
return;
}
String captchaVerification = request.getParameter(CAPTCHA_VERIFICATION_PARAM);
CaptchaVO captchaVO = new CaptchaVO();

View File

@@ -1,7 +1,8 @@
package com.hccake.ballcat.admin.oauth.filter;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.hccake.ballcat.admin.constants.UrlMappingConst;
import com.hccake.ballcat.admin.constants.SecurityConst;
import com.hccake.ballcat.admin.oauth.util.SecurityUtils;
import com.hccake.ballcat.common.core.request.wrapper.ModifyParamMapRequestWrapper;
import com.hccake.ballcat.common.core.result.R;
import com.hccake.ballcat.common.core.result.SystemResultCode;
@@ -12,9 +13,6 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.annotation.Order;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.User;
import org.springframework.web.filter.OncePerRequestFilter;
import javax.servlet.FilterChain;
@@ -25,7 +23,6 @@ import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
/**
* @author Hccake
@@ -34,7 +31,7 @@ import java.util.Optional;
*/
@Slf4j
@Order(0)
@WebFilter(urlPatterns = { UrlMappingConst.OAUTH_LOGIN })
@WebFilter(urlPatterns = { SecurityConst.LOGIN_URL })
@RequiredArgsConstructor
public class LoginPasswordDecoderFilter extends OncePerRequestFilter {
@@ -47,27 +44,12 @@ public class LoginPasswordDecoderFilter extends OncePerRequestFilter {
private static final String GRANT_TYPE = "grant_type";
private static final String TEST_CLIENT = "test";
/**
* Same contract as for {@code doFilter}, but guaranteed to be just invoked once per
* request within a single request thread. See {@link #shouldNotFilterAsyncDispatch()}
* for details.
* <p>
* Provides HttpServletRequest and HttpServletResponse arguments instead of the
* default ServletRequest and ServletResponse ones.
* @param request
* @param response
* @param filterChain
*/
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
// 测试客户端 跳过密码解密swagger 或 postman测试时使用
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
User user = (User) Optional.ofNullable(authentication).map(Authentication::getPrincipal).orElse(null);
if (user != null && TEST_CLIENT.equals(user.getUsername())) {
if (SecurityUtils.isTestClient()) {
filterChain.doFilter(request, response);
return;
}

View File

@@ -1,10 +1,14 @@
package com.hccake.ballcat.admin.oauth.util;
import com.hccake.ballcat.admin.constants.SecurityConst;
import com.hccake.ballcat.admin.modules.sys.model.entity.SysUser;
import com.hccake.ballcat.admin.oauth.SysUserDetails;
import lombok.experimental.UtilityClass;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.User;
import java.util.Optional;
/**
* @author Hccake
@@ -54,4 +58,15 @@ public class SecurityUtils {
return sysUserDetails == null ? null : sysUserDetails.getSysUser();
}
/**
* 判断当前是否是测试客户端
* @return boolean 是truefalse
*/
public boolean isTestClient() {
// 测试客户端 跳过密码解密swagger 或 postman测试时使用
Authentication authentication = SecurityUtils.getAuthentication();
User user = (User) Optional.ofNullable(authentication).map(Authentication::getPrincipal).orElse(null);
return user != null && SecurityConst.TEST_CLIENT_ID.equals(user.getUsername());
}
}