Spring Security——根据请求Header[Accept]不同返回不同类型资源解决方案
解决方案
/*** @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]不同返回不同类型资源解决方案相关推荐
- Spring Security自定义登录验证及登录返回结果
Spring Security自定义登录验证及登录返回结果 一.功能描述 二.处理逻辑 简单流程 自定义UserDetails 自定义UserDetailsDAO 自定义UserDetailsServ ...
- Spring Security 实战:登录成功后返回 JWT Token
点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 170元买400元书的机会又来啦! 1. 前言 欢迎阅读 Spring Security 实 ...
- spring security导致登录后从https跳转至http解决方案
1. 项目为spring boot项目,由原来的http连接更换为https连接,因项目中配置的了spring security,登录被spring security拦截重定向后会跳转到http 解决 ...
- Spring Security OAuth2.0_实现分布式认证授权_网关资源服务配置_Spring Security OAuth2.0认证授权---springcloud工作笔记152
技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 然后我们再继续看,因为我们说,我们的网关要进行认证对吧,对来的请求进行认证. 然后我们这里把网关微 ...
- mysql int 判断_PHP通过PDO查MySQL查询int字段返回string类型,解决方案
虽说PHP是弱类型的语言,但不代表没类型,乱转也是个问题,因为要进行数据比较,判断,还要和其它语言数据交互.这个问题一定要解决的.但网上的标准答案似乎没提驱动问题,此文结合作者经验详细说明. 1.PD ...
- Spring Security 实战:使用 JWT 认证访问接口
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 1. 前言 欢迎阅读Spring Security 实战 ...
- Spring MVC实现Spring Security,Spring Stomp websocket Jetty嵌入式运行
使用Spring框架各个组件实现一个在线聊天网页,当有用户连接WebSocket,服务器监听到用户连接会使用Stomp推送最新用户列表,有用户断开刷新在线列表,实时推送用户聊天信息.引入Jetty服务 ...
- 使用Spring Security对RESTful服务进行身份验证
1.概述 本文重点介绍如何针对提供安全服务的安全REST API进行身份验证 -主要是RESTful用户帐户和身份验证服务. 2.目标 首先,让我们看一下参与者-典型的启用了Spring Securi ...
- 学成在线-第16天-讲义- Spring Security Oauth2 JWT RSA加解密
学成在线-第16天-讲义- Spring Security Oauth2 JWT 1 用户认证需求分析 1.1 用户认证与授权 截至目前,项目已经完成了在线学习功能,用户通过在线学习页面点播视频进 ...
最新文章
- USTC并行计算复习
- GDI 泄漏检测方法
- js bom window对象
- Xilinx中时钟资源:模式时钟管理器(MMCM)的使用
- Probabilistic Principal Component Analysis
- Android图像变化
- 记一次线上服务假死排查过程
- 【计蒜客 - 2019南昌邀请赛网络赛 - I】Max answer(单调栈,RMQ)
- 数据切分——MySql表分区概述
- logistic回归详解
- ffmpeg详细安装教程,亲测有效!
- 天津理工大学物联网通信技术实验1:数字基带信号(NRZ、NRZ-I、AMI、HDB3信道编码)
- 机器学习与深度学习视频讲解
- 复联4定档 4.24——十一年21部漫威电影,用数据为你梳理口碑、票房、主演最佳......
- 如何更改python界面颜色_pycharm修改界面主题颜色的方法 pycharm怎么恢复默认设置...
- Java给pdf添加页码(添加页眉页脚)
- 微信小程序的后台在哪里云开发控制台操作方法
- 小米12X、小米12、小米12 Pro参数对比
- 大学计算机课算绩点吗,大学体育成绩算入绩点吗?
- 开发效率不高?墙裂推荐这十款精选IntelliJ Idea插件
热门文章
- SQLite介绍、学习笔记、性能测试
- java 泛型int_Java 泛型
- 企业所得税汇算清缴系统服务器,【图解】汇算清缴风险控制本周五发布,操作流程这里全有!...
- 亚马逊评价抓取插件_亚马逊运营必备插件
- mysql开启perform sch_MySQL Performance schema设置的一些建议选项
- 密码必须至少为6个字符_【每日一题】| 常见的编码方式之栅栏密码
- mysql帐户权限replace_mysql 用户管理和权限设置
- Android Studio同步失败设置代理,Android Studio如何设置代理?
- 计算机io工作方式,QEMU/KVM和VirtIO工作模式
- java svg image xlink_SVG基础 | SVG image 元素