我使用Spring Security 3.1.4开发了一个系统。大多数配置都是开箱即用的。
系统的用户在DAO中描述,登录时,请求由AuthenticationProvider
的实现提供服务,UsernamePasswordAuthenticationToken
在数据库中查找并返回@PreAuthorize
。这在登录时发生一次。
然后使用@PreAuthorize("hasRole('ROLE_USER') and hasPermission(#order,'createOrder')")
public Response createOrder(Order order)
{
...
}
注释保护服务器API;例如:
List<SessionInformation> sessions = registry.getAllSessions( username, false );
for ( SessionInformation ses : sessions )
{
ses.expireNow();
registry.removeSessionInformation( ses.getSessionId() );
}
到目前为止,这么好;上述安全要求的两个要素都可以正常工作。
问题来自于admin用户可以删除其他用户,将其从数据库中删除。发生这种情况时,应该销毁目标用户的会话。
尝试如下:
removeSessionInformation
然而,尽管此代码找到会话并使其过期,但相关用户仍然可以进行进一步的API调用而不会发生意外(我也尝试过没有{{1}}行)
我看到其他人有这个问题,没有答案,我不知道我能做什么。在我的头顶,有两个选项:
添加过滤器以捕获每个请求并手动检查其中的会话,或
重新配置系统以使用数据库验证每个请求,或
手动实施我自己的会话管理系统
但所有这些似乎都是愚蠢和不必要的,并且让我不确定如何完成它们。
这不是一个不常见的问题 - 请问任何人可以对它进行一些说明吗?