annotation for acegi
April 19th, 2005
No comments
UPDATE: The new version of acegi has itself’s annotation implement. So you don’t need this any more.
annotation is so good that i can’t wait to use it in acegi
code sample
import java.util.List; import org.gotblog.common.acegi.SecurityConfig; import org.springframework.transaction.annotation.Transactional; public interface BookManager { @Transactional @SecurityConfig( { "ROLE_USER", "ROLE_ANONYMOUS" }) public List listBook(); }
here’s my implementation for it
package org.gotblog.common.acegi; import static java.lang.annotation.ElementType.METHOD; import static java.lang.annotation.ElementType.TYPE; import static java.lang.annotation.RetentionPolicy.RUNTIME; import java.lang.annotation.Retention; import java.lang.annotation.Target; @Target( { TYPE, METHOD }) @Retention(RUNTIME) public @interface SecurityConfig { String[] value(); }
package org.gotblog.common.acegi; import java.lang.annotation.Annotation; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.Collection; import java.util.HashSet; import java.util.Set; import org.springframework.metadata.Attributes; public class AcegiAnnotationAttributes implements Attributes { // TODO need to add cache public Collection getAttributes(Class targetClass) { Set<net.sf.acegisecurity.SecurityConfig> configs = new HashSet<net.sf.acegisecurity.SecurityConfig>(); for (Annotation annotation : targetClass.getAnnotations()) { if (annotation instanceof SecurityConfig) { SecurityConfig config = (SecurityConfig) annotation; for (String value : config.value()) { configs.add(new net.sf.acegisecurity.SecurityConfig(value)); } break; } } return configs; } public Collection getAttributes(Class targetClass, Class filter) { throw new IllegalArgumentException("Not support filter"); } public Collection getAttributes(Method targetMethod) { Set<net.sf.acegisecurity.SecurityConfig> configs = new HashSet<net.sf.acegisecurity.SecurityConfig>(); for (Annotation annotation : targetMethod.getAnnotations()) { if (annotation instanceof SecurityConfig) { SecurityConfig config = (SecurityConfig) annotation; for (String value : config.value()) { configs.add(new net.sf.acegisecurity.SecurityConfig(value)); } break; } } return configs; } public Collection getAttributes(Method targetMethod, Class filter) { throw new IllegalArgumentException("Not support filter"); } public Collection getAttributes(Field targetField) { throw new IllegalArgumentException("Not support field annotation"); } public Collection getAttributes(Field targetField, Class filter) { throw new IllegalArgumentException("Not support field annotation"); } }
<bean id="acegiAnnotationAttributes" class="org.gotblog.common.acegi.AcegiAnnotationAttributes"/> <bean id="objectDefinitionSource" class="net.sf.acegisecurity.intercept.method.MethodDefinitionAttributes"> <property name="attributes"> <ref local="acegiAnnotationAttributes"/> </property> </bean>
it works fine and i haven’t optimized it for performance
Recent Comments