Package com.wizriver.config

Source Code of com.wizriver.config.DefinitionSourceFactoryBean

/**
* Copyright (c) 2005-2009 springside.org.cn
*
* Licensed under the Apache License, Version 2.0 (the "License");
*
* $Id: DefinitionSourceFactoryBean.java 764 2009-12-27 19:13:59Z calvinxiu $
*/
package com.wizriver.config;

import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.FactoryBean;
import org.springframework.security.access.ConfigAttribute;
import org.springframework.security.access.ConfigAttributeEditor;
import org.springframework.security.access.SecurityConfig;
import org.springframework.security.web.access.intercept.DefaultFilterInvocationSecurityMetadataSource;
import org.springframework.security.web.access.intercept.FilterInvocationSecurityMetadataSource;
import org.springframework.security.web.access.intercept.RequestKey;
import org.springframework.security.web.util.AntUrlPathMatcher;
import org.springframework.security.web.util.UrlMatcher;

/**
* DefinitionSource工厂.
*
* 由注入的resourceDetailService读取在数据库或其它地方中定义的URL-授权关系,
* 提供LinkedHashMap<String, String>形式的URL及授权关系定义,
* 并最终转为SpringSecurity所需的LinkedHashMap<RequestKey, ConfigAttributeDefinition>形式的定义.
*
* @see org.springframework.security.intercept.web.DefaultFilterInvocationDefinitionSource
* @see ResourceDetailsService
*
* @author calvin
*/
public class DefinitionSourceFactoryBean implements FactoryBean {

  private ResourceDetailsService resourceDetailsService;

  public void setResourceDetailsService(ResourceDetailsService resourceDetailsService) {
    this.resourceDetailsService = resourceDetailsService;
  }

  /**
   * 返回注入了Ant Style的URLMatcher
   * 和ResourceDetailService提供的RequestMap的DefaultFilterInvocationDefinitionSource.
   */
  public Object getObject() throws Exception {
    DefaultFilterInvocationSecurityMetadataSource df = new DefaultFilterInvocationSecurityMetadataSource(
        new AntUrlPathMatcher(), buildRequestMap());
    return df;
  }

  /**
   * @see FactoryBean#getObjectType()
   */
  @SuppressWarnings("unchecked")
  public Class getObjectType() {
    return FilterInvocationSecurityMetadataSource.class;
  }

  /**
   * @see FactoryBean#isSingleton()
   */
  public boolean isSingleton() {
    return true;
  }

  /**
   * 提供Ant Style的URLMatcher.
   */
  protected UrlMatcher getUrlMatcher() {
    return new AntUrlPathMatcher();
  }

  /**
   * 将resourceDetailService提供LinkedHashMap<String, String>形式的URL及授权关系定义
   * 转化为DefaultFilterInvocationDefinitionSource需要的LinkedHashMap<RequestKey, ConfigAttributeDefinition>形式.
   */
  protected LinkedHashMap<RequestKey, Collection<ConfigAttribute>> buildRequestMap() throws Exception {//NOSONAR
    try
    {
      LinkedHashMap<String, String> srcMap = resourceDetailsService.getRequestMap();
      LinkedHashMap<RequestKey, Collection<ConfigAttribute>> distMap = new LinkedHashMap<RequestKey, Collection<ConfigAttribute>>();
     
      for (Map.Entry<String, String> entry : srcMap.entrySet()) {
        RequestKey key = new RequestKey(entry.getKey(), null);
        //使用SecurityConfig构造List<ConfigAttribute>
        SecurityConfig sc = new SecurityConfig(entry.getValue());
        List<ConfigAttribute> list = sc.createList(sc.getAttribute());
        distMap.put(key, list);
      }

      return distMap;
    }
    catch(Exception e)
    {
      e.printStackTrace();
    }
return null;
  }
}
TOP

Related Classes of com.wizriver.config.DefinitionSourceFactoryBean

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.