我们正在开发一个应用程序,可以在不同的域(或可能只是子域)上为不同的客户端访问。
例如,client1将使用client1.ourapp.com,client2将使用client2.ourapp.com。基本上app在两个域上都是相同的,主要区别在于品牌(即每个站点上的不同徽标),当然内容将取决于使用的域。
事情是,应该有用户,他们只能登录其中一个网站,其他用户(如管理员)应该能够登录到这两个网站。我在弹簧安全方面有一些不错的经验,但我从未做过这样的事情,我也找不到任何关于此问题的文件。我正在考虑创建像ROLE_CLIENT1和ROLE_CLIENT2这样的权限,但我不知道如何让Spring Security检查针对这些权限的请求域。
是否有一些开箱即用的支持,或者我应该弄脏手,并通过一些自定义代码检查请求域和用户权限拦截身份验证过程?
答案 0 :(得分:0)
您可以创建自定义AuthenticationProvider以及自定义UserNamePasswordAuthenticationToken,以便定义比登录/密码更多的身份验证属性。
这样,您可以添加域作为第三个身份验证属性,并在自定义AuthenticationProvider的身份验证方法中使用它。在此方法中,您必须转换authenticationToken。
您还需要一个自定义UsernamePasswordAuthenticationFilter来创建自定义UserNamePasswordAuthenticationToken的实例,并将您可以从HttpRequest获取的域值(如果此属性由用户提供为登录表单的第三个字段)或ServletContext(如果你想拿dns域名。)
当然,您的数据库和用户模型对象需要有足够的域信息和ROLES到初始凭证权限。
希望它有所帮助!