这个问题很简单。 我想限制来自不同机器/浏览器的相同login的用户访问:只有一个活用户会话是可能的。
Apache shiro库用于用户authentication和pipe理。
当然,这可以使用简单的synchornized地图等,但问题是:具有Apache Shiro特殊机制呢?
这个问题的另一个变种:如何尊重使用apache shirologin系统的所有主题列表?
阿帕奇 – 如何限制文件的最大下载速度? (如果不是apache,我可以运行lighthttpd)
在Apache虚拟主机之间传输会话数据
Http POST在URL中丢弃端口
.htaccess将所有子文件夹内容(有和没有结束斜杠)redirect到相同的子文件夹
用于WAMP服务器上PHP 5.6的Sqlsrv
UPD:
澄清我的问题。 我的愿望是有这样的代码(我知道,没有这样的类例外,但想法必须更清洁):
Subject currentUser = SecurityUtils.getSubject(); UsernamePasswordToken token = new UsernamePasswordToken(login,password); try { currentUser.login(token); } catch (AlreadyAuthenticatedException aae) { errorMsg = "You should logoff on another machine!"; }
如何在EC2上使用Apache时允许我的apache用户上传到用户目录?
Apache Commonsfile upload – stream意外结束
如何在Apache中启用php7模块?
Flask,XAMPP – Apache,mod_wsgi,windows – 安装mod_wsgi
Apache CXF中的HTTP连接池
Session会话存储在SessionDAO并以sessionId作为密钥。 没有额外的努力,您不能通过委托人(用户名)访问会话。 但是,您可以扩展DefaultSecurityManager并通过SessionDAO.getActiveSessions检查所有活动的会话。 下面的代码可能是一个简单的例子(假设你没有使用WebSubject ):
public class UniquePrincipalSecurityManager extends org.apache.shiro.mgt.DefaultSecurityManager { @Override public Subject login(Subject subject,AuthenticationToken token) throws AuthenticationException { String loginPrincipal = (String) token.getPrincipal(); DefaultSessionManager sm = (DefaultSessionManager) getSessionManager(); for (Session session : sm.getSessionDAO().getActiveSessions()) { SimplePrincipalCollection p = (SimplePrincipalCollection) session .getAttribute(DefaultSubjectContext.PRINCIPALS_SESSION_KEY); if (p != null && loginPrincipal.equals(p.getPrimaryPrincipal())) { throw new AlreadyAuthenticatedException(); } } return super.login(subject,token); } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。