|
|
|
|
@ -21,6 +21,7 @@ import javax.servlet.ServletException;
|
|
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
|
|
import java.io.IOException;
|
|
|
|
|
import java.util.Optional;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Token 过滤器,验证 token 的有效性
|
|
|
|
|
@ -62,6 +63,25 @@ public class TokenAuthenticationFilter extends OncePerRequestFilter {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// 积木请求头
|
|
|
|
|
String jmTokenHeader = request.getHeader(securityProperties.getJmTokenHeader());
|
|
|
|
|
if (StrUtil.isNotEmpty(jmTokenHeader)) {
|
|
|
|
|
try {
|
|
|
|
|
OAuth2AccessTokenCheckRespDTO accessToken = oauth2TokenApi.checkAccessToken(jmTokenHeader);
|
|
|
|
|
Optional<LoginUser> optUser = Optional.ofNullable(accessToken)
|
|
|
|
|
.map(
|
|
|
|
|
t -> new LoginUser().setId(t.getUserId())
|
|
|
|
|
.setUserType(t.getUserType())
|
|
|
|
|
.setTenantId(t.getTenantId())
|
|
|
|
|
.setScopes(t.getScopes())
|
|
|
|
|
);
|
|
|
|
|
if (optUser.isPresent()) {
|
|
|
|
|
SecurityFrameworkUtils.setLoginUser(optUser.get(), request);
|
|
|
|
|
}
|
|
|
|
|
} catch (ServiceException ignored) {
|
|
|
|
|
// do nothing:如果报错,说明认证失败,忽略即可
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 继续过滤链
|
|
|
|
|
chain.doFilter(request, response);
|
|
|
|
|
@ -88,11 +108,11 @@ public class TokenAuthenticationFilter extends OncePerRequestFilter {
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 模拟登录用户,方便日常开发调试
|
|
|
|
|
*
|
|
|
|
|
* <p>
|
|
|
|
|
* 注意,在线上环境下,一定要关闭该功能!!!
|
|
|
|
|
*
|
|
|
|
|
* @param request 请求
|
|
|
|
|
* @param token 模拟的 token,格式为 {@link SecurityProperties#getMockSecret()} + 用户编号
|
|
|
|
|
* @param request 请求
|
|
|
|
|
* @param token 模拟的 token,格式为 {@link SecurityProperties#getMockSecret()} + 用户编号
|
|
|
|
|
* @param userType 用户类型
|
|
|
|
|
* @return 模拟的 LoginUser
|
|
|
|
|
*/
|
|
|
|
|
|