spring-boot - 用于匿名或经过身份验证的用户的 Spring Security Rest 控制器方法
问题描述
我有以下资源服务器配置:
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.mvcMatchers("/actuator/health").permitAll()
.mvcMatchers("/actuator/**", "/swagger-ui/**", "/v2/api-docs", "/togglz-console/**").hasRole("ADMIN")
.anyRequest().authenticated()
.and()
.oauth2ResourceServer().jwt().jwtAuthenticationConverter(jwtAuthenticationConverter());
}
和以下休息控制器:
@RestController
@RequestMapping("companies")
public class CompanyController {
@PostMapping
public CompanyDto create(@RequestBody CompanyDto companyDto, JwtAuthenticationToken jwtAuthenticationToken) {
...
return new CompanyDto(company);
}
@GetMapping
@PreAuthorize("isAnonymous() or isFullyAuthenticated()")
public List<CompanyDto> findAllCompanies(CompanyDto companyDto) {
...
return companyDtos;
}
}
这是我的 Feign 客户:
@FeignClient(value = "companyApiClient", url = "http://localhost:${local.server.port}/api/companies")
public interface CompanyApiClient {
@GetMapping
List<CompanyDto> findAllCompanies(CompanyDto companyDto);
}
我希望能够findAllCompanies
使用匿名或经过身份验证的用户进行访问,这就是我在@PreAuthorize("isAnonymous() or isFullyAuthenticated()")
那里添加注释的原因。但是在调用过程中
companyApiClient.findAllCompanies(new CompanyDto("Company1 name", "Company1 description"));
我仍然收到以下错误:
feign.FeignException$Unauthorized: [401] during [GET] to [http://localhost:53238/api/companies] [CompanyApiClient#findAllCompanies(CompanyDto)]: []
at feign.FeignException.clientErrorStatus(FeignException.java:197)
at feign.FeignException.errorStatus(FeignException.java:177)
at feign.FeignException.errorStatus(FeignException.java:169)
如何正确配置 findAllCompanies 控制器方法以同时授予匿名或经过身份验证的用户的访问权限?是否可以通过注释来实现?
解决方案
推荐阅读
- django - Django get_total_topup() 缺少 1 个必需的位置参数:“请求”
- vb.net - 用于存储子窗体计数的 VB.NET 模块级变量
- php - WP_List_Table 查询以按当前日期和时间比较元键
- ios - 如何使图像在 UIImageView 中移动
- ios - 快速创建基于数组值的 UI 组件
- php - 实体属性更改自定义逻辑的 RESTful 解决方案
- javascript - 打印两个给定字母之间的所有字符
- javascript - 如何防止 React Native 卡在 es6 Promise 上?
- c# - 有没有办法使用.net驱动程序忽略cassandra数据库中的实体列
- c++ - 需要帮助将整数与字符串进行比较