PreAuthorize nie działa

Piszę aplikację serwera gniazd (bez aplikacji internetowej!) I chcę używać zabezpieczeń opartych na metodach do obsługi moich potrzeb ACL. Poszedłem na mały tutorial, który znalazłemwiosenne bezpieczeństwo na przykład

do tej pory skonfigurowałem:

<code><security:global-method-security pre-post-annotations="enabled">
    <security:expression-handler ref="expressionHandler" />
</security:global-method-security>
<bean id="expressionHandler" class="org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler">
    <property name="permissionEvaluator">
        <bean id="permissionEvaluator" class="myPermissionEvaluator" />
    </property>
</bean>

<security:authentication-manager id="authenticationmanager">
    <security:authentication-provider ref="authenticationprovider" />
</security:authentication-manager>
<bean id="authenticationprovider" class="myAuthenticationProvider" />
</code>

Z komponentem usługi:

<code>@Named
public class ChannelService {
    @PreAuthorize("isAuthenticated() and hasPermission(#channel, 'CHANNEL_WRITE')")
    public void writeMessage(Channel channel, String message) { ... }
}
</code>

Wszystko się kompiluje i aplikacja się uruchamia i działa dobrze, ale bez kontroli dostępu. Mój dziennik debugowania pokazuje, że mój ewaluator nigdy nie jest wywoływany.

Kiedy spróbowałem czegoś podobnego za pomocą@Secured adnotacja została oceniona i odmówiono dostępu. ale proste zabezpieczenia oparte na rolach nie wystarczają mi do spełnienia moich wymagań.

EDYTOWAĆ wykonałem jeszcze kilka testów: kiedy skonfigurowałem tylko zabezpieczone adnotacje = „włączony”, działa ochrona oparta na rolach. kiedy konfiguracja pre-post-annotations = "enabled" w ADDITION ani zabezpieczona, ani preautoryzacja prac. kiedy konfiguruję tylko adnotacje poprzedzające, nadal nie działa.

EDIT2

kilka dodatkowych testów: z only secure_annotations = "enabled" wywołanie mojej usługi kanału przechodzi przez Cglib2AopProxy, gdy tylko aktywuję pre-post-adnotacje połączenie wyląduje bezpośrednio w usłudze kanałowej. brak przechwytywacza, brak proxy, nic.

Jestem w desperacji ...

EDIT3

Zalogowałem się tutaj, moje testy testowe są częścią zabezpieczenia wiosennego

z tylko zabezpieczonymi adnotacjami = „włączony”

