Spring security Spring security动态添加用户和权限

Spring security Spring security动态添加用户和权限,spring-security,Spring Security,如何动态生成“截取url”。我的用户名和角色存储在数据库中, 我想将所有这些用户映射到spring security。有什么方法可以做到这一点吗?给所有用户相同的角色,并在配置中使用此角色进行操作 您可以阅读有关角色的内容您必须提供自己的com.icod.solapCore.spring.security.filteringsocialsecurityMetadatasource实现 这可能是这样的: public class MyFilterInvocationSecurityMetadata

如何动态生成“截取url”。我的用户名和角色存储在数据库中,
我想将所有这些用户映射到spring security。有什么方法可以做到这一点吗?

给所有用户相同的角色,并在配置中使用此角色进行操作


您可以阅读有关角色的内容

您必须提供自己的com.icod.solapCore.spring.security.filteringsocialsecurityMetadatasource实现

这可能是这样的:

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);
      }
}
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;
  }
}
然后您只需配置bean后处理器:

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


希望能有所帮助。

你能更具体地说明你的目标是什么吗?您想保护特定于用户的URL(例如,
/my app/user/{userName}/**
)?是的,我想保护URL。但授权哪个用户访问我要存储在数据库中的数据的页面。您可能对Spring的
WebExpressionVoter
感兴趣。引用问题中接受答案的副本过于复杂且非动态(安全元数据仅在应用程序启动期间解析)。通过
WebExpressionVoter
check使用自定义SPeL方法比使用x进行回复更好。但是这个链接不能帮助我解决问题。