spring安全自定义登录函数

mum43rcc  于 2021-07-16  发布在  Java
关注(0)|答案(1)|浏览(351)

我正在开发vaadin/spring应用程序。对于登录,建议使用Spring Security 。在文档[1]之后,我设置了spring security。现在我正在使用 InMemoryUserDetailsManager 在应用程序中使用硬编码用户名/密码。

@Bean
@Override
public UserDetailsService userDetailsService() {
    UserDetails user =
            User.withUsername("user")
                    .password("{noop}pass")
                    .roles("USER")
                    .build();

    return new InMemoryUserDetailsManager(user);
}

一切都与此设置工作,但对于日志,我调用了一个外部函数,返回一个布尔值与提供的用户名/密码对和非内置管理器允许这一点。

canLogin(user,pass);

这又调用了一个外部服务。如何设置spring security以允许此操作?
[1] https://vaadin.com/learn/tutorials/modern-web-apps-with-spring-boot-and-vaadin/adding-a-login-screen-to-a-vaadin-app-with-spring-security

um6iljoc

um6iljoc1#

baeldung文章spring安全认证提供者有一个我认为适合您需要的示例。
只需创建自己的身份验证提供者,根据需要进行身份验证,然后在安全配置中注册它。

@Component
public class CustomAuthenticationProvider implements AuthenticationProvider {

    @Autowired
    private MyAuthenticationService myAuthenticationService;

    @Override
    public Authentication authenticate(Authentication authentication) 
      throws AuthenticationException {

        String name = authentication.getName();
        String password = authentication.getCredentials().toString();

        if (myAuthenticationService.canLogin(name, password)) {
            return new UsernamePasswordAuthenticationToken(
              name, password, new ArrayList<>());
        } else {
            return null;
        }
    }

    @Override
    public boolean supports(Class<?> authentication) {
        return authentication.equals(UsernamePasswordAuthenticationToken.class);
    }
}

相关问题