原文: https://javatutorial.net/how-to-handle-login-authentication-in-spring

在本文中,您将学习如何使用 Spring Security 实现登录身份验证功能。
如何在 Spring 中处理登录身份验证 - 图1
登录页面表示一种表单,要求用户名和密码之类的详细信息。 可以在 Angular 中完成相同的登录页面,并且身份验证过程本身将由 Spring Security 执行。

从服务器中获取一个令牌,然后将其发送回客户端。 此外,服务器希望相同的令牌用于依维签名请求及以后

工作流程

如上所述,当用户提交登录表单时,他必须输入用户名和密码(最常见)。 当他提交表单时,会有一个 API 调用,该 API 调用来自 Spring Web 。 该路径可能类似于/login,并通过 HTTP POST 方法调用。

您可以在前端(例如 Angular)中编写身份验证逻辑。 但是在本文中,我们将在服务器端(也称为 Spring)上编写它。 我们可以通过两种方法来实现我们的目标。 一种是通过编写控制器类,另一种是通过扩展UsernamePasswordAuthenticationFilter。我们将使用第一种方法 - 通过创建login方法来验证用户身份并返回truefalse

ControllerClass.java

  1. // the POST method
  2. @PostMapping(value="/login")
  3. public boolean login(@RequsetBody Employee reqEmployee, HttpServletRequest request) {
  4. Authentication auth = null;
  5. UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(reqEmployee.getUsername(), reqEmployee.getPassword());
  6. try {
  7. auth = authenticationProvider.authenticate(token);
  8. SecurityContextHolder.getContext().setAuthentication(auth);
  9. Employee employee = (Employee) authentication.getPrincipal();
  10. employee.setPassword(null);
  11. return true;
  12. }
  13. catch (BadCredentialsException exception) {
  14. // you can also log the exception message, for example using Logger
  15. return false;
  16. }
  17. }

这是一种简单的 POST 方法,根据用户是否已成功通过身份验证,它会返回truefalse

细分

首先,我们创建身份验证以充当身份验证实例,首先我们将其设为null。 然后,我们为用户输入的用户名和密码生成一个身份验证令牌。 然后我们有一个try{} catch(){}块,其中try根据令牌对用户进行身份验证,如果一切成功,则返回true。 另一方面,如果未通过身份验证并返回false,则将运行catch

同样,此方法应在Controller类中。