私は春のブートアプリケーションを持っています。これは、ユーザーがログイン・タイプを選択し、ログイン・ページにリダイレクトされ、選択に基づいて役割を果たすウェルカム・ページを持っています。各ログインページは、異なる外部Webサービスを使用した認証メカニズムを提供します。私はシナリオのセキュリティを設定しましたが、複数のシナリオでこれを行う方法は?複数のセキュリティコンフィグレーション、または同じセキュリティコンフィグレーションのすべてのコンフィグレーションでそれを行う必要がありますか?もしそうなら、どのように?Javaの設定で複数のログインシナリオにSpring Securityを使用するには?
SecurityConfig.java
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private CustomAuthenticationProvider cap;
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/welcomeX").hasAuthority("X_USER")
.and()
.formLogin()
.loginPage("/login")
.loginPage("/main")
.loginProcessingUrl("/welcome")
.permitAll()
.failureUrl("/login?error=true");
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.authenticationProvider(cap);
}
CustomAuthenticationProvider.java
@Component
public class CustomAuthenticationProvider implements AuthenticationProvider {
@Autowired
private ExternalService externalService;
@Override
public Authentication authenticate(Authentication authentication) throws AuthenticationException {
String username = authentication.getName();
String password = authentication.getCredentials().toString();
Response resp = externalService.authenticate(username, password);
if (resp.isSuccess()) {
List<GrantedAuthority> grantedAuths = new ArrayList<>();
grantedAuths.add(new SimpleGrantedAuthority("X_USER"));
Authentication auth = new UsernamePasswordAuthenticationToken(username, password, grantedAuths);
return auth;
} else {
return null;
}
}
}