2016-09-25 132 views
0

我们使用的是Spring Security版本4.默认情况下,匿名用户拥有ROLE_ANONYMOUS分配。Spring Security定义了一个定制的匿名过滤器

我们想为匿名用户添加更多角色。

我试图延长AnonymousAuthenticationFilter并将其添加到如下春季安全方面:

<http entry-point-ref="authenticationEntryPoint"> 
    <custom-filter ref="sabaAnonymousAuthenticationFilter" position="ANONYMOUS_FILTER"/> 
    <anonymous enabled="false"/> 
..... 

<beans:bean id="sabaAnonymousAuthenticationFilter" 
       class="foo.bar.CustomAnonymousAuthenticationFilter"> 
       <beans:constructor-arg index="0" value="SomeUniqueKeyForThisApplication"/> 
</beans:bean> 

和类:

public class CustomAnonymousAuthenticationFilter extends AnonymousAuthenticationFilter { 
    @Inject 
    HelperClass aHelperClass; 

    public CustomAnonymousAuthenticationFilter(String key) { 
     super(key); 
     getAuthorities().add(new SimpleGrantedAuthority("ROLE_FOO_BAR")); 
     ...... 
    } 
} 

上面的代码改变匿名角色,并添加ROLE_FOO_BAR,但我在此过滤器中不能使用@Inject@Autowire其他Spring bean。

请让我知道:

  1. 这是定义自定义过滤匿名的正确方法?
  2. 我怎样才能authowire其他豆在这里?

我用同样的方法来定义自定义UserDetailsServiceautowire在那里工作。

回答

2

据我了解spring security documentation一个可以添加额外的作用,这样用户:

<bean id="anonymousAuthFilter" 
     class="org.springframework.security.web.authentication.AnonymousAuthenticationFilter"> 
    <property name="key" value="foobar"/> 
    <property name="userAttribute" value="anonymousUser,ROLE_ANONYMOUS, ROLE_FOOBAR"/> 
</bean> 

这样你很可能避免编写自己的身份验证筛选器。

试一试。我希望它适合你的需求。

+0

谢谢,但我需要我自己的类,因为'roles'不能用xml进行硬编码,并且应该从文件中读取。 –

+0

也许这篇文章http://stackoverflow.com/questions/32494398/unable-to-autowire-the-service-inside-my-authentication-filter-in-spring将解决您的autowire问题。 – Compito

相关问题