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

Spring Security CORS在传递授权标头时出现问题[重复]

夹谷奇
2023-03-14

CORS策略已阻止从源“HTTP://localhost:8080”访问“HTTP://localhost:8081/v1/api/group/find/shib”得XMLHttpRequest:对预飞行请求得响应未通过访问控制检查:它不具有HTTP ok状态.

让我告诉你我做了什么来解决这件事。在angular HTTP请求中,我添加了以下头。

'Authorization' : 'Bearer '+this.token(),
'Access-Control-Allow-Methods' : '*',
'Access-Control-Allow-Origin' : "*",
'Access-Control-Allow-Headers' : 'Content-Type, Accept, X-Requested-With, remember-me, Authorization',
"Access-Control-Expose-Headers" : "Content-Type, Accept, X-Requested-With, remember-me, Authorization"

在spring boot中,我在添加了CORSFilter的Rest控制器上添加了@crossorigin/@crossorigin(“http:localhost:8080”)

@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {


    HttpServletRequest request = (HttpServletRequest) req;
    HttpServletResponse response = (HttpServletResponse) res;

    response.setHeader("Access-Control-Allow-Origin", "*");
    response.setHeader("Access-Control-Allow-Credentials", "true");
    response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
    response.setHeader("Access-Control-Max-Age", "3600");
    response.setHeader("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With, remember-me, Authorization");
    chain.doFilter(req, res);
}

经过所有的尝试和错误,我仍然得到同样的错误

共有1个答案

邵兴怀
2023-03-14

我阅读和理解了更多关于飞行前的请求和它的工作方式。我的一个快速想法是让OPTIONS request通过,因此我在WebSecurityConfigurerAdapter中添加了以下代码。

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
    .csrf().disable()
    .authorizeRequests()
    .antMatchers(HttpMethod.OPTIONS,"*").permitAll()//allow CORS option calls
    .antMatchers("/oauth/token").permitAll()
    .anyRequest().authenticated()
    .and()
    .formLogin()
    .and()
    .httpBasic();
}

并且除了授权之外,Angular ui没有额外的头。

我希望这对每个人都管用。我现在知道选择是脆弱的,但这只是一个快速的工作。请建议我如果你有一个更好的,更安全的解决方案。

 类似资料:
  • 我与React、Express、MongoDB的应用程序。 我想为Axios post请求传递带有标头的身份验证令牌。 但是,当我试图通过它,得到403错误(禁止)。 本地存储 我正在从本地存储中检索所有身份验证数据 Axios。邮递 我在这里调用axios post请求 API头和响应 这是我从浏览器中得到的响应 我的邮递员电话打得很好

  • 首先让我指出到底发生了什么。 > 能够从本地工作站进行成功的快照和发布构建。工件也成功上传到nexus。 我们有许多团队/开发人员使用的中央hudson安装。从Hudson成功运行快照构建 针对特定项目的发布构建从Hudson失败,并出现以下错误: 〔信息〕上传:https://nlliprdcn28098.nl.eu.abnamro.com:8443/nexus/content/reposito

  • 我使用springfox 2.9.2我有这样的api: 女巫来自身份验证服务器。我尝试在swagger中首次调用此服务器,并将其传递给像上面这样的控制器请求。所以我做 在Swagger ui上,授权调用成功返回了令牌,但它没有将令牌添加到请求头中。它会产生 如果我像这样设置令牌:

  • 在spotify api的授权步骤中,我完全迷失了方向 我需要提出一个类似于邮递员的请求: 具有包含client_id和client_secret(api 凭据)的标头 这些是根据授权流完成的(在他们的授权指南中的第四个-(隐式授权流(客户凭证流))本页最后一个:https://developer.spotify.com/documentation/general/guides/authoriza

  • AuthorizationServer: 该问题可能是由于WebSecurity类的某些配置不正确造成的。但是,我尝试了多种配置,但都没有运气。

  • 在我的一个REST服务中,我使用Spring Security性来验证在头中传递的令牌。然而,spring无法找到“authorization”标头,尽管它在那里。当在测试中测试时,甚至在本地测试时,这都不是一个问题,但当我们部署到PROD时,我们就会遇到这个问题。 作为替代/变通方法,我删除了Spring Security性,而是尝试在实际endpoint中验证我的令牌,然后继续处理请求的其余部