Java 我如何使用/“图像”;具有安全性的Spring引导Rest控制器中的路径?
我有一个SpringBootREST服务(SpringBootStarter父级:1.3.2),它使用RestController定义的方法公开一些端点。我也在使用Spring安全性。在我尝试定义映射到“/images”的控制器方法之前,一切都正常。当我尝试访问此api路径时,我得到以下错误。通过调试,我可以看到正在映射我的控制器处理程序,但未调用预授权筛选器(其他映射会正确调用它)。我已经设置了以下属性,但没有更改。如何修复此问题,以便使用“/图像” 错误:Java 我如何使用/“图像”;具有安全性的Spring引导Rest控制器中的路径?,java,spring,rest,Java,Spring,Rest,我有一个SpringBootREST服务(SpringBootStarter父级:1.3.2),它使用RestController定义的方法公开一些端点。我也在使用Spring安全性。在我尝试定义映射到“/images”的控制器方法之前,一切都正常。当我尝试访问此api路径时,我得到以下错误。通过调试,我可以看到正在映射我的控制器处理程序,但未调用预授权筛选器(其他映射会正确调用它)。我已经设置了以下属性,但没有更改。如何修复此问题,以便使用“/图像” 错误: "exception":
"exception": "org.springframework.security.authentication.AuthenticationCredentialsNotFoundException",
"message": "An Authentication object was not found in the SecurityContext",
代码:
如果我将映射更改为以下内容,那么它就可以正常工作
@RequestMapping(value = { "/image/{imageId}" }, method = RequestMethod.GET)
@ResponseBody
public Image getImage(@PathVariable UUID imageId) {
return imageDataService.getImage(imageId);
}
我认为静态资源的配置有一个默认条目,告诉Spring security忽略preauth过滤器的“/images”路径。我正在四处调试,试图找出可能被覆盖的位置。SpringBoot默认情况下使用一些路径 私有静态最终字符串[]类路径\资源\位置={ “类路径:/META-INF/resources/”,“类路径:/resources/”, “类路径:/static/”,“类路径:/public/”} 其中一个路径是/images 在使用SpringSecurity时,您还有以下限制 web应用程序中现成的基本功能包括: 具有内存存储和单个用户的AuthenticationManager bean (有关用户的属性,请参见SecurityProperties.User)。忽略 (不安全)公共静态资源位置的路径(/css/, /js/、/images/、/webjars/和**/favicon.ico)。HTTP基本 所有其他端点的安全性。安全事件发布到 Spring的ApplicationEventPublisher(成功和失败 身份验证和访问被拒绝)
Spring Security提供的常见低级功能(HST、XSS、CSRF、缓存)在默认情况下处于启用状态。SpringBoot在默认情况下使用一些路径 私有静态最终字符串[]类路径\资源\位置={ “类路径:/META-INF/resources/”,“类路径:/resources/”, “类路径:/static/”,“类路径:/public/”} 其中一个路径是/images 在使用SpringSecurity时,您还有以下限制 web应用程序中现成的基本功能包括: 具有内存存储和单个用户的AuthenticationManager bean (有关用户的属性,请参见SecurityProperties.User)。忽略 (不安全)公共静态资源位置的路径(/css/, /js/、/images/、/webjars/和**/favicon.ico)。HTTP基本 所有其他端点的安全性。安全事件发布到 Spring的ApplicationEventPublisher(成功和失败 身份验证和访问被拒绝)
Spring Security提供的常见低级功能(HST、XSS、CSRF、缓存)在默认情况下处于启用状态。您需要确保每个请求都具有安全性。这可以使用以下
安全配置来完成:
@Configuration
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().anyRequest().authenticated();
}
}
您需要确保每个请求都具有安全性。这可以使用以下安全配置来完成:
@Configuration
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().anyRequest().authenticated();
}
}
您能告诉我们您使用的是哪个@RequestMapping
(类级和/或方法级)吗?您尝试访问的URL是哪个?根据Spring安全配置,是什么使/images
路径不同于API的任何其他路径?请参阅我的代码部分。我正在尝试使用@RequestMapping(value={/images/{imageId}},method=RequestMethod.GET)。您能告诉我们您(在类级别和/或方法级别)正在使用哪个@RequestMapping
?您尝试访问的URL是哪个?根据Spring安全配置,是什么使/images
路径不同于API的任何其他路径?请参阅我的代码部分。我正在尝试使用@RequestMapping(value={“/images/{imageId}},method=RequestMethod.GET)。我看到了这些文档,但很难相信在创建rest服务时没有一种方法可以轻松地将其关闭。您可以覆盖配置查看我看到的这些文档的这个项目,但很难相信在创建rest服务时没有一种方法可以轻松地将其关闭。您可以覆盖此项目中的配置
@Configuration
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().anyRequest().authenticated();
}
}