2013-05-31 4 views
0

"intercept-url"을 동적으로 생성하는 방법. 내 사용자 이름과 역할은 데이터베이스에 저장됩니다. 이 모든 사용자를 봄 보안에 매핑하려고합니다.이 작업을 수행 할 수있는 방법이 있습니까?스프링 보안이 동적으로 사용자와 권한을 추가합니다.

+0

목표가 무엇인지 자세히 설명해 주실 수 있습니까? 사용자 별 URL을 보호하려고합니다 (예 :'/ my-app/user/{userName}/**')? –

+0

예 URL을 보호하고 싶습니다. 하지만 어떤 사용자가 데이터를 데이터베이스에 저장하고자하는 페이지에 액세스 할 권한이 있습니다. – vijay

+0

스프링의 'WebExpressionVoter'가 관심의 대상 일 수 있습니다. –

답변

-1

모든 사용자에게 동일한 역할을 부여하고 config에서이 역할을 수행하십시오.

당신은 역할 here

+0

답장을위한 고맙습니다. 그러나이 링크는 내 솔루션에서 나를 도울 수 없습니다. – vijay

0

당신은 com.icod.solapCore.spring.security.FilterInvocationSecurityMetadataSource의 자신의 구현을 제공해야 할 것이다 abour 읽을 수 있습니다.

이는 다음과 같이 수 :

public class MyFilterInvocationSecurityMetadataSource implements FilterInvocationSecurityMetadataSource { 

     @Override 
     public Collection<ConfigAttribute> getAttributes(Object object) throws IllegalArgumentException { 
     FilterInvocation filterInvocation = (FilterInvocation) object; 
     HttpServletRequest request = filterInvocation.getHttpRequest(); 
     Collection<ConfigAttribute> result = new ArrayList<ConfigAttribute>(); 
     // Find roles in database that secures the specified request 
     // ... 
     // For any role found, create a SecurityConfig object prefixed with "ROLE_" ex : 
     // for(String role : roles) { 
     // ConfigAttribute attribute = new SecurityConfig("ROLE_"+roleFound); 
     // result.add(attribute); 
     // } 

     return result; 
     } 

     @Override 
     public Collection<ConfigAttribute> getAllConfigAttributes() { 
     return null; 
     } 

     @Override 
     public boolean supports(Class<?> clazz) { 
     return FilterInvocation.class.isAssignableFrom(clazz); 
     } 
} 

을 그리고 자신과 기본 FilterInvocationSecurityMetadataSource을 교체해야합니다. BeanPostProcessor를 사용하여 봄에 호출 된 후, 구성 파일을 읽었지만 구성 공식을 만들기 전에 호출합니다. 다음과 같습니다

<bean id="solapcoreFilterInvocationSecurityMetadataSourceBeanPostProcessor" class="foo.bar.MyFilterInvocationSecurityMetadataSourceBeanPostProcessor"/> 

희망이 도움말 :

public class MyFilterInvocationSecurityMetadataSourceBeanPostProcessor implements BeanPostProcessor { 

    private FilterInvocationSecurityMetadataSource metadataSource = new MyFilterInvocationSecurityMetadataSource(); 

    @Override 
    public Object postProcessBeforeInitialization(Object bean, String name) throws BeansException { 
    if (bean instanceof FilterInvocationSecurityMetadataSource) { 
     return metadataSource; 
    } 
    return bean; 
    } 

    @Override 
    public Object postProcessAfterInitialization(Object bean, String name) throws BeansException { 
    return bean; 
    } 
} 

그런 다음 당신은 그냥 빈 포스트 프로세서를 구성해야합니다.

관련 문제