首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >弹簧安全400

弹簧安全400
EN

Stack Overflow用户
提问于 2022-09-05 05:11:20
回答 1查看 45关注 0票数 0

如果您在登录时指定了不正确的数据,邮递员会给出消息“无效数据”,但是状态是"200 ok",我需要接收400状态。

代码语言:javascript
复制
@PostMapping("/login")
    public Map<String, Object> performLogin(@RequestBody PersonDTO personDTO, BindingResult bindingResult) throws BadCredentialsException{

        UsernamePasswordAuthenticationToken authInputToken =
                new UsernamePasswordAuthenticationToken(personDTO.getUsername(),
                        personDTO.getPassword());


        try {
            authenticationManager.authenticate(authInputToken);
        }
        catch (BadCredentialsException e) {
            return Map.of("message", "Неверные данные!");
        }

        String token = jwtUtil.generateToken(personDTO.getUsername());
        Optional<Person> person = peopleRepository.findByUsername(personDTO.getUsername());
EN

回答 1

Stack Overflow用户

发布于 2022-09-05 07:47:03

您可以声明全局异常处理程序,这样就不需要在控制器中捕获异常。

代码语言:javascript
复制
@ControllerAdvice
public class ErrorHandler {

    @ExceptionHandler(BadCredentialsException.class)
    public ResponseEntity<Map<String, Object>> badCredentialsHandler() {
        return ResponseEntity.badRequest().body(Map.of("message", "invalid credentials"));
    }
}

请记住,异常是非常普遍的,因此根据您的用例,您可能仍然需要捕获并重新抛出它,并将其包装在一些自定义异常中,然后处理自定义异常。

如果异常包含构建响应所需的信息,或者只是为了日志记录目的,则可以在处理程序方法中自动加载它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73604719

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档