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

Spring security、OAUTH Cors、选项

须景辉
2023-03-14

我在一个应用程序中有一个带有Oauth身份验证和资源服务器的Spring启动应用程序。我的前端在一个单独的服务器上,来自一个单独的位置。我的前端应用程序似乎没有将预检操作进行到后端,后端总是以401响应。我的配置如下所示:

// ... annotations
public class OAuthConfig extends WebSecurityConfigurerAdapter {

    // ... authencication providers

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        // @formatter:off
        http
        .csrf().disable()
        .authorizeRequests()
            .antMatchers("/", "/*.html", "layout/**", "/js/**", "/css/**", "/images/**", "/font/**",
                    "/signup", "/register",
                    "/oauth/**")
            .permitAll()
            .and()
                .authorizeRequests()
                .antMatchers(HttpMethod.OPTIONS, "/oauth/**").permitAll()
            ;

        // @formatter:on
    }

    // ... beans
}

请注意,我还必须为静态内容添加例外,因为尽管有任何文档,它似乎无法以其他方式工作。

// ... annotations
public class MvcConfig extends WebMvcConfigurerAdapter {

// ... resource resolver, view resolver

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**");
    }

}

我试图更明确地指定,但也没有成功:

@Override
public void addCorsMappings(CorsRegistry registry) {
    registry.addMapping("/api/**").allowedMethods("GET","POST","OPTIONS","DELETE","UPDATE");
    registry.addMapping("/register");
    registry.addMapping("/signup");
    registry.addMapping("/oauth/**").allowedMethods("GET","POST","OPTIONS");
}
//... annotations
public class ResourceServerConfig extends ResourceServerConfigurerAdapter {

    // ... resource id config

    @Override
    public void configure(HttpSecurity http) throws Exception {
        //@formatter:off
        http
        .anonymous().disable()
            .requestMatchers()
            .antMatchers("/api/**")
        .and()
            .authorizeRequests()
            .antMatchers("/api/**").authenticated()
        .and()
            .exceptionHandling().accessDeniedHandler(new OAuth2AccessDeniedHandler());
        //@formatter:on
    }

}

此时,我无法确定是否遗漏了任何重要的配置,以通过身份验证endpoint(以及APIendpoint的其他部分)实现CORS

共有2个答案

瞿博易
2023-03-14

您还可以在服务器上配置CORS。这将适用于应用程序的所有API。或者在您的请求和响应中设置“Access Control Allow Origin to*”,以便您的api可以响应来自任何服务器的任何请求。

江展
2023-03-14

如果您遇到HTTP 401错误,对我来说,这并不意味着CORS配置就是问题所在。401应该意味着未经授权,因此问题可能更多地出现在您的安全配置中。如果是跨源问题,则会出现类似“请求的资源上不存在“Access Control Allow origin”标头”的错误。

事实上,我的一个应用程序在一个由于跨源问题而失败的请求上收到了一个HTTP 200(OK)。

如果您需要帮助,您应该提供有关401错误代码所在的请求/响应的详细信息。

我知道这不是一个真正的答案,但我还没有发表评论的声誉,所以我希望这会有所帮助。

 类似资料:
  • 主要内容:1.入门,2.设置用户名和密码1.入门 1.启动一个SpringBoot项目 2.导入SpringSecurity相关依赖 3.编写Controller TestController.java 用户是user 密码是刚刚的 2.设置用户名和密码 1.在配置文件中设置 2.在配置类中设置 3.自定义实现类 2.1 配置文件中设置 2.2 在配置类中设置 设置用户名为zZZ,密码为root 2.3 自定义实现类 配置类: 业务类:

  • 在WAR的情况下,它试图将请求转发到/error页面,并寻找它的处理程序方法(请参见底部的日志)。 最后我得到以下回应: 我该换什么才能得到401?

  • 1.导入jar包 web.xml spring-security.xml

  • 本文向大家介绍SpringSecurity 测试实战,包括了SpringSecurity 测试实战的使用技巧和注意事项,需要的朋友参考一下 引言 试题管理系统的安全模块使用Spring Security,代码从原华软仓库移植,在移植的过程中,发现原测试编写的不好,遂在新系统中对安全模块测试进行了重构。 Spring 测试 添加@SpringBootTest注解,意为这是一个基于SpringBoot

  • 我正在设置Angular Spring Security模块来登录和注册用户。当我注册一个用户时,一切都正常。注册后的最后一步是自动登录,但我遇到了以下错误: XMLHttpRequest无法加载超文本传输协议//localhost:8080/com-tesis/login.请求的资源上不存在“访问控制允许起源”标头。因此不允许访问起源“超文本传输协议//localhost:9000”。响应的HT

  • 我尝试创建另一个FilterChainProxy bean,在其链列表中包含上述两个过滤器,并将该bean作为自定义过滤器添加到之前的名称空间配置中,过滤器似乎可以工作,但我的JSF导航中断了,特别是在commandLink中(我认为使用此FilterChainProxy时AJAX调用失败) 有没有人可以就如何将这两个过滤器和可能的其他过滤器添加到Spring Security过滤器链提出任何想法

  • 问题内容: 我目前正在评估基于Java的安全框架,我是Spring 3.0用户,因此似乎似乎SpringSecurity是正确的选择,但是Spring安全性似乎受到过分复杂的困扰,它似乎并没有使安全性易于实现, Shiro似乎更加连贯,更容易理解。我正在寻找这两个框架之间的利弊清单。 问题答案: 我也同意Spring Security对我来说感觉太复杂了。当然,他们已经做了一些降低复杂性的事情,例

  • 我在这里有很多问题要解决。一直试图将上述3项技术集成到我们的WebApp中…我们要使用 null web.xml: 我的servlet-context.xml: My manager-context.xml: 编辑2 我认为主要的问题是SpringSecurity需要webapp上下文(ContextLoaderListener)才能工作,但web应用程序是在servlet上下文中运行的。控制器方