2015-08-28 160 views
1

我们正在开发一个应用程序,该应用程序可以在不同客户端的不同域(或可能只是子域)上访问。基于http域名与spring-security的身份验证

例如,client1将使用client1.ourapp.com,client2将使用client2.ourapp.com。基本上这两个域的应用程序都是相同的,主要区别在于品牌(即每个站点上的不同徽标),当然内容将取决于使用的域。

事情是,应该有用户,他们只能登录这些网站之一,其他用户(如管理员)应该能够登录到这两个。我在春季安全方面有一些体面的经验,但我从来没有做过这样的事情,在这方面我找不到任何文档。我正在考虑创建像ROLE_CLIENT1和ROLE_CLIENT2这样的权威,但我不知道如何让Spring Security根据这些权威来检查请求域。

是否有一些开箱即用的支持,或者我应该弄脏自己的手,并通过一些自定义代码检查请求域和用户权限拦截身份验证过程?

回答

0

您可以创建自定义AuthenticationProvider以及自定义UserNamePasswordAuthenticationToken,以便定义比登录名/密码更多的身份验证属性。

通过这种方式,您可以将域添加为第三个身份验证属性,并在您的自定义AuthenticationProvider的身份验证方法中使用它。在这个方法里面,你将不得不施放authenticationToken。

您还需要创建自定义UserNamePasswordAuthenticationToken的实例,使您可以从HttpRequest的获取域值(如果这个属性是由用户提供的登录表单的第三场)或ServletContext的自定义UsernamePasswordAuthenticationFilter(如果你想采取DNS域名)。

当然,您的数据库和用户模型对象需要有足够的关于域和ROLES的信息来初始化证书颁发机构。

希望它有帮助!

+0

我正在寻找像这样 - 开始的方式,我想我可以在这里处理它,谢谢! – Kejml