当前位置: 首页 > 知识库问答 >
问题:

Spring的CORS问题-安全性

计阳泽
2023-03-14

我正在用Spring-boot(在http://localhost:8080上)和angular(在http://localhost:80上)构建一个应用程序。

@Configuration
public class WebMvcConfiguration extends WebMvcConfigurerAdapter {   

  @Override
  public void addCorsMappings(CorsRegistry registry) {
    registry.addMapping("/**")
        .allowedOrigins("http://localhost")
        .allowCredentials(true)
    ;
  }
}
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

  @Override
  public void configure(HttpSecurity http) throws Exception {
    http
      .formLogin()
      .successHandler(successHandler())
      .failureHandler(failureHandler())
    //[...]
  }

  private AuthenticationSuccessHandler successHandler() {
    return (httpServletRequest, httpServletResponse, authentication) ->
      httpServletResponse.setStatus(HttpServletResponse.SC_OK);
  }

  private AuthenticationFailureHandler failureHandler() {
    return (httpServletRequest, httpServletResponse, e) -> {
       httpServletResponse.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
    };
}
$http.post('http://localhost:8080/api/login', $.param({'username': username, 'password': password}),
            {headers: {'content-type': 'application/x-www-form-urlencoded'}}
).then(function() {})
.catch(function(error) {};

如果我输入了正确的密码,http响应代码(我可以在Chrome控制台中看到)是200,但我仍然到达catch块(带有error.status=-1),并且我可以在控制台中看到以下错误消息:

XMLHttpRequest无法加载http://localhost:8080/api/login。请求的资源上没有“access-control-allow-origin”标头。因此,不允许访问源“http://localhost”。

如果输入错误的密码,我还会到达catch块,并显示以下错误消息:

共有1个答案

蒲德曜
2023-03-14

根据我的经验,您需要在CORS中包含端口号,浏览器的错误消息有点误导。

您可以通过检查网络并检查请求头的origin字段来验证这一点。响应头的access-control-allow-origin中的值必须与该值完全匹配,包括协议和端口。

 类似资料:
  • 问题陈述:我有一些Rest的API,它们使用Spring安全性进行CSRF保护。此外,这些API将通过Angular WEB UI从不同的Origin/domain访问。我不需要Spring Authentication,因为身份验证由Siteminder处理。 方法:我遵循了Dave Syer提供的CSRF保护的链接:登录页面:Angular JS和Spring Security Part II

  • 问题内容: 我有一个基于@RestController和AngularJS的简单项目。我可以将Angular的GET请求发送到@RestController,但无法发送POST请求。我在浏览器控制台中出错: XMLHttpRequest无法加载http:// localhost:8080 / add 。Access-Control-Allow- Headers不允许请求标头字段Content-Ty

  • “已被CORS策略阻止:对飞行前请求的响应未通过访问控制检查:请求的资源上不存在‘访问控制允许来源’标头。” 当api被角度部分击中时获得此消息,但当邮递员击中endpoint时获得正确响应。

  • 我使用的是Spring Boot版本2.0.2Release。下面是我的安全配置 加载http://localhost:8080/myurl失败:对预飞行请求的响应未通过访问控制检查:请求的资源上没有“access-control-allow-origin”标头。因此,不允许访问源“http://localhost:4200”。响应的HTTP状态代码为403。

  • 我在spring cloud gateway应用程序中设置CORS配置时遇到了问题。我已经将以下配置设置为允许所有内容中的所有内容: 然而,当我调用endpoint到网关时,我会得到: null 以下是api gateway应用程序在调试时设置的日志(此处为完整日志):

  • 如何在Spring Security标签(即令牌url)中启用CORS。我使用的是spring security 3.1和spring mvc 4.3.12。我已成功生成令牌以保护API,但无法在令牌url中启用CORS。我使用了以下代码来生成访问令牌 spring-security.xml 这就是我启用CORS但不起作用的方式 dispatcher servlet。xml 这就是我得到的错误 登