「intercept-url」を動的に生成する方法。私のユーザー名とロールはデータベースに保存されています。これらすべてのユーザーをSpring Securityにマップしたいのですが、これを行う方法はありますか?
質問する
1708 次
2 に答える
0
com.icod.solapCore.spring.security.FilterInvocationSecurityMetadataSource の独自の実装を提供する必要があります。
これは次のようになります。
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 でそれを行います。これは、Spring が構成ファイルを読み取った後、構成が公式になる前に呼び出されます。次のようになります。
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"/>
この助けを願っています。
于 2013-06-03T19:46:48.227 に答える
-1
すべてのユーザーに同じ役割を与え、構成でこの役割で操作します。
ここで役割を読むことができます
于 2013-05-31T08:48:37.557 に答える