使用Spring Security进行匿名用户计数

时间:2011-09-28 00:34:44

标签: java spring-security

我已经设法使用Spring Security 3.0.5完成了一些功能。首先,我想要一个具有特定角色的计数和用户列表。为了实现这一点,我设置了HttpSessionEventPublisher以及随之而来的弹簧配置。通过这些设置,我可以轻松获取已登录用户的列表,无论他们的权限级别如何 - 除非他们是匿名的(ROLE_ANONYMOUS)。

我在安全XML中使用匿名标记:

<security:anonymous />

我可以通过AnonymousAuthenticationFilter.doFilter调试进入的匿名用户,但SessionRegistry.registerNewSession永远不会被调用,很可能是因为匿名用户没有委托人。

所以我只是在寻找想法。我希望能够列出匿名会话的计数以及其他注册用户。

2 个答案:

答案 0 :(得分:1)

您可以扩展AnonymousAuthenticationFilter并覆盖createAuthentication方法(它用于覆盖)。

然后,由于此方法仅在新的匿名身份验证时调用,因此无论何时调用它,您都可以在某处增加计数器,或者以任何方便的方式对它们进行计数。你只需要计算对方法的调用。

答案 1 :(得分:0)

这是counting anonymous's in Spring Security的实现。

public class ProxyAuthenticationFilter extends AnonymousAuthenticationFilter {

        private String key = "key";

        public ProxyAuthenticationFilter() {
            super(key);
        }

        public ProxyAuthenticationFilter(String key, Object principal, List<GrantedAuthority> authorities) {
    super(key, principal, authorities);
        }

        @Override
        protected Authentication createAuthentication(HttpServletRequest request) {

            // do increment and store somewhere 

            return super.createAuthentication(request);
        }
}


@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http.anonymous().authenticationFilter(proxyAuthenticationFilter());
        }

        @Bean
        protected ProxyAuthenticationFilter proxyAuthenticationFilter() {
            return new ProxyAuthenticationFilter();
        }
    }
}