当前位置: 首页 > news >正文

【SpringSecurity】二、自定义页面前后端分离

文章目录

    • 1、用户认证流程
      • AuthenticationSuccessHandler AuthenticationFailureHandler
      • SecurityFilterChain配置
      • 用户认证信息
    • 2、会话并发处理
      • 2.1、实现处理器接口
      • 2.2、SecurityFilterChain配置

1、用户认证流程

AuthenticationSuccessHandler AuthenticationFailureHandler

  • 登录成功后调用:AuthenticationSuccessHandler
  • 登录失败后调用:AuthenticationFailureHandler
    在这里插入图片描述

public class SecurityAuthenticationSuccessHandler implements AuthenticationSuccessHandler {@Overridepublic void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {//获取用户身份信息Object principal = authentication.getPrincipal();//创建结果对象HashMap result = new HashMap();result.put("code", 0);result.put("message", "登录成功");result.put("data", principal);//转换成json字符串String json = JSON.toJSONString(result);//返回响应response.setContentType("application/json;charset=UTF-8");response.getWriter().println(json);}
}

SecurityFilterChain配置

form.successHandler(new SecurityAuthenticationSuccessHandler()) //认证成功时的处理

用户认证信息

@RestController
public class IndexController {@GetMapping("/")public Map index(){System.out.println("index controller");SecurityContext context = SecurityContextHolder.getContext();//存储认证对象的上下文Authentication authentication = context.getAuthentication();//认证对象String username = authentication.getName();//用户名Object principal =authentication.getPrincipal();//身份Object credentials = authentication.getCredentials();//凭证(脱敏)Collection<? extends GrantedAuthority> authorities = authentication.getAuthorities();//权限System.out.println(username);System.out.println(principal);System.out.println(credentials);System.out.println(authorities);//创建结果对象HashMap result = new HashMap();result.put("code", 0);result.put("data", username);return result;}
}

2、会话并发处理

后登录的账号会使先登录的账号失效

2.1、实现处理器接口

实现接口SessionInformationExpiredStrategy

package com.atguigu.securitydemo.config;public class MySessionInformationExpiredStrategy implements SessionInformationExpiredStrategy {@Overridepublic void onExpiredSessionDetected(SessionInformationExpiredEvent event) throws IOException, ServletException {//创建结果对象HashMap result = new HashMap();result.put("code", -1);result.put("message", "该账号已从其他设备登录");//转换成json字符串String json = JSON.toJSONString(result);HttpServletResponse response = event.getResponse();//返回响应response.setContentType("application/json;charset=UTF-8");response.getWriter().println(json);}
}

2.2、SecurityFilterChain配置

//会话管理
http.sessionManagement(session -> {session.maximumSessions(1).expiredSessionStrategy(new MySessionInformationExpiredStrategy());
});

http://www.mrgr.cn/news/82804.html

相关文章:

  • TCP Analysis Flags 之 TCP Retransmission
  • C 语言 strcpy 函数的进阶之旅
  • 国产编辑器EverEdit - 两种删除空白行的方法
  • Apache Paimon-实时数据湖
  • 机器学习算法深度解析:以支持向量机(SVM)为例及实战应用
  • 计算机网络——网络层—路由算法和路由协议
  • 鸿蒙APP之从开发到发布的一点心得
  • 前端实现大文件上传(文件分片、文件hash、并发上传、断点续传、进度监控和错误处理,含nodejs)
  • 每日AIGC最新进展(80): 重庆大学提出多角色视频生成方法、Adobe提出大视角变化下的人类视频生成、字节跳动提出快速虚拟头像生成方法
  • 医学图像分析工具01:FreeSurfer || Recon -all 全流程MRI皮质表面重建
  • ISP图像调优流程
  • Unity中 Xlua使用整理(一)
  • 数组和指针
  • jenkins入门6 --拉取代码
  • 5G学习笔记之SNPN系列之网络选择
  • 在K8S上部署OceanBase的最佳实践
  • <OS 有关> DOS 批处理命令文件,用于创建 python 虚拟机,并进入虚拟机状态执行后继命令 判断虚拟机是否存在,在批处理文件中自定义 虚拟机名字
  • ffmpeg 常用命令
  • day01_ Java概述丶开发环境的搭建丶常用DOS命令
  • selenium合集
  • 【C++】const关键字_运算符重载_继承
  • 基于深度学习的视觉检测小项目(七) 开始组态界面
  • 141.《mac m系列芯片安装mongodb详细教程》
  • 高效内存管理与调试技巧:深入解析 AddressSanitizer
  • Elasticsearch:基础概念
  • 对比显式启用-u_printf_float和-u_scanf_float前后的代码内存体量实验