最近学习 Spring boot 的时候被 Spring security 和 Zuul 里面的 ZuulFilter 弄迷糊了。
我个人理解,我们的微服务模块可以继承 spring security 里面的 WebSecurityConfigurerAdapter,在里面 override 其 configure 方法实现对请求 url 的控制。
比如很多例子里面都有类似这样的代码:
@Override
protected void configure(HttpSecurity security) throws Exception {
http.csrf().disable()
.exceptionHandling()
.authenticationEntryPoint((request,response,authException)->response.sendError(HttpServletResponse.SC_UNAUTHORIZED))
.and()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.authorizeRequests()
.antMatchers("/api/login/**")
.permitAll()
.anyRequest()
.authenticated()
.and()
.httpBasic();
}
这段代码就对 login API 进行了放行,而对其它 api 进行验证。
而在看 ZuulFilter 的时候,我发现其实也可以在 ZuulFilter 里面 override shouldFilter 方法也实现 url 的过滤,而且可以在 filter 里面拿到 header 中的 token 从而进行验证。
比如如下这样的代码也可以实现对 login API 的放行,同样也可以从 request header 里面取出 token 进行验证:
@Override
public boolean shouldFilter() {
RequestContext requestContext = RequestContext.getCurrentContext();
HttpServletRequest request = requestContext.getRequest();
String requestURI = request.getRequestURI();
return !"/api/login".equalsIgnoreCase(requestURI);
}
所以我想问一下各位 spring 大佬,用了配置好 ZuulFilter 的网关是否就不需要再配置 spring security 了?还是说两者仍然有一些区别,有共存的价值?大家在实际项目中是如何应用的?
多谢!
1
liamyoung 2020-05-16 22:27:44 +08:00
Zuul 是网关,Spring Security 是认证、授权和其他安全功能的框架。可以在网关层面实现一些通用的安全功能,但是想针对某一个服务 定制具体的安全策略,还是需要依靠 Spring Security 来实现。
|
2
demonzoo OP @liamyoung 有道理,多谢回复。你的意思也就是说 zuul 网关确实可以不用 spring security,但是其它微服务模块还是需要用 spring security 的,对吧?
|
3
pkwenda 2020-05-21 13:33:50 +08:00
网关层面可以做一些,限流、反爬虫、调用链监控入口、请求合并,日志标记等一些事情。
|