⚡ test client 跳过登陆验证和密码解密,便于测试使用
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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";
|
||||
|
||||
}
|
||||
|
||||
@@ -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";
|
||||
|
||||
}
|
||||
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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 是:true,否:false
|
||||
*/
|
||||
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());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user