菜鸟求问 ZuulFilter 是否跟 Spring security 中的 WebSecurityConfigurerAdapter 的功能存在重叠?
資深大佬 : demonzoo 1
最近学习 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 了?还是说两者仍然有一些区别,有共存的价值?大家在实际项目中是如何应用的?
多谢!
大佬有話說 (2)