gpt4 book ai didi

java - 具有 Spring Security 和 Java 配置的自定义身份验证管理器

转载 作者:IT老高 更新时间:2023-10-28 13:49:06 25 4
gpt4 key购买 nike

我正在将 Spring Security 与 SpringMVC 一起使用来创建一个与现有应用程序(我将其称为 BackendApp)对话的 Web 应用程序(为了清楚起见,我将其称为 WebApp)。

我想将身份验证职责委托(delegate)给 BackendApp(这样我就不需要同步两个应用程序)。

为了实现这一点,我希望 WebApp(运行 spring security)通过 REST 使用用户在表单中提供的用户名和密码与 BackendApp 通信,并根据 BackendApp 的响应是 200 OK 还是 401 Unauthorized 进行身份验证.

我知道我需要编写一个自定义身份验证管理器来执行此操作,但是我对 spring 很陌生,找不到任何有关如何实现它的信息。

我相信我需要做这样的事情:

public class CustomAuthenticationManager implements AuthenticationManager{

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

String username = authentication.getName();
String pw = authentication.getCredentials().toString();

// Code to make rest call here and check for OK or Unauthorised.
// What do I return?

}

}

如果成功则设置 authentication.setAuthenticated(true),否则设置 false,仅此而已?

写完后,如何配置 spring security 以使用 java 配置文件使用此身份验证管理器?

提前感谢您的帮助。

最佳答案

看看我下面的示例。您必须返回一个 UsernamePasswordAuthenticationToken。它包含主体和 GrantedAuthorities。希望我能帮上忙:)

public Authentication authenticate(Authentication authentication) throws AuthenticationException {
String username = authentication.getPrincipal() + "";
String password = authentication.getCredentials() + "";

User user = userRepo.findOne(username);
if (user == null) {
throw new BadCredentialsException("1000");
}
if (!encoder.matches(password, user.getPassword())) {
throw new BadCredentialsException("1000");
}
if (user.isDisabled()) {
throw new DisabledException("1001");
}
List<Right> userRights = rightRepo.getUserRights(username);
return new UsernamePasswordAuthenticationToken(username, null, userRights.stream().map(x -> new SimpleGrantedAuthority(x.getName())).collect(Collectors.toList()));
}

PS:userRepo 和 rightRepo 是 Spring-Data-JPA 存储库,可以访问我的自定义 User-DB

SpringSecurity JavaConfig:

@Configuration
@EnableWebMvcSecurity
public class MySecurityConfiguration extends WebSecurityConfigurerAdapter {

public MySecurityConfiguration() {
super(false);
}

@Override
protected AuthenticationManager authenticationManager() throws Exception {
return new ProviderManager(Arrays.asList((AuthenticationProvider) new AuthProvider()));
}

}

关于java - 具有 Spring Security 和 Java 配置的自定义身份验证管理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31826233/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com