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

Spring安全。任何请求都需要授权,特殊的POST请求需要管理员角色。怎么做?

曹育
2023-03-14

我想用Spring保护我的HATEOAS REST API构建。所有请求都需要授权,将请求发布到“/rooms”需要管理员角色。我的WebSecurityConfigureAdapter实现代码现在看起来像这样:

@Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                // Todo: Make sure that all resources need to be authenticated and POST rooms needs ADMIN role
                    .anyRequest().authenticated()
                    .antMatchers(HttpMethod.POST, "/api/v1/rooms").hasRole("ADMIN")
                .and()
                .httpBasic()
                .and()
                .csrf().disable();
    }

现在,如果我把“anyRequest().authenticated()”行放在“antMatchers…”之前,所有资源都只需要身份验证行,但所需的“管理员”角色不起作用或无法应用,反之亦然。

我怎样才能让这两件事同时进行呢?

谢谢你弗洛里安

共有2个答案

邵博艺
2023-03-14

下面的代码为我做到了:

@Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                    .antMatchers(HttpMethod.POST, "/api/v1/rooms").hasRole("ADMIN")
                    .anyRequest().authenticated()
                .and()
                .httpBasic()
                .and()
                .csrf().disable();
    }
}

谢谢你的回复。

朱睿
2023-03-14

Securityconfiguration.java

@Override
    protected void configure(HttpSecurity http) throws Exception {

        http.httpBasic().and().authorizeRequests().antMatchers("/public/**")
                .permitAll().antMatchers("/sa/**").hasAuthority("sa")
                .antMatchers("/admin/**").hasAuthority("admin")
                .and().logout()
                .logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
                .logoutSuccessUrl("/index.html").and()
                .addFilterAfter(new CsrfHeaderFilter(), CsrfFilter.class)
                .csrf().disable();    
    }

在rest控制器中使用。。

@RequestMapping("/admin/adduser")
    public void addUser(@RequestBody User user) {
        authService.addUser(user);
    }
 类似资料:
  • > 。 有些帖子说x509是用来生成自签名证书的。 但使用时出错: 请告诉我哪条路是正确的。如果是正确的,如何解决错误?非常感激!

  • 我有一个使用Spring Cloud OpenFeign的多服务应用程序。现在我必须在应用程序中使用zipkin。我记得,当我有一个没有伪装的应用程序时,我只是添加了Sleuth和Zipkin启动器依赖项,并在端口9411上运行Zipkin服务器。在那之后,齐普金工作得很好。。但现在,当我在我的应用程序中尝试使用Faign时,我得到错误500“需要原始请求”。我猜当侦探添加跟踪信息时,Faign在

  • 我在spring安全中的注册权限有问题 我不能注册方法 我试图设置对每条路径的访问,但没有帮助 控制器 安全配置 用户服务 用户模型 错误 java.lang.IllegalArgumentException:在org.springframework.util.assert.hastext(assert.java:284)~[spring-core-5.2.4.release.jar:5.2.4.

  • 我将只同意graph API中的特定管理权限。 但它请求所有租户权限。 当前逻辑为 如何请求对特定权限的同意?

  • 以下是发送给ADFS的SAML请求 压缩并转换为Base64String后,它被重定向到ADFS。带有SAML请求的URL如下所示 https://XXXX.YYYY.ZZZZ/adfs/ls/?SAMLRequest=hZHNbsIwEIRfJfLdsfODAhZEouVQJKpGJO2hl8okS7Ga2KnXoTx+A0KLuncjrflmz3Bnkju6fcvohfqwjta561xc/I

  • 以前一直用 vue3,现在在学习用 nuxt3,遇到一个传 token 的问题,研究半天没明白,nuxt3 这个 token 要怎么请求的时候传过去? 我先讲下我的 vue3 是怎么用的 用户第一次访问网站,检查 localStorage.getItem('token') 是否为空,如果为空或token过时,直接跳到登录页面,登录后获取 token 存放到 localStorage.setItem