我有一个带有弹簧引导的微服务体系结构。我决定为每个微服务添加Spring安全性,以便对用户进行身份验证和授权。将Spring Security作为通用模块开发并在Spring Boot微服务体系结构中开放
因此,我开发了一个单独的项目,并拥有Spring Security认证。
我使用了一个扩展AbstractAuthenticationProcessingFilter的Filter。
这就需要身份验证和授权的路径在下面我的过滤器类中提到,
private AntPathRequestMatcher[] authenticationMatcher = {
new AntPathRequestMatcher("//api/myservice1/**"),
new AntPathRequestMatcher("/api/myservice")
};
private AntPathRequestMatcher[] authorizationMatcher = {
new AntPathRequestMatcher("/api/myservice")
};
所以在过滤器类doFilter方法我检查请求的路径和做好相关的逻辑。
我SecurityConfig类配置方法,只是看起来像下面,
@Override
protected void configure(HttpSecurity http) throws Exception {
http.addFilterBefore(getMyAuthenticationFilter(), BasicAuthenticationFilter.class);
}
所以我的问题是,
我应该做的方法对于介绍的这款模块(项目)每个微服务?
我脑子里想的是将它作为jar文件公开并在任何微服务中使用。在那种情况下,我如何才能搭上那些将针对每个微服务特定的authenticationMatcher和authorizationMatcher url?
我是否在正确的位置声明这些网址,如果有的话,我应该应用哪些面向对象的原则?
如果需要,是否有可能通过验证过滤器并在需要时启用它?像切换它?
你为什么不在每一个微服务本身做?每个服务都有特定的安全路径,所以基本上这个库会引入每个服务的依赖关系,这与微服务的目的相矛盾。 – dunni
感谢您的建议。但是我的意思是当这个库导入到一个特定的微服务时,那么我需要初始化这些AntPathRequestMatcher变量,只针对那个微服务请求路径。可能最初该库AntPathRequestMatcher变量可以设置为null。所以基本上我试图做的是将该库作为服务,以便任何微服务都可以在需要身份验证和继续执行的微服务中初始化它的特定请求路径。希望你明白了我的观点 – Harshana
您是使用Spring Cloud还是Netflix服务,如Eureka,Zuul等?我使用预过滤器实现了Zuul Edge服务。外部请求无法访问所有内部微服务。 Zuul服务使用Spring Session将经过身份验证的会话外部化到Redis数据库。所有微服务都使用Spring Session进行配置,所有请求都可以访问用户的身份验证会话。您可以轻松地使用每个微服务中的注释来保护路径。 – Bal