编程知识 cdmana.com

SpringSecurity-3.基础篇 同账号多端登录被迫下线

SpringSecurity-3.基础篇 同账号多端登录被迫下线

maximumSession 设置为1 ,同一个session最大登录客户端数量。

expiredSessionsStrategy: 自定义Session超时策略

二、实例:

1.    建立自定义策略类:

com.zhl.springsecuritydemo.config.CustomExpiredSessionStrategy

public class CustomExpiredSessionStrategy implements SessionInformationExpiredStrategy {

    private RedirectStrategy redirectStrategy=new DefaultRedirectStrategy();

    private ObjectMapper objectMapper=new ObjectMapper();
    /*
    * 当Session失效后的处理策略
    * */
    @Override
    public void onExpiredSessionDetected(SessionInformationExpiredEvent event) throws IOException, ServletException {
        /*1.  跳转到 指定页面。
        * */
       // redirectStrategy.sendRedirect(event.getRequest(),event.getResponse(),"/invalid");
        /*2. 返回 json */

        Map<String,Object> map=new HashMap<>();
        map.put("code",403);
        map.put("msg","您的登录已经超时或者已经在另一台机器登录,您被迫下线。"
                +event.getSessionInformation().getLastRequest());

        String json = objectMapper.writeValueAsString(map);
        event.getResponse().setContentType("application/json;charset=utf-8");
        event.getResponse().getWriter().write(json);
    }
}

2. 配置

配置Session保护、失效策略指定为自定义策略。

               /*session的创建策略配置 */
        .and().sessionManagement().
               sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED)
               .sessionFixation().migrateSession()
               .maximumSessions(1).maxSessionsPreventsLogin(false)
                .expiredSessionStrategy(new CustomExpiredSessionStrategy())

 

效果:后登录的用户没有影响,先登录的账号被踢下线。

 

 

版权声明
本文为[张宏良]所创,转载请带上原文链接,感谢
https://my.oschina.net/u/1020373/blog/4839522

Scroll to Top