解决方案


/*** @Author ShenTuZhiGang* @Version 1.0.0* @Date 2020-03-21 13:10*/@Component
public class CustomSavedRequestAwareAuthenticationSuccessHandler extends SavedRequestAwareAuthenticationSuccessHandler {@AutowiredILogService iLogService;@Overridepublic void onAuthenticationSuccess(HttpServletRequest httpServletRequest,HttpServletResponse httpServletResponse,Authentication authentication)throws ServletException, IOException {RequestCache requestCache = new HttpSessionRequestCache();SavedRequest savedRequest = requestCache.getRequest(httpServletRequest,httpServletResponse);String ip = IPUtil.getIPAddress(httpServletRequest);AuthenticationUser user = (AuthenticationUser) authentication.getPrincipal();logSuccess(ip,user);String accept = httpServletRequest.getHeader("Accept");MediaType acceptMediaType;if(StringUtils.isEmpty(accept)){acceptMediaType = MediaType.APPLICATION_JSON;}else{String[] str = accept.split(",");if(str.length>0){try {acceptMediaType = MediaType.valueOf(str[0]);}catch (InvalidMediaTypeException ex){acceptMediaType = MediaType.APPLICATION_JSON;}}else{acceptMediaType = MediaType.APPLICATION_JSON;}}if(MediaType.TEXT_HTML.compareTo(acceptMediaType)==0){if(savedRequest != null){//url = savedRequest.getRedirectUrl();super.onAuthenticationSuccess(httpServletRequest, httpServletResponse, authentication);}else{getRedirectStrategy().sendRedirect(httpServletRequest,httpServletResponse,"/");}}else if(MediaType.APPLICATION_JSON.compareTo(acceptMediaType)==0){ResponseBean ok = ResponseBean.ok("登录成功!", user);HttpServletUtil.writeObjectToResponse(httpServletResponse,ok);}else if(MediaType.ALL.compareTo(acceptMediaType)==0){ResponseBean ok = ResponseBean.ok("登录成功!", user);HttpServletUtil.writeObjectToResponse(httpServletResponse,ok);}}private void logSuccess(String ip, AuthenticationUser user){//登录日志Log loginLog = new Log();loginLog.setOperation("登录");loginLog.setType("login");loginLog.setIp(ip);loginLog.setOperator(user.getUsername());loginLog.setTime(LocalDateTime.now());loginLog.setStatus("success");loginLog.setRemark("登录成功!");iLogService.save(loginLog);}
}

参考文章

Spring Boot 同一URL返回不同资源

HTTP报文头Accept和Content-Type总结

Spring Security——根据请求Header[Accept]不同返回不同类型资源解决方案相关推荐

  1. Spring Security自定义登录验证及登录返回结果

    Spring Security自定义登录验证及登录返回结果 一.功能描述 二.处理逻辑 简单流程 自定义UserDetails 自定义UserDetailsDAO 自定义UserDetailsServ ...

  2. Spring Security 实战:登录成功后返回 JWT Token

    点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 170元买400元书的机会又来啦! 1. 前言 欢迎阅读 Spring Security 实 ...

  3. spring security导致登录后从https跳转至http解决方案

    1. 项目为spring boot项目,由原来的http连接更换为https连接,因项目中配置的了spring security,登录被spring security拦截重定向后会跳转到http 解决 ...

  4. Spring Security OAuth2.0_实现分布式认证授权_网关资源服务配置_Spring Security OAuth2.0认证授权---springcloud工作笔记152

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 然后我们再继续看,因为我们说,我们的网关要进行认证对吧,对来的请求进行认证. 然后我们这里把网关微 ...

  5. mysql int 判断_PHP通过PDO查MySQL查询int字段返回string类型,解决方案

    虽说PHP是弱类型的语言,但不代表没类型,乱转也是个问题,因为要进行数据比较,判断,还要和其它语言数据交互.这个问题一定要解决的.但网上的标准答案似乎没提驱动问题,此文结合作者经验详细说明. 1.PD ...

  6. Spring Security 实战:使用 JWT 认证访问接口

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 1. 前言 欢迎阅读Spring Security 实战 ...

  7. Spring MVC实现Spring Security,Spring Stomp websocket Jetty嵌入式运行

    使用Spring框架各个组件实现一个在线聊天网页,当有用户连接WebSocket,服务器监听到用户连接会使用Stomp推送最新用户列表,有用户断开刷新在线列表,实时推送用户聊天信息.引入Jetty服务 ...

  8. 使用Spring Security对RESTful服务进行身份验证

    1.概述 本文重点介绍如何针对提供安全服务的安全REST API进行身份验证 -主要是RESTful用户帐户和身份验证服务. 2.目标 首先,让我们看一下参与者-典型的启用了Spring Securi ...

  9. 学成在线-第16天-讲义- Spring Security Oauth2 JWT RSA加解密

    学成在线-第16天-讲义- Spring Security Oauth2 JWT 1 用户认证需求分析 1.1 用户认证与授权 ​ 截至目前,项目已经完成了在线学习功能,用户通过在线学习页面点播视频进 ...

最新文章

  1. USTC并行计算复习
  2. GDI 泄漏检测方法
  3. js bom window对象
  4. Xilinx中时钟资源:模式时钟管理器(MMCM)的使用
  5. Probabilistic Principal Component Analysis
  6. Android图像变化
  7. 记一次线上服务假死排查过程
  8. 【计蒜客 - 2019南昌邀请赛网络赛 - I】Max answer(单调栈,RMQ)
  9. 数据切分——MySql表分区概述
  10. logistic回归详解
  11. ffmpeg详细安装教程,亲测有效!
  12. 天津理工大学物联网通信技术实验1:数字基带信号(NRZ、NRZ-I、AMI、HDB3信道编码)
  13. 机器学习与深度学习视频讲解
  14. 复联4定档 4.24——十一年21部漫威电影,用数据为你梳理口碑、票房、主演最佳......
  15. 如何更改python界面颜色_pycharm修改界面主题颜色的方法 pycharm怎么恢复默认设置...
  16. Java给pdf添加页码(添加页眉页脚)
  17. 微信小程序的后台在哪里云开发控制台操作方法
  18. 小米12X、小米12、小米12 Pro参数对比
  19. 大学计算机课算绩点吗,大学体育成绩算入绩点吗?
  20. 开发效率不高?墙裂推荐这十款精选IntelliJ Idea插件

热门文章

  1. SQLite介绍、学习笔记、性能测试
  2. java 泛型int_Java 泛型
  3. 企业所得税汇算清缴系统服务器,【图解】汇算清缴风险控制本周五发布,操作流程这里全有!...
  4. 亚马逊评价抓取插件_亚马逊运营必备插件
  5. mysql开启perform sch_MySQL Performance schema设置的一些建议选项
  6. 密码必须至少为6个字符_【每日一题】| 常见的编码方式之栅栏密码
  7. mysql帐户权限replace_mysql 用户管理和权限设置
  8. Android Studio同步失败设置代理,Android Studio如何设置代理?
  9. 计算机io工作方式,QEMU/KVM和VirtIO工作模式
  10. java svg image xlink_SVG基础 | SVG image 元素