首页 > 解决方案 > Spring Boot 微服务中的 JWT 安全性

问题描述

除了最重要的部分外,我有一个非常接近工作的 Spring Boot 应用程序。基本上设置了四个微服务(还有其他几个,但为了这个问题的目的是四个)。

我想要完成的是有一个安全配置来检查有效的 jwt 令牌,如果没有找到,则转发到自定义登录页面。

这很难解释,所以我会编一些端口号来说明。我们可以忘记服务注册端口。

我可以通过网关显示登录页面:http://localhost:8080/security/login,它看起来不错。但是当我尝试访问 Web 微服务中的页面时:http://localhost:8080/web/page,我希望被转发到http://localhost:8080/security/login,但我看到的是这个页面: http: //173.7.8.9 :8081/security/login 。我组成了 IP 地址,但它是我从网络中分配的 IP 地址。

我的安全配置如下所示:

   @Override
   protected void configure(HttpSecurity http) throws Exception {
      http.authorizeRequests()
            .requestMatchers().permitAll()

            // All other requests are authenticated
            .anyRequest().authenticated()

            .and()

            .addFilterAfter(jwtAuthenticationFilter, UsernamePasswordAuthenticationFilter.class)

            .formLogin()
            .loginPage("/security/login");
   }

我认为这个设置会起作用,因为我正在尝试访问与请求的网页相同的服务器和端口相关的安全/登录路径。网页位于http://localhost:8080/web/page,登录页面位于http://localhost:8080/security/login,相同的服务器和端口,但路径不同。但是我的设置中的某些东西导致安全登录页面的实际服务器和端口被网关服务器和端口替换,我需要它停止这样做。

有任何想法吗?

标签: spring-bootspring-securitynetflix-zuul

解决方案


好的,我想我有它。我更新了我的项目以反映变化。问题是安全配置(正如我认为上面的詹姆斯所指的那样)在 web 模块中。我将它移到网关,以便在转发到登录页面时,端口和服务器保持不变。我仍然可以在我选择的任何模块中转发到登录页面,但必须将安全配置应用于网关本身。

我的示例项目的最新版本现在可以按预期工作:github.com/scottellis64/micro


推荐阅读