【发布时间】:2017-09-05 15:29:46
【问题描述】:
我有一个端点,我想在不需要基本身份验证的情况下允许访问。如下端点:
@ApiOperation(value = "Get a image by id", response = ResponseEntity.class)
@RequestMapping(value = "/{id}", method = RequestMethod.GET) //sets the mapping url and the HTTP method
public void getById(@PathVariable("id") Long id, HttpServletResponse response) throws NotFoundException {
ImageView view;
try {
view = manager.get(id);
ByteArrayInputStream in = new ByteArrayInputStream(view.getImageData());
response.setContentType(MediaType.parseMediaType(view.getImageMimeType()).toString());
IOUtils.copy(in, response.getOutputStream());
} catch (NotFoundException e) {
response.setStatus(204); //HttpStatus.NO_CONTENT);
return;
} catch (IOException ioe) {
response.setStatus(400);//HttpState.BAD_REQUEST
return;
}
}
我已经阅读了其他几篇关于有类似问题的人的堆栈溢出帖子,并看到覆盖安全配置有效。以下是我通过阅读几篇文章设计的解决方案。但是,我仍然遇到问题并在请求没有身份验证的资源时收到 401。除此之外,完整的路线将是“{host}/service/v1/images/{id}”
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable() //disable csrf being needed for header in a request
.authorizeRequests() //authorize the following request based on following set rules
.antMatchers(HttpMethod.OPTIONS, "**").permitAll() //allow any user to access this when OPTIONS
.antMatchers(HttpMethod.GET,"**/service/v1/images/**").permitAll() //allows GETS for given route permitted to all users
.anyRequest().authenticated() //catch all: this implies that if nothing matches the above two patterns, then require authentication
.and().httpBasic(); //utilize http basic for authentication
}
任何关于我可能做错了什么以及如何纠正这个问题的见解将不胜感激。
【问题讨论】:
标签: java rest api spring-security authorization