我正在配置一个有2个安全入口点的Sping Boot 应用程序,我配置了第一个入口点,它是一个基本身份验证,以匹配蚂蚁模式/synchro/task/**
。但当我测试它时,当我尝试仅使用/synchro/task
的URL时,它工作正常,但当我获得/synchro/task/1
等任务ID时,它不工作。
我的代码如下:
http
.csrf().disable()
.antMatcher("/synchro/task/**")
.authorizeRequests()
.anyRequest().hasRole("APP")
.and()
.httpBasic();
我还尝试使用requestMatchers
和两个antmatchers
来匹配/synchro/task/*
和/synchro/task/**
,但它只需要/synchro/task
,但在有id的情况下不需要。
有趣的事实是,当我设置如下:
http
.csrf().disable()
.antMatcher("/synchro/task/*")
.authorizeRequests()
.anyRequest().hasRole("APP")
.and()
.httpBasic();
例如,它只适用于/synchro/task/1
,但不适用于/synchro/task
。
因此,即使我真的认为antMatcher("/synchro/task/**")
将覆盖有id和没有id的两个路径,我如何将两者结合起来呢?
下面是我的控制器类:
@RestController
@RequestMapping(value = "/synchro")
public class SynchroResource extends GenericResource {
@Autowired
private IndexationService indexationService;
@Autowired
private SynchroService synchroService;
@RequestMapping(value = "/task", method = RequestMethod.GET)
public IndexationTaskResponse getNextTask() {
return this.indexationService.getNextTask();
}
@RequestMapping(value = "/task/{taskId}", method = RequestMethod.PUT)
public void updateTaskState(@PathVariable long taskId,
@RequestBody(required = false) String errorMessage) {
this.indexationService.updateTaskState(taskId, errorMessage);
}
}
2条答案
按热度按时间azpvetkf1#
请尝试以下代码:
g2ieeal72#
/synchro/task/**
仅与路径/synchro/task/
中的目录匹配,请参见AntPathMatcher
:Map使用以下规则匹配URL:
***与路径中的零个或多个目录匹配
但是
/synchro/task
不是路径/synchro/task/
中的目录,因此需要添加父目录/synchro/task
。您修改的代码: