在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>
...
答案 0 :(得分:0)
这是Spring框架的优点,因为它具有高度可配置性。
配置自定义SessionManagementFilter并在SESSION_MANAGEMENT_FILTER的位置使用它。
定义一个自定义(覆盖)ConcurrentSessionControlStrategy并通过配置来维护最大会话配置的地图。
在ConcurrentSessionControlStrategy的覆盖onAuthentication()方法中,使用此映射根据角色验证和保存用户会话。
希望这很清楚。