【问题标题】:generate jwt token from spring boot for an angular application从 Spring Boot 为 Angular 应用程序生成 jwt 令牌
【发布时间】:2019-09-04 13:59:06
【问题描述】:

我的问题是关于基于 jwt 令牌的身份验证,在后端使用 spring boot,在前端使用 angular,为此,我在 spring 安全配置中开发了两个过滤器,一个用于发布令牌,另一个用于验证它们,在过滤器内发出令牌:对“/login”端点的请求将包含用户详细信息,如密码和用户名,因此过滤器可以验证用户身份并作为回报发出令牌,这是我的问题,我看不到任何其他方式让身份验证操作,直到我们到达我必须制作特定端点的控制器。

@Override
public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response)
            throws AuthenticationException {

try {

~~// 1. Get credentials from request
~~UserCredentials creds = new ~~ObjectMapper().readValue(request.getInputStream(), ~~UserCredentials.class);

// 2. Create auth object (contains credentials) which will be used by auth manager
~~UsernamePasswordAuthenticationToken authToken = new UsernamePasswordAuthenticationToken(creds.getUsername(),creds.getPassword(), Collections.emptyList());

// 3. Authentication manager authenticate the user, and use ~~UserDetialsServiceImpl::loadUserByUsername() method to load the user.
    return authManager.authenticate(authToken);

~~} catch (IOException e) {
~~~~~~throw new RuntimeException(e);
 }
}

我的朋友们,我希望你告诉我我已经做的事情是否好,以及如何在控制器内或直接在过滤器内执行该操作的最佳方式? 谢谢(请原谅我的英语)

预期结果:

@PostMapping("/login")
public void method(@RequestBody MyUser myUser){
// perform authentication and issue token for my front app
}

【问题讨论】:

    标签: java angular spring-boot login jwt


    【解决方案1】:

    最好按照下面的来做。

    1) 令牌问题 - 应该在过滤级别之后完成,我的意思是您应该在为该用户颁发令牌之前验证您的 HTTP 请求和数据(密码和用户 ID)所有内容,在过滤级别进行此验证是违反正确的设计模式。

    2)验证 - 您可以在过滤器级别本身进行验证。它还可以帮助您防止在每个控制器方法或额外注释中单独编写验证逻辑。

    【讨论】:

    • 谢谢@Rajkumar,但是如果一切都完成了,过滤器的任务是什么
    • Filter 只是验证请求是否将请求传递到下一个级别。在您的情况下,这实际上是登录后的场景。对于登录请求,你什么都不做过滤,一旦你验证登录请求后,使用你提供的 jwt 令牌,后续请求将来自客户端,你可以在过滤器本身中验证它们。
    • 谢谢你,RAJKUMAR .. 这对我很有帮助
    猜你喜欢
    • 2017-10-03
    • 2020-01-12
    • 2019-12-08
    • 2021-10-13
    • 2021-01-19
    • 2022-10-06
    • 2020-03-05
    • 1970-01-01
    • 2020-02-17
    相关资源
    最近更新 更多