Spring Security:服务器启动的会话终止

时间:2013-11-28 17:54:35

标签: java session spring-security

我使用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}}行)

我看到其他人有这个问题,没有答案,我不知道我能做什么。在我的头顶,有两个选项:

  • 添加过滤器以捕获每个请求并手动检查其中的会话,或

  • 重新配置系统以使用数据库验证每个请求,或

  • 手动实施我自己的会话管理系统

但所有这些似乎都是愚蠢和不必要的,并且让我不确定如何完成它们。

这不是一个不常见的问题 - 请问任何人可以对它进行一些说明吗?

0 个答案:

没有答案