| | |
| | | @Component |
| | | public class AuthFilter implements GlobalFilter, Ordered { |
| | | private static final Logger log = LoggerFactory.getLogger(AuthFilter.class); |
| | | |
| | | /** 小程序token可访问的管理后台路径前缀白名单 */ |
| | | private static final String[] APPLET_SYSTEM_WHITELIST = { "/system/faq/" }; |
| | | |
| | | // 排除过滤的 uri 地址,nacos自行添加 |
| | | @Autowired |
| | |
| | | String userid = JwtUtils.getUserId(claims); |
| | | String username = JwtUtils.getUserName(claims); |
| | | String userType = JwtUtils.getUserType(claims); |
| | | |
| | | // 小程序token禁止访问管理后台 /system/** 接口(白名单除外) |
| | | if ("applet".equals(userType) && !isAppletAllowed(url)) { |
| | | return unauthorizedResponse(exchange, "无权限访问该接口"); |
| | | } |
| | | |
| | | // 设置用户信息到请求 |
| | | addHeader(mutate, SecurityConstants.USER_KEY, userkey); |
| | |
| | | removeHeader(mutate, SecurityConstants.FROM_SOURCE); |
| | | return chain.filter(exchange.mutate().request(mutate.build()).build()); |
| | | } |
| | | |
| | | /** |
| | | * 小程序token是否允许访问该路径 |
| | | * @param url 请求路径 |
| | | * @return true=允许 |
| | | */ |
| | | private boolean isAppletAllowed(String url) { |
| | | if (!url.startsWith("/system/")) { |
| | | return true; |
| | | } |
| | | for (String whitelist : APPLET_SYSTEM_WHITELIST) { |
| | | if (url.startsWith(whitelist)) { |
| | | return true; |
| | | } |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | private void addHeader(ServerHttpRequest.Builder mutate, String name, Object value) { |
| | | if (value == null) { |