2010-05-28 2 views
0

привета, я использую пружинную безопасность и моя конфигурация в базе данных:как инициализировать пружинный компонент из базы данных

<sec:http auto-config="true" entry-point-ref="casProcessingFilterEntryPoint"> 
     <sec:remember-me /> 
     <sec:session-management> 
      <sec:concurrency-control max-sessions="1" 
       error-if-maximum-exceeded="true" /> 
     </sec:session-management> 
     <sec:logout logout-success-url="${host.url}/logout/" /> 
     <sec:custom-filter ref="casAuthenticationFilter" 
      after="CAS_FILTER" /> 
     <sec:custom-filter ref="filterInvocationInterceptor" 
      before="FILTER_SECURITY_INTERCEPTOR" /> 
    </sec:http> 

как ${host.url} находится в базе данных

как я могу инициализировать?

так, и я это сделать:

public class SnsPropertyResourceConfigurer extends GrailsPlaceholderConfigurer{ 

    private BeanFactory beanFactory; 

    protected void loadProperties(Properties props) throws IOException { 
      setSystemPropertiesMode(2); 
      ConfigObject config = ConfigurationHolder.getConfig(); 
      if(config != null) { 
       props.putAll(config.toProperties()); 
      } 
       Properties add = addProperties(); 
       if(add != null){ 
        props.putAll(add); 

      } 
     } 

    private Properties addProperties(){ 

     InfoFetchClientRpcService infoFetchRpcService = (InfoFetchClientRpcService)beanFactory.getBean("infoFetchRpcService"); 
     Map<String, Application> apps = infoFetchRpcService.getAppInfo(); 
     Application thisApp = apps.get("sns"); 
     Application casApp = apps.get("cas"); 
     Properties props = new Properties(); 
     props.setProperty("cas.loginUrl", "11111111"); 
     props.setProperty("cas.logoutUrl", "222222222222"); 
     props.setProperty("cas.validator", casApp.getUrl()); 
     props.setProperty("cas.service",thisApp.getUrl()+"/j_spring_cas_security_check"); 
     props.setProperty("cas.defaultTargetUrl", thisApp.getSuccessUrl()); 
     props.setProperty("cas.defaultFailureUrl", thisApp.getFailureUrl()); 
     props.setProperty("cas.logout", thisApp.getLogoutUrl()); 
     props.setProperty("cas.logoutSuccessUrl", thisApp.getUrl()); 
     props.setProperty("cas.ticket.key", "sns"); 
     return props; 
    } 

    public void setBeanFactory(BeanFactory beanFactory) { 
     this.beanFactory = beanFactory; 
    } 
} 

и

<bean name="snsPropertyResourceConfigurer" class="com.ai.sns.init.SnsPropertyResourceConfigurer"> 
    </bean> 

но это не влияет ...

+0

Почему вы подклассифицируете «GrailsPlaceholderConfigurer», а не «PropertyPlaceholderConfigurer» напрямую? – skaffman

+0

потому что я использую grails, и grails используют GrailsPlaceholderConfigurer – user340017

+1

@ skaffman Итак. – Andy

ответ

2

Подкласс PropertyPlaceholderConfigurer и осуществлять загрузку из базы данных. Затем добавить этот класс в качестве компонента в applicationContext.xml (как если бы это был регулярный PropertyPlaceholderConfigurer)

0

я решить эту проблему ...

я зарегистрировать placeholderConfigurer в главном контексте приложения , где находится web-app/WEB-INF/applicationContext.xml но не grails-app/conf/spring/resources.xml это работает хорошо

THK для всех

цитата: http://jira.codehaus.org/browse/GRAILS-1958?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#issue-tabs