为用户角色设置max-sessions

时间:2015-01-23 02:09:10

标签: spring spring-mvc

在Spring MVC中,我想为不同的USER ROLES使用不同的max-session。例如," admin"角色应该被允许使用3个最大会话和"用户"应该允许角色仅使用1个最大会话。

在spring-security.xml中,可以设置,但适用于所有用户。 我无法在角色方面实现它。有可能实现它的角色吗?

弹簧security.xml文件

...
<http auto-config="true" use-expressions="true">
    ...
    <session-management invalid-session-url="/">
        <concurrency-control max-sessions="1" expired-url="/" 
            error-if-maximum-exceeded="false" />
    </session-management>
</http>
<authentication-manager>
    <authentication-provider>
        <password-encoder ref="encoder" />
        <jdbc-user-service data-source-ref="dataSource"
            users-by-username-query="SELECT USERNAME, PASSWORD, ENABLED FROM M_AD_USERS WHERE USERNAME=?"
            authorities-by-username-query="SELECT USERNAME, ROLE FROM M_AD_USER_ROLES WHERE USERNAME=?" />
    </authentication-provider>
</authentication-manager>
...

1 个答案:

答案 0 :(得分:0)

这是Spring框架的优点,因为它具有高度可配置性。

  1. 配置自定义SessionManagementFilter并在SESSION_MANAGEMENT_FILTER的位置使用它。

  2. 定义一个自定义(覆盖)ConcurrentSessionControlStrategy并通过配置来维护最大会话配置的地图。

  3. 在ConcurrentSessionControlStrategy的覆盖onAuthentication()方法中,使用此映射根据角色验证和保存用户会话。

  4. 希望这很清楚。