2015-12-10 2 views
0

У меня есть вопрос о Spring Security и SiteMinder.Spring Security: исключить URL из SiteMinder

Обычно я использую заголовок SM_USER для всех своих запросов на все мои страницы, но на этот раз мне нужно исключить один URL-адрес: он отправит запрос без заголовка SM_USER.

Я использую Java Congifuration:

@Autowired 
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { 

    // for class CustomUserDetailsService I configured how I get the list of 
    // user authorities with the content of SM_USER header 

    userDetailsService = new CustomUserDetailsService(); 
    UserDetailsByNameServiceWrapper<PreAuthenticatedAuthenticationToken> wrapper = new UserDetailsByNameServiceWrapper<PreAuthenticatedAuthenticationToken>(
      userDetailsService); 

    preAuthenticatedProvider = new PreAuthenticatedAuthenticationProvider(); 
    preAuthenticatedProvider.setPreAuthenticatedUserDetailsService(wrapper); 
    auth.authenticationProvider(preAuthenticatedProvider); 


    log.debug("global security configuration was successfull"); 
} 

А потом добавить власти для различных URL-адресов:

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

    RequestHeaderAuthenticationFilter siteMinderFilter = new RequestHeaderAuthenticationFilter(); 
    siteMinderFilter.setPrincipalRequestHeader("SM_USER"); 
    siteMinderFilter.setAuthenticationManager(authenticationManager()); 
    http.addFilter(siteMinderFilter); 
    ExpressionUrlAuthorizationConfigurer<HttpSecurity>.ExpressionInterceptUrlRegistry registry = http.authorizeRequests(); 
//adding an authority to URL containing SM_USEr_URL 
    registry.antMatchers(HttpMethod.GET, "**/SM_USER_URL/**").hasAuthority("authority1"); 

//here I try to exclude the URL from Siteminder. 
    registry.antMatchers(HttpMethod.GET, "**/ExcludedPage/**").permitAll(); 
} 

Моя проблема заключается в том, что для запроса к URL ExcludedPage я не получаю ничего, кроме исключение:

org.springframework.security.web.authentication.preauth.PreAuthenticatedCredentialsNotFoundException: SM_USER header not found in request. 

И я не могу настроить фильтр для этой страницы что он вообще не нуждается в заголовке SM_USER.

Заранее спасибо.

ответ

0

для каждого URL, который должен принять SiteMinder добавить

http.antMatcher(SM_USER_URL).addFilter(siteMinderFilter);