V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
demonzoo
V2EX  ›  Java

菜鸟求问 ZuulFilter 是否跟 Spring security 中的 WebSecurityConfigurerAdapter 的功能存在重叠?

  •  
  •   demonzoo · 2020-05-16 22:01:08 +08:00 · 1968 次点击
    这是一个创建于 1411 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近学习 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 了?还是说两者仍然有一些区别,有共存的价值?大家在实际项目中是如何应用的?

    多谢!

    3 条回复    2020-05-21 13:33:50 +08:00
    liamyoung
        1
    liamyoung  
       2020-05-16 22:27:44 +08:00
    Zuul 是网关,Spring Security 是认证、授权和其他安全功能的框架。可以在网关层面实现一些通用的安全功能,但是想针对某一个服务 定制具体的安全策略,还是需要依靠 Spring Security 来实现。
    demonzoo
        2
    demonzoo  
    OP
       2020-05-17 08:41:09 +08:00
    @liamyoung 有道理,多谢回复。你的意思也就是说 zuul 网关确实可以不用 spring security,但是其它微服务模块还是需要用 spring security 的,对吧?
    pkwenda
        3
    pkwenda  
       2020-05-21 13:33:50 +08:00
    网关层面可以做一些,限流、反爬虫、调用链监控入口、请求合并,日志标记等一些事情。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5502 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 08:24 · PVG 16:24 · LAX 01:24 · JFK 04:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.