2017-01-31 20 views
0

CASオーバーレイで、名前以外のユーザー属性をJAVAのクライアントに戻す方法。私はCAS Overlayプロジェクトを使用しており、ユーザの詳細をデータベースに保存しています。CASオーバーレイでユーザー属性を送信する方法

+0

ここには多くのオプションがあります。したがって、認証プロバイダが使用されているものとして、より詳細な情報を提供することをお勧めします。それがjdbcの場合、それはむしろ単純です。それがldapまたはjdbc以外のものであれば、より複雑になります。クライアントアプリケーションにもいくつかの設定ポイントがあります。ここでアプリケーション設定を提供してもよろしいですか? – Dmytro

答えて

0

最後に、ログインしたユーザーのユーザー属性をCASサーバーからクライアントに取得できました。

私はCAS Overlayプロジェクトバージョン5.0.0.RC1とSpring Security 4.1.3.RELEASEを使用しています。

WebSecurityConfigurerAdapter春クライアント構成:

@Bean 
public ServiceProperties serviceProperties() { 
    ServiceProperties serviceProperties = new ServiceProperties(); 
    serviceProperties.setService(serviceUrl); 
    serviceProperties.setSendRenew(false); 
    return serviceProperties; 
} 

@Bean 
public CasAuthenticationProvider casAuthenticationProvider() { 
    CasAuthenticationProvider casAuthenticationProvider = new CasAuthenticationProvider(); 
    casAuthenticationProvider.setAuthenticationUserDetailsService(authenticationUserDetailsService()); 
    casAuthenticationProvider.setServiceProperties(serviceProperties()); 
    casAuthenticationProvider.setTicketValidator(cas30ServiceTicketValidator()); 
    casAuthenticationProvider.setKey("an_id_for_this_auth_provider_only"); 
    return casAuthenticationProvider; 
} 

@Bean 
public Cas30ServiceTicketValidator cas30ServiceTicketValidator() { 
    return new Cas30ServiceTicketValidator(casServer); 
} 


@Bean 
public AuthenticationUserDetailsService authenticationUserDetailsService(){ 
    String[] role ={"user_role"}; 
    return new GrantedAuthorityFromAssertionAttributesUserDetailsService(role); 
} 



@Bean 
public CasAuthenticationFilter casAuthenticationFilter() throws Exception { 
    CasAuthenticationFilter casAuthenticationFilter = new CasAuthenticationFilter(); 
    casAuthenticationFilter.setAuthenticationManager(authenticationManager()); 
    casAuthenticationFilter.setAuthenticationSuccessHandler(new CustomAuthenticationSuccessHandler()); 
    casAuthenticationFilter.setAuthenticationFailureHandler(new CustomAuthenticationFailureHandler()); 
    return casAuthenticationFilter; 
} 

@Bean 
public CasAuthenticationEntryPoint casAuthenticationEntryPoint() { 
    CasAuthenticationEntryPoint casAuthenticationEntryPoint = new CasAuthenticationEntryPoint(); 
    casAuthenticationEntryPoint.setLoginUrl(casServerLogin); 
    casAuthenticationEntryPoint.setServiceProperties(serviceProperties()); 
    return casAuthenticationEntryPoint; 
} 

@Bean 
public LogoutFilter requestSingleLogoutFilter(){ 

    LogoutFilter logoutFilter = new LogoutFilter(casLogout,new SecurityContextLogoutHandler()); 
    logoutFilter.setFilterProcessesUrl("/j_spring_cas_security_logout"); 
    return logoutFilter; 
} 

@Bean 
public SingleSignOutFilter singleSignOutFilter() { 
    SingleSignOutFilter filter = new SingleSignOutFilter(); 
    filter.setCasServerUrlPrefix(casServer); 
    filter.setIgnoreInitConfiguration(true); 
    return filter; 
} 

私は、データベース内のユーザーの詳細情報を格納したとして、CASサーバ側のデータベースの属性リポジトリを構成しました。

<code> 
cas.authn.attributeRepository.jdbc.singleRow=true 
cas.authn.attributeRepository.jdbc.requireAllAttributes=true 
cas.authn.attributeRepository.jdbc.caseCanonicalization=NONE 
cas.authn.attributeRepository.jdbc.queryType=OR 

cas.authn.attributeRepository.jdbc.sql=SELECT * FROM users WHERE {0} 
cas.authn.attributeRepository.jdbc.username=username 
cas.authn.attributeRepository.jdbc.healthQuery=SELECT 1 
cas.authn.attributeRepository.jdbc.isolateInternalQueries=false 
cas.authn.attributeRepository.jdbc.url=jdbc:postgresql://localhost:5432/casdb 
cas.authn.attributeRepository.jdbc.failFast=true 
cas.authn.attributeRepository.jdbc.isolationLevelName=ISOLATION_READ_COMMITTED 
cas.authn.attributeRepository.jdbc.dialect=org.hibernate.dialect.PostgreSQLDialect 
cas.authn.attributeRepository.jdbc.leakThreshold=10 
cas.authn.attributeRepository.jdbc.propagationBehaviorName=PROPAGATION_REQUIRED 
cas.authn.attributeRepository.jdbc.batchSize=1 
cas.authn.attributeRepository.jdbc.user=postgres 
cas.authn.attributeRepository.jdbc.ddlAuto=update 
cas.authn.attributeRepository.jdbc.password=postgres 
cas.authn.attributeRepository.jdbc.autocommit=false 
cas.authn.attributeRepository.jdbc.driverClass=org.postgresql.Driver 
cas.authn.attributeRepository.jdbc.idleTimeout=5000 
cas.authn.attributeRepository.jdbc.pool.suspension=false 
cas.authn.attributeRepository.jdbc.pool.minSize=6 
cas.authn.attributeRepository.jdbc.pool.maxSize=18 
cas.authn.attributeRepository.jdbc.pool.maxIdleTime=1000 
cas.authn.attributeRepository.jdbc.pool.maxWait=2000 

cas.authn.attributeRepository.attributes.last_name=last_name 
cas.authn.attributeRepository.attributes.first_name=first_name 
cas.authn.attributeRepository.attributes.user_role=user_role 

</code> 

これらの変更の後、私はCASサーバーからユーザー属性を取得できました。