2017-05-02 7 views
-1

私たちは、OAuth [LDAP/Social Login]を使用して春起動時にSSOアプリケーションを開発しました。アプリケーションには公開ページと保護されたページがあります。要件は、認証されたユーザーに基づいて公開ページにいくつかのコンテンツが必要なことです。問題は、同じアプリケーションの保護されたページのいずれかにアクセスしない限り、1つのアプリケーションにログインして他のアプリケーションの公開ページにアクセスすることです。ユーザープリンシパルは公開ページで利用できません。これを達成するためのあらゆる示唆/サンプルが参考になります。以下は私のリソースサーバーのコードです。春のセキュリティでパブリックページのユーザープリンシパル/ securityContextをpermitAll()と共有する方法OAuth2

public class SocialApplication extends WebSecurityConfigurerAdapter { 
@Autowired 
CustomLdapAuthoritiesPopulator ldapAuthoritiesPopulator; 

@Autowired 
CustomLogoutSuccessHandler customLogoutSuccessHandler; 

@RequestMapping({ "/user", "/me" }) 
public Map<String, String> user(Principal principal) { 
    Map<String, String> map = new LinkedHashMap<>(); 
    map.put("name", principal.getName()); 
    return map; 
} 

@Override 
public void configure(WebSecurity web) throws Exception { 
    web.ignoring().antMatchers("/page1Prv"); 
} 

@Override 
protected void configure(HttpSecurity http) throws Exception { 

    http.antMatcher("/**").authorizeRequests().antMatchers("/login", "/index**", "/webjars/**").permitAll() 
      .anyRequest().authenticated().and().authorizeRequests().anyRequest().fullyAuthenticated().and() 
      .formLogin().loginPage("/login").defaultSuccessUrl("/").and().logout() 
      .logoutSuccessHandler(customLogoutSuccessHandler).permitAll().and().csrf() 
      .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse()).and() 
      .addFilterBefore(ssoFilter(), BasicAuthenticationFilter.class); 
      //.userDetailsService(userDetailsService); 

    http.httpBasic().and().authorizeRequests().anyRequest().authenticated().and().csrf().disable(); 
} 

@Override 
protected void configure(AuthenticationManagerBuilder authenticationManagerBuilder) throws Exception { 
    authenticationManagerBuilder.ldapAuthentication() 
    .contextSource() 
      .url("ldap://localhost:10389/dc=example,dc=com").managerDn("uid=admin,ou=system") 
      .managerPassword("secret").and() 
      .ldapAuthoritiesPopulator(ldapAuthoritiesPopulator) 
      .userSearchBase("ou=users").userSearchFilter("(cn={0})"); 
} 


@Configuration 
@EnableResourceServer 
protected static class ResourceServerConfiguration extends ResourceServerConfigurerAdapter { 
    @Override 
    public void configure(HttpSecurity http) throws Exception { 
     http.antMatcher("/me").authorizeRequests().anyRequest().authenticated(); 
    } 
} 

public static void main(String[] args) { 
    SpringApplication.run(SocialApplication.class, args); 
} 

}

答えて

0

I)は、(ユーザからプリンシパルオブジェクトを戻しました。下のコードを参照し、私の問題を解決しました。 @RequestMapping({ "/user", "/me" }) public Principal user(Principal principal) { return principal; }

関連する問題