UsernamePasswordAuthenticationFilter与自己的端点

时间:2020-08-30 21:17:56

标签: java spring spring-boot spring-security

假设我要处理一个api端点/login,该端点将获取 username&password 正文并在标头中返回JWT令牌。

UsernamePasswordAuthenticationFilter

一起使用有什么区别
@Override
public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException {
    try {
        LoginDto loginDto = new ObjectMapper().readValue(request.getInputStream(), LoginDto.class);
        return getAuthenticationManager().authenticate(
            new UsernamePasswordAuthenticationToken(
                loginDto.getUsername(),
                loginDto.getPassword(),
                Collections.emptyList()
            )
        );
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
}

是否提供了自己的@PostMapping("/login"),而我却称自己为UserService? 在单个端点上调用过滤器的原因/优势是什么?

1 个答案:

答案 0 :(得分:1)

UsernamePasswordAuthenticationFilter的主要优点是与自定义登录请求相比,与Spring的集成更好。使用它,框架为您提供了不错的方法:

  • 管理以下事件:成功登录后,登录失败后和成功注销后。

  • 该过滤器的结果是一个Spring Authentication对象,因此,您可以根据需要在“其余登录请求”中使用它。

有关如何使用它的一些示例(在这两个示例中,您都将看到应如何配置UserService):

UsernamePasswordAuthenticationFilter

UsernamePasswordAuthenticationFilter + JWT

但是,管理自己的登录端点也是一种广泛使用的选项。如果您确实不需要/使用上述优点,则可以创建自己的端点来管理该请求。