Spring Security定义了一个自定义匿名过滤器

时间:2016-09-25 06:12:56

标签: java spring spring-security

我们使用的是Spring Security版本4.默认情况下,匿名用户已分配ROLE_ANONYMOUS

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

我尝试扩展AnonymousAuthenticationFilter并将其添加到Spring Security上下文中,如下所示:

<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其他豆类?
  3. 我使用相同的方法来定义自定义UserDetailsServiceautowire在那里工作。

1 个答案:

答案 0 :(得分: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>

这样您就可以避免编写自己的身份验证过滤器。

试一试。我希望它符合您的需求。