<code>2012-04-12 13:36:46,171 INFO  [main] o.s.s.c.SpringSecurityCoreVersion - You are running with Spring Security Core 3.1.0.RELEASE
2012-04-12 13:36:46,174 INFO  [main] o.s.s.c.SecurityNamespaceHandler - Spring Security 'config' module version is 3.1.0.RELEASE
2012-04-12 13:36:49,042 DEBUG [main] o.s.s.a.m.DelegatingMethodSecurityMetadataSource - Caching method [CacheKey[mystuff.UserService; public void mystuff.UserService.serverBan(java.lang.String,mystuff.models.User,org.joda.time.DateTime)]] with attributes [user]
2012-04-12 13:36:49,138 DEBUG [main] o.s.s.a.i.a.MethodSecurityInterceptor - Validated configuration attributes
2012-04-12 13:36:49,221 DEBUG [main] o.s.s.a.m.DelegatingMethodSecurityMetadataSource - Caching method [CacheKey[mystuff.ChannelService; public void mystuff.ChannelService.writeMessage(mystuff.models.Channel,java.lang.String)]] with attributes [blubb]
2012-04-12 13:36:51,159 DEBUG [main] o.s.s.a.ProviderManager - Authentication attempt using mystuff.GlobalchatAuthenticationProvider
2012-04-12 13:36:56,166 DEBUG [Timer-1] o.s.s.a.ProviderManager - Authentication attempt using mystuff.GlobalchatAuthenticationProvider
2012-04-12 13:36:56,183 DEBUG [Timer-1] o.s.s.a.i.a.MethodSecurityInterceptor - Secure object: ReflectiveMethodInvocation: public void mystuff.ChannelService.writeMessage(mystuff.models.Channel,java.lang.String); target is of class [mystuff.ChannelService]; Attributes: [blubb]
2012-04-12 13:36:56,184 DEBUG [Timer-1] o.s.s.a.i.a.MethodSecurityInterceptor - Previously Authenticated: org.springframework.security.authentication.UsernamePasswordAuthenticationToken@312e8aef: Principal: mystuff.UserId@ced1752b; Credentials: [PROTECTED]; Authenticated: true; Details: null; Not granted any authorities
Exception in thread "Timer-1" org.springframework.security.access.AccessDeniedException: Access is denied
    at org.springframework.security.access.vote.AbstractAccessDecisionManager.checkAllowIfAllAbstainDecisions(AbstractAccessDecisionManager.java:70)
    at org.springframework.security.access.vote.AffirmativeBased.decide(AffirmativeBased.java:88)
    at org.springframework.security.access.intercept.AbstractSecurityInterceptor.beforeInvocation(AbstractSecurityInterceptor.java:205)
    at org.springframework.security.access.intercept.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:59)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:622)
    at mystuff.ChannelService$$EnhancerByCGLIB$$3ad5e57f.writeMessage(<generated>)
    at mystuff.run(DataGenerator.java:109)
    at java.util.TimerThread.mainLoop(Timer.java:512)
    at java.util.TimerThread.run(Timer.java:462)
2012-04-12 13:36:56,185 DEBUG [Timer-1] o.s.s.access.vote.AffirmativeBased - Voter: org.springframework.security.access.vote.RoleVoter@1cfe174, returned: 0
2012-04-12 13:36:56,185 DEBUG [Timer-1] o.s.s.access.vote.AffirmativeBased - Voter: org.springframework.security.access.vote.AuthenticatedVoter@da89a7, returned: 0
</code>

z pre-post-annotations = "enabled"

<code>2012-04-12 13:39:54,926 INFO  [main] o.s.s.c.SpringSecurityCoreVersion - You are running with Spring Security Core 3.1.0.RELEASE
2012-04-12 13:39:54,929 INFO  [main] o.s.s.c.SecurityNamespaceHandler - Spring Security 'config' module version is 3.1.0.RELEASE
2012-04-12 13:39:54,989 INFO  [main] o.s.s.c.m.GlobalMethodSecurityBeanDefinitionParser - Using bean 'expressionHandler' as method ExpressionHandler implementation
2012-04-12 13:39:59,812 DEBUG [main] o.s.s.a.ProviderManager - Authentication attempt mystuff.GlobalchatAuthenticationProvider
2012-04-12 13:39:59,850 DEBUG [main] o.s.s.a.i.a.MethodSecurityInterceptor - Validated configuration attributes
</code>

O ile rozumiem, to źródło danych dziennika nie zdaje sobie sprawy, że moje fasole muszą być proxy, więc nie są, więc nie dostaję bezpieczeństwa.

EDIT4

Rejestrowałem debugowanie całego uruchamiania sprintu ... (to jest jeden duży dziennik) i znajduję:

<code>2012-04-12 14:40:41,385 INFO [main] o.s.c.s.ClassPathXmlApplicationContext - Bean 'channelService' of type [class mystuff.ChannelService] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
</code>

czy istnieje sposób, aby dowiedzieć się dlaczego? bo o ile rozumiem. z powodu autoryzacji @ fasola powinna być uprawniona. z only secure-annotations = "enabled" otrzymuję dziennik przetwarzania postów.

questionAnswers(2)

yourAnswerToTheQuestion