Как загрузить роли из базы данных для анонимного пользователя в Spring Security 3?
Я использую Spring Security 3.0.2 и не могу найти способ загрузить роли анонимного пользователя из базы данных (у меня есть динамические роли, где роли могут быть назначены каждому).
Я пытался использовать пользовательский anonymousAuthenticationProvider, но этот поставщик никогда не вызывается. Вот мой конфиг:
<http auto-config="false">
<logout invalidate-session="true" logout-success-url="/page/welcome" />
<remember-me />
<anonymous username="_GUEST_" granted-authority="ROLE_GUEST" key="anonymousKey" />
<form-login login-page="/page/login" authentication-failure-url="/page/login?fail=1" default-target-url="/page/welcome" />
</http>
<authentication-manager alias="authenticationManager">
<authentication-provider ref="anonymousAuthenticationProvider"></authentication-provider>
<authentication-provider user-service-ref="accountDetails">
<password-encoder ref="passwordEncoder">
<salt-source user-property="xxxx" />
</password-encoder>
</authentication-provider>
</authentication-manager>
<beans:bean id="accountDetails" class="com.mysite.AccountDetailsImpl" />
<beans:bean id="passwordEncoder" class="org.springframework.security.authentication.encoding.ShaPasswordEncoder">
<beans:constructor-arg value="512" />
</beans:bean>
<beans:bean id="anonymousAuthenticationProvider" class="com.my.site.security.CustomAnonymousAuthenticationProvider">
<beans:property name="key" value="anonymousKey" />
</beans:bean>
Мой anonymousAuthenticationProvider никогда не вызывается, поэтому я не могу загрузить пользовательские права доступа из базы данных. Когда я вхожу в систему, вызывается моя учетная запись serviceDetails, и я могу загрузить роли из базы данных для пользователя, я хочу то же самое для анонимного пользователя.
Как мне это сделать? Спасибо
1 ответ
Кажется, что самый простой способ добиться этого - объявить AnonymousAuthenticationFilter
с обычаем UserAttribute
, который будет производить необходимые полномочия:
<http auto-config = "false">
<anonymous enabled = "false" />
<custom-filter ref = "myFilter" position = "ANONYMOUS_FILTER" />
...
</http>
<beans:bean id = "myFilter" class = "org.springframework.security.web.authentication.AnonymousAuthenticationFilter">
<beans:property name = "key" value = "anonymousKey" />
<beans:property name = "userAttribute" ref = "myAttributes" />
</beans:bean>
<beans:bean id = "myAttributes" class = "..." />