最近学习 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 了?还是说两者仍然有一些区别,有共存的价值?大家在实际项目中是如何应用的?
多谢!
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.