【问题标题】:Spring Security define a custom anonymous filterSpring Security 定义一个自定义匿名过滤器
【发布时间】:2017-02-02 16:25:42
【问题描述】:

我们使用的是 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这里的其他豆子?

我使用相同的方法来定义自定义 UserDetailsService,autowire 在那里工作。

【问题讨论】:

    标签: java spring spring-security


    【解决方案1】:

    据我了解,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>
    

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

    试试看。我希望它适合您的需求。

    【讨论】:

    • 谢谢,但我需要有自己的课程,因为 roles 不能在 xml 中硬编码,应该从文件中读取。
    • 也许这篇stackoverflow.com/questions/32494398/… 的帖子可以解决您的自动连线问题。
    猜你喜欢
    • 2011-08-23
    • 2014-07-28
    • 2013-07-22
    • 2014-10-24
    • 1970-01-01
    • 2011-07-23
    • 2018-05-25
    • 2016-03-08
    • 1970-01-01
    相关资源
    最近更新 更多