如何解决UsernamePasswordAuthenticationFilter与自己的端点
假设我要处理一个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
?
在单个端点上调用过滤器的原因/优势是什么?
解决方法
UsernamePasswordAuthenticationFilter
的主要优点是与自定义登录请求相比,与Spring的集成更好。使用它,框架为您提供了不错的方法:
-
管理以下事件:成功登录后,登录失败后和成功注销后。
-
该过滤器的结果是一个Spring
Authentication
对象,因此,您可以根据需要在“其余登录请求”中使用它。
有关如何使用它的一些示例(在这两个示例中,您都将看到应如何配置UserService
):
UsernamePasswordAuthenticationFilter
UsernamePasswordAuthenticationFilter + JWT
但是,管理自己的登录端点也是一种广泛使用的选项。如果您确实不需要/使用上述优点,则可以创建自己的端点来管理该请求。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。