gpt4 book ai didi

java - Spring-Boot 向 REST 服务添加基本的 http 安全性

转载 作者:行者123 更新时间:2023-11-30 07:04:43 25 4
gpt4 key购买 nike

我的任务是构建一个 REST 服务,该服务需要对一些操作进行身份验证,同时允许匿名用户对其他操作进行身份验证。

例如:

| Path         | Requires authentication |
| /add | YES |
| /{name} | NO |
| /report/{id} | YES |

但是,我在设置 spring-security 以这种方式工作时遇到问题。

如果我重写 WebSecurityConfigurerAdapter configure 函数,如下所示:

@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
.and()
.httpBasic()
.and()
.authorizeRequests()
//.antMatchers(HttpMethod.GET, "/{name}").permitAll() // I can't really specify a dynamic url here, can i?
.anyRequest().authenticated();
}

通过此配置,我调用的任何操作都将首先显示标准浏览器基本身份验证弹出表单。这就是我想要的,但我不希望在动态 url /{name} 操作上使用它。

因此,我尝试删除 .anyRequest().authenticated() 并使用 @PreAuthorize@PostAuthorize 注释激活@EnableGlobalMethodSecurity(proxyTargetClass = true, prePostEnabled = true)并向 Controller 操作添加注释,如下所示:

| Path         | Annotation                         |
| /add | @PreAuthorize("isAuthenticated()") |
| /{name} | @PreAuthorize("permitAll()") |
| /report/{id} | @PreAuthorize("isAuthenticated()") |

通过此操作,/{name} 操作可以按预期允许匿名用户,但是现在 /add/report/{id} 操作只需返回状态为 500 的“访问被拒绝”,而不是强制进行基本身份验证。

如何在选定的 Controller 方法上强制进行基本身份验证,同时允许其他方法进行匿名访问?

最佳答案

为每个 url 指定配置应该可以解决问题:

@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
.and()
.httpBasic()
.and()
.authorizeRequests()
.antMatchers(HttpMethod.GET, "/*").permitAll()
.antMatchers(HttpMethod.GET, "/add").authenticated()
.antMatchers(HttpMethod.GET, "/report/*").authenticated()
.anyRequest().authenticated();
}

关于java - Spring-Boot 向 REST 服务添加基本的 http 安全性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40342601/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com