在我的Spring MVC Web应用程序中,只有具有足够权限的用户才能访问某些区域.我需要能够允许用户以不同的用户身份登录才能使用这些页面(有点像覆盖),而不仅仅是“拒绝访问”消息.
如何使用Spring Security执行此操作?
这是我期待的流程,更详细一点:
>用户A从外部应用程序进入页面X,并通过标头进行身份验证
>用户A无权使用页面X,因此被带到登录屏幕,并显示一条消息,表明他们必须以具有足够权限的用户身份登录才能使用此页面
>用户B登录并具有足够的特权,并被带到第X页.
如何使用Spring Security执行此操作?
这是我的spring安全配置文件:
logout logout-url="/logout" />
我正在使用Spring Security 3.1 Active Directory连接功能的略微修改版本.修改只是加载所有用户组,包括通过组嵌套到达的组,而不仅仅是用户直接成员的组.我还使用自定义用户对象,其中嵌入了我的应用程序的User对象,以及执行常规LDAP映射的自定义LDAP映射器,然后添加到我的用户中.
有一种特殊的身份验证方案尚未实现,其中用户根据以单点登录方式从外部应用程序(或通过Kerberos)传递的用户名进行身份验证.
如果您在安全上下文中定义它们,如下所示:
您可以在SimpleUrlAuthenticationFailureHandler
中设置defaultFailureUrl,当具有较少权限的用户尝试访问安全URL时,FaliureHandler应将您重定向到defaultFailureUrl,这可能是您的登录页面.
您可以在filter的FORM_LOGIN_FILTER位置注入FaliureHandler.
在评论中回答1).
考虑到命名空间配置,这比我想象的要多一些.
您需要做的是删除< form-login>定义而不是添加’custom’UsernamePasswordAuthenticationFilter(这是处理< form-login>元素的过滤器).
您还需要删除< access-denied-handler>.
所以你的配置看起来像这样:
required properties,but you can read about them in the docs -->
如果你还没有,一般也看看spring docs on custom filters.我们目前在当前公司中使用此配置,如果页面上没有所需权限,则强制用户重新登录.