将登录限制为可调整的角色集的最佳方式



我要求只允许某些用户角色登录。角色集可能在运行时更改。

UsernamePasswordToken token = new UsernamePasswordToken(username, password);
subject.login(token);

哪个实现是最合适/最安全的?

  1. 在调用subject.login()之前查找用户角色(在Shiro之外),如果不允许任何角色,则引发AuthenticationException
  2. 当用户拥有一个被允许的角色时,让JdbcRealm的authenticationQuery只返回一个密码(通过SQL JOIN)。
  3. 登录用户,检查角色/权限,如果不允许,立即注销并引发AuthenticationException
  4. 其他选项吗?

您可能需要在这里考虑用户行为。如果你的web应用程序让它看起来像一个用户无法注销,(IMHO)用户会做的第一件事是再试一次,第二件事是他们会打电话给帮助台,并尝试重置他们的密码。

这取决于您的实际应用程序,(因此对此持保留态度)。我建议让用户登录,然后阻止访问,例如,显示一个403页面("你不能通过")警告),或者显示404(这是GitHub所做的,因为它不会泄露有效页面存在的信息)。

这也简化了Shiro的实现,只需要为你的路由设置一个角色/权限。

最新更新