春季极限最大训练; 限制最大用户
问题内容:
我是否可以使用Spring Security来限制能够同时登录网站的最大用户数量?
绝对不是并发会话控制参数。例如,我要限制最大只允许1000个用户同时登录。如果超过该通知页面说明已超过最大用户数
问题答案:
您可以通过访问SessionRegistry来查找当前登录的用户,从而使用Spring Security的并发会话控制。在Spring Security
3中,ConcurrentSessionControlStrategy负责控制是否允许用户登录后创建会话。您可以扩展此类,并根据用户数量添加额外的检查:
public class MySessionAuthenticationStrategy extends ConcurrentSessionControlStrategy {
int MAX_USERS = 1000; // Whatever
SessionRegistry sr;
public MySessionAuthenticationStrategy(SessionRegistry sr) {
super(sr);
this.sr = sr;
}
@Override
public void onAuthentication(Authentication authentication, HttpServletRequest request, HttpServletResponse response) {
if (sr.getAllPrincipals().size() > MAX_USERS) {
throw new SessionAuthenticationException("Maximum number of users exceeded");
}
super.onAuthentication(authentication, request, response);
}
}
然后,您可以按照Spring Security参考手册中所述将其注入到安全名称空间中。
在Spring Security 2.0中,并发会话控件的实现略有不同,您可以改为自定义ConcurrentSessionController。