2016-10-25 11 views
1

私は春のブートアプリケーションを持っています。これは、ユーザーがログイン・タイプを選択し、ログイン・ページにリダイレクトされ、選択に基づいて役割を果たすウェルカム・ページを持っています。各ログインページは、異なる外部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; 
} 
    } 
} 

答えて

関連する問題