我们正在开发一个可在不同域(或可能只是子域)上为不同客户端访问的应用程序。
例如,client1将使用client1.ourapp.com,client2将使用client2.ourapp.com。基本上,两个域上的应用都是相同的,主要区别在于品牌(即每个站点上的徽标不同),当然内容取决于所使用的域。
事实是,应该有用户,他们只能在这些站点之一上登录,其他用户(例如管理员)应该能够登录到这两个站点。我在Spring Security方面有一些不错的经验,但是我从来没有做过这样的事情,而且我对此也找不到任何文献资料。我正在考虑创建诸如ROLE_CLIENT1和ROLE_CLIENT2之类的权限,但是我不知道如何使Spring Security来针对这些权限检查请求域。
是否有一些现成的支持,还是我应该动手使用一些自定义代码检查请求域和用户权限来拦截身份验证过程?
您可以创建自定义AuthenticationProvider以及自定义UserNamePasswordAuthenticationToken,以定义比登录名/密码更多的身份验证属性。
这样,您可以将域添加为第三个身份验证属性,并根据需要在自定义AuthenticationProvider的身份验证方法中使用它。在此方法内部,您将必须强制转换authenticationToken。
您还将需要一个自定义UsernamePasswordAuthenticationFilter,它创建自定义UserNamePasswordAuthenticationToken的实例,并放置您可以从HttpRequest获取的域值(如果此属性由用户作为登录表单的第三字段提供)或ServletContext(如果您希望以dns域名)。
当然,您的数据库和用户模型对象需要具有有关域和ROLES的足够信息才能初始化凭据颁发机构。
希望能帮助到你!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句