我使用的是springboot2.0.5,它对springsecurity的依赖性低于5.0.8
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
出于测试目的,我从rest控制器抛出一个异常,如下所示。
@GetMapping("/greeting")
public Greeting greeting(@RequestParam(value = "name", defaultValue = "World") String name) {
throw new org.springframework.security.authentication.BadCredentialsException("yoyo");
}
config类就是这样的,
@Configuration
@EnableWebSecurity
public class BasicConfiguration extends WebSecurityConfigurerAdapter {
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/error");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable().authorizeRequests().antMatchers("/error").permitAll();
}
}
我在spring boot文档中添加了/error,
springboot2.0与springsecurity的默认值没有太大的偏离,因此springboot1.5中绕过springsecurity的一些端点现在默认是安全的。其中包括错误端点和指向静态资源(如/css/、/js/、/images/、/webjars/、/**/favicon.ico)的路径。如果您想打开这些,您需要显式地配置它。
在SpringBoot应用程序类中也添加以下内容
@SpringBootApplication(exclude = {SecurityAutoConfiguration.class })
当我到达剩下的终点时,
{
"timestamp": "2021-01-17T03:52:50.069+0000",
"status": 403,
"error": "Forbidden",
"message": "Access Denied",
"path": "/greeting"
}
但我希望401状态显示“信息”:“yoyo”如下所示,
{
"timestamp": 2021-01-17T03:52:50.069+0000,
"status": 401,
"error": "Unauthorized",
"message": "yoyo",
"path": "/greeting"
}
我需要做什么样的改变才能得到回应
2条答案
按热度按时间nimxete21#
添加
http.exceptionHandling().authenticationEntryPoint(..)
得到Unauthorized
而不是Forbidden
为了error
现场。定义一个返回
ex.getMessage()
而不是Access Denied
为了message
现场。输出:
csbfibhn2#
我猜您没有看到抛出的异常,因为“greeting”端点是安全的,Spring Security 自己处理它。
设置“/greeting”不安全,以便您可以访问它并获取自定义错误