【问题标题】:Angular front end to talk to Spring backend security [closed]与 Spring 后端安全性对话的 Angular 前端 [关闭]
【发布时间】:2020-06-12 15:14:51
【问题描述】:

我有一个 Angular 前端,它无法在我的后端服务器中获取使用 spring 进行身份验证的用户。我确认我的后端身份验证在本地工作,但在尝试调用我的 getCurrentUser 方法时我从 Angular 收到一个 CORS 错误(仅返回当前经过身份验证的用户)。如何解决此 CORS 错误?

我知道我必须在 spring 中配置 CORS,因为它充当我的后端服务器,而我的 Angular 前端需要与它对话才能从我的 api 方法中获取结果。

【问题讨论】:

  • 这能回答你的问题吗? How to add CORS request in header in Angular 5
  • 您是否尝试过配置 Spring 以正确处理 CORS?
  • 我相信 cors 配置应该发生在 Spring 而不是 Angular 中。尝试使用 Angular 访问我的后端服务器时,我收到 Cors 错误

标签: java angular spring security


【解决方案1】:

您是否尝试在控制器中添加@CrossOrigin(origins = "")?

【讨论】:

  • 我会在哪里添加这个?
  • 您可以在声明控制器的地方添加它,与添加@Controller 注释的地方相同。
【解决方案2】:

对于使用 spring 安全性处理 Cors,您应该在您的类中有一个 CorsConfigurationSource 扩展 WebSecurityConfigurerAdapter,如下所示。

    @Bean
    public CorsConfigurationSource corsConfigurationSource() {
        final CorsConfiguration configuration = new CorsConfiguration();
        configuration.applyPermitDefaultValues();
        final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", configuration);
        return source;
    }

至于让 Angular 识别经过身份验证的用户,您很可能希望在 Spring 中有一个控制器来返回登录状态。请记住在此方法上也启用 cors。

  @CrossOrigin
  @RequestMapping(value = "/login", method = RequestMethod.GET)
  public String login(Model model, String error, String logout) {
    if (error != null) {
      model.addAttribute("error", "Your username and password is invalid.");
    }

    if (logout != null) {
      model.addAttribute("message", "You have been logged out successfully.");
    }

    return "login";
  }

希望这会有所帮助。

【讨论】:

  • Cors 配置正是我想要的!我确实已经有一个用于弹簧安全的控制器,但我喜欢你展示的那个简单。谢谢。
猜你喜欢
  • 1970-01-01
  • 2012-01-09
  • 1970-01-01
  • 1970-01-01
  • 2021-05-11
  • 2012-09-13
  • 2014-08-07
  • 2011-11-29
  • 1970-01-01
相关资源
最近更新 更多