从弹簧启动生成jwt令牌以进行角度应用

问题描述 投票:0回答:1

我的问题是关于基于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个回答
0
投票

如果你按照下面的说法做得更好。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.