我有一些微服务和使用Spring Cloud的网关。我正试图在网关中设置路由。理想情况下,我想在YML文件中设置路由,或者使用RouteLocator bean。
但目前,在我的网关中,每个路由都有RESTendpoint,这只是使用WebClient向前发送请求。
(在此之前,我有一个ReactiveAuthenticationManager过滤器,用于验证JWT令牌。它返回一个UsernamePasswordAuthenticationToken,其中包括它从令牌获得的一些用户权限)。
下面是一个html" target="_blank">示例,其中我设置了一个到称为跟踪服务的微服务的路由:
控制器:
@RestController
@RequestMapping("/tracking-service/tracking")
public class TrackingController {
@Autowired
private TrackingService trackingService;
@GetMapping
public Flux getAllTracking() {
return trackingService.getAllTracking();
}
}
服务:
@Service
public class TrackingService {
private WebClient webClient;
@PreAuthorize("hasAuthority('MANAGER')")
public Flux getAllTracking() {
//Make HTTP call to the tracking service
}
}
我这样做的原因是@PreAuthorize注释。如果客户端的JWT令牌不包括“MANAGER”令牌,则将返回403禁止状态。并非所有endpoint都需要管理者权限,有些endpoint需要其他权限。
我的问题-在使用YML进行路由时是否可以这样做?我希望看到像这样的东西,但我不确定这是否可能?我已经阅读了Spring文档并查看了所有可用的过滤器,但是我看不到任何可以完成这项工作的东西。
spring:
cloud:
gateway:
routes:
- id: tracking
uri: http://tracking-service
predicates:
- Path=/tracking-service/**
filters:
- StripPrefix=1
- PreAuthorize=hasAuthority('MANAGER')
谢谢。
API网关和授权是两个独立的关注点。理想情况下,网关应用程序中不应混合使用授权。为了获得许可,您可以直接将其映射到这样的服务。
@RestController
public class ResourceREST {
@RequestMapping(value = "/resource/", method = RequestMethod.GET)
@PreAuthorize("@customPermissionEvaluator.hasPrivilege(authentication,'somepermission')")
public Mono<ResponseEntity<?>> user() {
return Mono.just(ResponseEntity.ok(new Message("Access allowed")));
}
}
并定义自定义权限计算器
@Service
public class CustomPermissionEvaluator {
public boolean hasPrivilege(Authentication auth, String permission) {
String requiredPermissionCheck = permission.toLowerCase();
for (GrantedAuthority grantedAuth : auth.getAuthorities()) {
if (grantedAuth.getAuthority().contains(requiredPermissionCheck)) {
return true;
}
}
return false;
}
}
因此,网关在路由中不提供任何理想的授权。
有没有vue3+ts控制路由权限的项目案例?
我在Windows7上安装了WAMP2.1。然而,当我打开phpMyAdmin时,我得到一个错误,Mysql'No provideges'。我卸载了wamp并重新安装了几次,但都没有用。有人知道如何解决这个问题吗? 此外,当我试图从mysql控制台创建一个数据库,我得到以下错误:错误1044
此代码用于测试应用程序是否具有权限,如果您具有权限,则返回true,否则返回false。 错误: PID:25504 java.lang.NullPointerException:试图在Android.Content.Context Android.Content.Content.Context.GetApplicationContext(view.java:21147)在Android.os.h
我在Google BigQuery中创建了一个数据集,并下载了json auth文件。我试图从Jupyter笔记本中的python访问此数据集中的表,但我得到了错误: “禁止:403补丁https://bigquery.googleapis.com/bigquery/v2/projects/testdbt-bigquery-20200403/datasets/landing_zone_flight
问题内容: 我正在学习AngularJS,有一件事让我很烦。 我用来为我的应用程序声明路由规则: 但是当我在浏览器中导航到我的应用程序时,我看到的不是。 所以我的问题是为什么AngularJS将此hash添加到url中?有可能避免它吗? 问题答案: 实际上,对于非HTML5浏览器,您需要#(#标签)。 否则,他们将只通过提到的href对服务器进行HTTP调用。#是一个旧的浏览器短路问题,它不会触发
问题内容: 我正在学习AngularJS,有一件事让我很烦。 我用来为我的应用程序声明路由规则: 但是当我在浏览器中导航到我的应用程序时,我看到的不是。 所以我的问题是为什么AngularJS将此哈希添加到url中?有可能避免它吗? 问题答案: 实际上,对于非HTML5浏览器,您需要#(#标签)。 否则,他们将只通过提到的href对服务器进行HTTP调用。#是一个旧的浏览器短路问题,它不会触发请求