|
@@ -1,7 +1,10 @@
|
|
|
package com.xy.satoken;
|
|
|
|
|
|
+import cn.hutool.json.JSONObject;
|
|
|
+import cn.hutool.json.JSONUtil;
|
|
|
+import com.xy.swagger.Knife4jConfig;
|
|
|
import lombok.AllArgsConstructor;
|
|
|
-import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
|
|
|
+import lombok.SneakyThrows;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
import org.springframework.web.servlet.config.annotation.InterceptorRegistration;
|
|
|
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
|
|
@@ -10,7 +13,8 @@ import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
|
|
|
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
-import java.util.Arrays;
|
|
|
+import java.io.BufferedReader;
|
|
|
+import java.io.InputStreamReader;
|
|
|
import java.util.List;
|
|
|
|
|
|
/**
|
|
@@ -18,7 +22,6 @@ import java.util.List;
|
|
|
*/
|
|
|
@Component
|
|
|
@AllArgsConstructor
|
|
|
-@ConditionalOnExpression("'${sa-token.run-way}'.equals('boot')")
|
|
|
public class SaTokenWebMvcConfigurer extends HandlerInterceptorAdapter implements WebMvcConfigurer {
|
|
|
|
|
|
private SaTokenAuthorizeConfig saTokenAuthorizeConfig;
|
|
@@ -26,27 +29,34 @@ public class SaTokenWebMvcConfigurer extends HandlerInterceptorAdapter implement
|
|
|
private SaTokenAuthorize saTokenAuthorize;
|
|
|
|
|
|
@Override
|
|
|
+ @SneakyThrows
|
|
|
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
|
|
|
- String permission = request.getRequestURI();
|
|
|
- String satoken = request.getHeader(saTokenAuthorizeConfig.getTokenName());
|
|
|
+ String permission;
|
|
|
+ String satoken;
|
|
|
+ if (request.getRequestURI().equals("/authorize/satokenAuthorize")) {
|
|
|
+ //接口形式鉴权(如网关调用),从请求参数获取权限信息
|
|
|
+ BufferedReader streamReader = new BufferedReader(new InputStreamReader(request.getInputStream(), "UTF-8"));
|
|
|
+ StringBuilder sb = new StringBuilder();
|
|
|
+ String inputStr;
|
|
|
+ while ((inputStr = streamReader.readLine()) != null) {
|
|
|
+ sb.append(inputStr);
|
|
|
+ }
|
|
|
+ JSONObject jsonObject = JSONUtil.parseObj(sb);
|
|
|
+ permission = jsonObject.getStr("permission");
|
|
|
+ satoken = jsonObject.getStr("satoken");
|
|
|
+ } else {
|
|
|
+ //其他调用,从请求地址和请求头获取权限信息
|
|
|
+ permission = request.getRequestURI();
|
|
|
+ satoken = request.getHeader(saTokenAuthorizeConfig.getTokenName());
|
|
|
+ }
|
|
|
return saTokenAuthorize.check(satoken, permission);
|
|
|
}
|
|
|
|
|
|
|
|
|
@Override
|
|
|
public void addInterceptors(InterceptorRegistry registry) {
|
|
|
- List<String> swaggerExcludes = Arrays.asList(
|
|
|
- "/swagger/**",
|
|
|
- "/v2/**",
|
|
|
- "/doc.html/**",
|
|
|
- "/v3/**",
|
|
|
- "/swagger-resources/**",
|
|
|
- "/webjars/**",
|
|
|
- "/swagger-ui/**",
|
|
|
- "/favicon.ico"
|
|
|
- );
|
|
|
InterceptorRegistration interceptorRegistration = registry.addInterceptor(this)
|
|
|
- .excludePathPatterns(swaggerExcludes)
|
|
|
+ .excludePathPatterns(Knife4jConfig.swaggerExcludes)
|
|
|
.addPathPatterns("/**");
|
|
|
List<String> excludePaths = saTokenAuthorizeConfig.getExcludePaths();
|
|
|
if (excludePaths != null) {
|