【问题标题】:Custom authenticationFilter Spring Security 3.2自定义 authenticationFilter Spring Security 3.2
【发布时间】:2013-05-22 08:26:21
【问题描述】:

对于一个项目,我尝试使用 Spring Security 3.2 作为基础安全性。因为这个项目已经启动并运行了,所以我已经有了另一个(自己的)安全层。因此,我制作了一个自定义身份验证提供程序来融化安全层。工作正常,直到我还需要进行自定义匿名身份验证 (Spring Security Documentation, chapter 13)。

所以我做了一个自定义过滤器并删除了原始过滤器:

<http request-matcher="regex" use-expressions="true">
    <anonymous enabled="false" />
    <custom-filter ref="anonymousAuthFilter" position="ANONYMOUS_FILTER"/>
    ...
</http>

豆子:

<beans:bean id="anonymousAuthFilter" class="own.package.auth.SecurityAnonymousAuthenticationFilter">
    <beans:property name="key" value="anonymousKey "/>
    <beans:property name="userAttribute" value="anonymous,ROLE_ANONYMOUS"/>
</beans:bean>

还有 Java 类:

public class SecurityAnonymousAuthenticationFilter extends GenericFilterBean implements InitializingBean {
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
        logger.info("Entering doFilter method");
        //implementation code here
    }

    //other methods
}

问题是请求服务器时没有调用doFilter方法。但是 init 方法 afterPropertiesSet() 被调用...有谁明白为什么我的 customFilter 没有被触发?

附:我确实在 web.xml 文件中命名了 delegatingFilterProxy,所以这不是问题。

【问题讨论】:

  • 尝试将您的自定义过滤器注入到其他位置(例如 after="ANONYMOUS_FILTER")。可能是 anonymous enabled="false" 按过滤器位置工作吗?
  • @MaksymDemidas:谢谢你的评论,不幸的是它没有改变任何东西。
  • 你试过删除 anonymous enabled="false" 吗?
  • 是的,尝试了 after 两个 都被排除在外

标签: java spring spring-security


【解决方案1】:

因为ANONYMOUS_FILTER 是一个与命名空间相关的过滤器。您必须避免引用特定过滤器位置的任何命名空间标记:

   <http auto-config='false' request-matcher="regex" use-expressions="true">
    <custom-filter ref="anonymousAuthFilter" position="ANONYMOUS_FILTER"/>
    ...
   </http>

如需进一步参考,请参阅第 2.3.5 节中的 Spring 安全文档:http://static.springsource.org/spring-security/site/docs/3.0.x/reference/ns-config.html

编辑:一定要留下&lt;anonymous-enabled=false/&gt; 标签。

编辑 2:更正了我的答案。此配置应该可以工作。如果没有,那么我们需要开始审视更大的图景,并且您必须发布更多您的应用程序,从完整的配置开始。

【讨论】:

  • 如果未定义,自动配置已经为“假”。来自文档:auto-config: 自动注册登录表单、BASIC 身份验证、匿名身份验证、注销服务、remember-me 和 servlet-api-integration。如果设置为“true”,则会添加所有这些功能(尽管您仍然可以通过提供相应的元素来自定义每个功能的配置)。如果未指定,则默认为“false”。 如前所述,省略 'anonymous-enabled=false' 遗憾的是不起作用。
  • 你是对的。还有另一个问题调用了它。我还有一个带有 security=none 的 http 标记,以使某些 css+js 内容对任何人都可见。可悲的是,这种过滤模式是错误的,我的整个应用程序不再通过我的匿名过滤器。谢谢和我一起思考!
猜你喜欢
  • 2014-10-23
  • 2013-10-11
  • 1970-01-01
  • 2016-09-04
  • 2020-09-24
  • 1970-01-01
  • 1970-01-01
  • 2018-01-13
  • 2014-05-05
相关资源
最近更新 更多