Java UsernamePasswordAuthenticationFilter与自己的端点

Java UsernamePasswordAuthenticationFilter与自己的端点,java,spring,spring-boot,spring-security,Java,Spring,Spring Boot,Spring Security,假设我想处理一个api端点/login,它获取用户名和密码主体,并在头中返回一个JWT令牌 使用UsernamePasswordAuthenticationFilter与 @覆盖 公共身份验证尝试身份验证(HttpServletRequest请求、HttpServletResponse响应)引发AuthenticationException{ 试一试{ LoginDto LoginDto=new ObjectMapper().readValue(request.getInputStream(),

假设我想处理一个api端点
/login
,它获取用户名和密码主体,并在头中返回一个JWT令牌

使用
UsernamePasswordAuthenticationFilter

@覆盖
公共身份验证尝试身份验证(HttpServletRequest请求、HttpServletResponse响应)引发AuthenticationException{
试一试{
LoginDto LoginDto=new ObjectMapper().readValue(request.getInputStream(),LoginDto.class);
返回getAuthenticationManager()。验证(
新用户名PasswordAuthenticationToken(
loginDto.getUsername(),
loginDto.getPassword(),
Collections.emptyList()
)
);
}捕获(IOE异常){
抛出新的运行时异常(e);
}
}
过度提供我自己的
@PostMapping(“/login”)
,在那里我自己调用
用户服务

在单个端点上调用筛选器的原因/优点是什么?

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

  • 管理事件,如:成功登录后、失败登录后和成功注销后

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

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

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