springsecurity用户详细信息服务rest客户端

xxb16uws  于 2021-09-30  发布在  Java
关注(0)|答案(1)|浏览(293)

我正在使用 SpringBoot 2.4.7 我正在尝试实现jdbc身份验证。问题是我无法通过http到达后端。我已经阅读了以下配置:

@Override
protected void configure(final HttpSecurity http) throws Exception {
    http.authorizeRequests()
        .antMatchers("/login")
        .permitAll()
        .and()
        .formLogin()
        ....

我可以在上下文应用程序地址访问默认登录页面。但是我想打个电话 POST 使用登录端点 usernamepassword 参数。
我该怎么做?

zd287kbt

zd287kbt1#

如果您试图通过rest端点接收用户凭据并手动验证用户,则可以通过以下方式执行:

@RestController
@RequestMapping("/login")
public class LoginController {
    private final AuthenticationManager authenticationManager;

    // constructor injecting authenticationManager

    @PostMapping
    public void login(@RequestBody UserCredentials credentials) {
        UsernamePasswordAuthenticationToken token
                = new UsernamePasswordAuthenticationToken(credentials.getUsername(), credentials.getPassword());

        Authentication auth = this.authenticationManager.authenticate(token);

        if (auth != null) {
            SecurityContext context = SecurityContextHolder.createEmptyContext();
            context.setAuthentication(auth);
            SecurityContextHolder.setContext(context);
        }

        throw new SomeException();
    }
}

这条路 Filters 将为您处理其余的身份验证步骤。可以研究spring安全文档以了解更多详细信息。
如果要使用默认登录页面生成的端点,可以按照文档中的步骤提出自己的请求:
表单应该执行post to/登录
表单需要包含一个csrf令牌,该令牌由thymeleaf自动包含。
表单应在名为username的参数中指定用户名
表单应在名为password的参数中指定密码
如果发现http参数错误,则表示用户未能提供有效的用户名/密码
如果找到http参数logout,则表示用户已成功注销

相关问题