当前位置: 首页 > 知识库问答 >
问题:

Spring Boot:禁用状态异常代码的安全性

廖华翰
2023-03-14
@Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
    private final JwtFilter jwtFilter;

    @Autowired
    public SecurityConfiguration(JwtFilter jwtFilter) {
        this.jwtFilter = jwtFilter;
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable()
                .anonymous().and()
                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
                .authorizeRequests()
                .anyRequest().authenticated().and()
                .apply(new JwtConfigurerAdapter(jwtFilter)).and()
                .exceptionHandling().authenticationEntryPoint(new HttpStatusEntryPoint(HttpStatus.UNAUTHORIZED));
    }

    @Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring().antMatchers("/v2/api-docs");
        web.ignoring().antMatchers("/login");
    }
}
@ResponseStatus(value = HttpStatus.NOT_FOUND)
public class NotFound extends RuntimeException {
    public NotFound(String message) {
        super(message);
    }
}
@RestController
public class LoginController implements LoginService {
    @Override
    @GetMapping(value = "/login", produces = MediaType.APPLICATION_JSON_VALUE)
    public UserInfo loginUsingJson(String username, String password) {
        return findUser(username, password)).orElseThrow(() -> new NotFound("There does not exist any user by those credentials"));
    }
}

我猜这与HttpSecurity有关,在这里我必须添加一些异常或其他东西,以便返回异常代码。但是我在什么地方允许在HttpSecurity的授权中忽略异常处理呢?

共有1个答案

阴永逸
2023-03-14

我找到了答案,并愿意帮助处于同样处境的其他人。

我的问题是,当返回错误代码404 NotFound的rest异常时,Spring Boot会自动重定向到url“/error”。但这个url映射需要打开用于业务。所以我不得不忽略这个url的授权。

这里的解决方案是添加以下内容:

web.ignoring().antMatchers("/error");
@Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
    private final JwtFilter jwtFilter;

    @Autowired
    public SecurityConfiguration(JwtFilter jwtFilter) {
        this.jwtFilter = jwtFilter;
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable()
                .anonymous().and()
                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
                .authorizeRequests()
                .anyRequest().authenticated().and()
                .apply(new JwtConfigurerAdapter(jwtFilter)).and()
                .exceptionHandling().authenticationEntryPoint(new HttpStatusEntryPoint(HttpStatus.UNAUTHORIZED));
    }

    @Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring().antMatchers("/v2/api-docs");
        web.ignoring().antMatchers("/login");
        web.ignoring().antMatchers("/error");
    }
}
 类似资料:
  • 本文向大家介绍springboot全局异常处理代码实例,包括了springboot全局异常处理代码实例的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了springboot全局异常处理代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 前言: 开发中异常的处理必不可少,常用的就是 throw 和 try catch,这样一个项目到最

  • 我正在为一个Spring-Boot应用程序编写组件测试,以测试我的安全配置。因此,我正在运行测试,应该测试成功的响应以及“禁止”状态。我遇到的问题是,由于我的REST调用需要一个复杂的JSON,对于阻塞的调用,测试会失败,因为TestRestTemplate试图反序列化不存在的响应体。 我正在运行一个Spring-Boot应用程序,tests类的注释如下: 我试图测试一个应该返回用户列表的REST

  • FTP 1xx初步 肯定的初步答复,这些状态代码指示一项操作已经成功开始,但客户端希望在继续操作新命令前得到另一个答复。 110重新启动标记答复。 120服务已就绪,在nnn分钟后开始。 125数据连接已打开,正在开始传输。 150文件状态正常,准备打开数据连接。 2xx完成 肯定的完成答复,一项操作已经成功完成。客户端可以执行新命令。 200命令确定。 202未执行命令,站点上的命令过多。 21

  • HTTP 1xx消息 这一类型的状态码,代表请求已被接受,需要继续处理。这类响应是临时响应,只包含状态行和某些可选的响应头信息,并以空行结束。由于HTTP/1.0协议中没有定义任何1xx状态码,所以除非在某些试验条件下,服务器禁止向此类客户端发送1xx响应。 这些状态码代表的响应都是信息性的,标示客户应该采取的其他行动。 100-客户端应当继续发送请求 101-切换协议 102-处理将被继续执行

  • 代码- 即使db实例存在,它也会为某些调用抛出错误。错误详细信息- 你能告诉我我在这里缺了什么吗? 错误含义-