位置: IT常识 - 正文

SSM前后端分离技术(ssm算前后端分离吗)

发布时间:2024-01-11
SSM前后端分离技术 文章目录前言一、前后端分离技术和跨域二、两种不同的实现方案1.使用注解实现简单请求的跨域传输2.通过设置请求头和参数实现复杂请求的跨域传输3.将跨域解决方案的代码写进拦截器,或者过滤器实现跨域。拦截器过滤器总结前言

推荐整理分享SSM前后端分离技术(ssm算前后端分离吗),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:ssm前后端分离项目,ssm前后端分离,ajax实现交互,ssm前后端分离,ajax实现交互,ssm算前后端分离吗,前后端分离 sso方案,ssm 前后端分离,前后端分离 sso方案,ssr 前后端分离,内容如对您有帮助,希望把文章链接给更多的朋友!

本篇记录一下使用前后端分离来开发SSM项目。

一、前后端分离技术和跨域

目前,前后端分离项目早已占据市场的主流开发方式。因为它能把web端的代码和java业务实现的代码完全分离开来,使得协同开发变得更加便捷。即,前端工程师和后端工程师只需要预先规定好统一的API,就可以同步开发,大大降低项目的开发周期。 实现前后端分离需要解决的文体就是跨域传输。

我们都知道,在SSM项目中我们使用JSP来访问Servlet接口,实现前后端的交互,归根结底还是在同一个域进行传输,即端口号是相同的。但是在使用前后端分离开发的时候,我们需要在不同的域中间进行数据传输。最直观的就是,后端我们一般使用8080端口,前端可能会使用5500端口,这就意味着,前端和后端处在不同的域内。

SSM前后端分离技术(ssm算前后端分离吗)

跨域传输的根本原因是浏览器端的一种保护程序的机制。当前端域向后端域发送了请求,一般情况下,会有正常的响应数据。但是由于浏览器的保护机制,使得我们无法使用这些响应数据。浏览器需要的是后端必须返回给它一个允许跨域的请求头,否则,返回的数据就无法呈现在前端。那么怎么让后端返回的数据携带正确的请求头就是我们需要解决的问题。

二、两种不同的实现方案1.使用注解实现简单请求的跨域传输

代码如下:

@Controller@RequestMapping( "/login")@CrossOrigin("*")public class LoginController { //自动注入业务层 @Autowired private LoginService service; @RequestMapping(value = "loginVerify",method = RequestMethod.POST) @ResponseBody public ResultLayUi<User> login(String username, String password, HttpServletRequest request){ createLoginSession(username,request); return service.verifyLogin(username,password); }}

我们可以使用@CrossOrigin注解来实现一个临时的跨域传输访问。注解后边的括号可以填写允许跨域访问的域,例如@CrossOrigin(" * ")表示,允许所有的域访问。@CrossOrigin(“http://127.0.0.1:5500/login.html”)允许该IP访问。但是这种解决方案只适合简单请求。不适合复杂请求。

2.通过设置请求头和参数实现复杂请求的跨域传输

通过注解,我们只能实现简单的跨域请求,但无法实现复杂的跨域请求。但是我们可以通过在controller中设置请求头和请求参数来实现复杂请求的跨域传输。代码如下:

@Controller@RequestMapping( "/login")//@CrossOrigin("*")public class LoginController { //自动注入业务层 @Autowired private LoginService service; @RequestMapping(value = "loginVerify",method = RequestMethod.POST) @ResponseBody public ResultLayUi<User> login(String username, String password, HttpServletRequest request){ String origin = request.getHeader("Origin"); // 允许的跨域 response.setHeader("Access-Control-Allow-Origin",origin); // 允许携带Cookie response.setHeader("Access-Control-Allow-Credentials","true"); // 允许的请求头 预检请求需要这个设置 response.setHeader("Access-Control-Allow-Headers", "Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers,Authorization,Access-Token,token"); response.setHeader("Access-Control-Expose-Headers", "*");//响应客户端的头部 允许携带Token 等等 response.setHeader("Access-Control-Max-Age", "3600"); // 预检请求的结果缓存时间 if (request.getMethod().equals("OPTIONS")){ return false; } return service.verifyLogin(username,password); }}

通过这种方式,我们可以实现跨域请求。但是我们需要在每一个Controller方法中都设置这些代码。

3.将跨域解决方案的代码写进拦截器,或者过滤器实现跨域。

上边说到,我们需要在每一个controller中都配置如上代码,造成大量的代码冗余。我们可以把这些代码放进拦截器或者过滤器来实现一个封装的效果。

拦截器package com.glls.java2212.interceptor;import org.springframework.web.servlet.HandlerInterceptor;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * @date 2022/10/10 * @desc 拦截器 一个临时的 跨域解决方案 */public class MyInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { String origin = request.getHeader("Origin"); // 允许的跨域 response.setHeader("Access-Control-Allow-Origin",origin); // 允许携带Cookie response.setHeader("Access-Control-Allow-Credentials","true"); // 允许的请求头 预检请求需要这个设置 response.setHeader("Access-Control-Allow-Headers", "Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers,Authorization,Access-Token,token"); response.setHeader("Access-Control-Expose-Headers", "*");//响应客户端的头部 允许携带Token 等等 response.setHeader("Access-Control-Max-Age", "3600"); // 预检请求的结果缓存时间 if (request.getMethod().equals("OPTIONS")){ return false; } return true; }}过滤器package com.glls.java2212.filter;import org.springframework.stereotype.Component;import javax.servlet.*;import javax.servlet.annotation.WebFilter;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;/** * @date 2022/10/10 * @desc */@Component@WebFilter(urlPatterns = "/*", filterName = "CorsFilter")public class CorsFilter implements Filter { @Override public void doFilter(ServletRequest req, ServletResponse resp, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) resp; String origin = request.getHeader("Origin"); // 允许的跨域 response.setHeader("Access-Control-Allow-Origin",origin); // 允许携带Cookie response.setHeader("Access-Control-Allow-Credentials","true"); // response.setHeader("Access-Control-Allow-Headers", "Content-Type,content-type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers,Authorization,Access-Token,token"); response.setHeader("Access-Control-Expose-Headers", "*");//响应客户端的头部 允许携带Token 等等 response.setHeader("Access-Control-Max-Age", "3600"); // 预检请求的结果缓存时间 // if (!request.getMethod().equals("OPTIONS")){ //非 预检请求 放行 ,预检请求 不放行 预检请求 直接响应允许跨域的信息即可 无需访问到后台接口 filterChain.doFilter(request, response); } }}总结

跨域请求的方案有很多,此处只是简单的介绍了两种。分别对应简单的请求跨域和复杂的请求跨域。

本文链接地址:https://www.jiuchutong.com/zhishi/292410.html 转载请保留说明!

上一篇:jQuery 解决低版本安全漏洞 并兼容旧版写法及依赖老插件(jquery版本)

下一篇:【CSS扩展】VUE如何使用或修改element plus中自带的CSS全局变量来定义样式(vue添加css)

  • 苹果手机支持无线充电吗(苹果手机支持无线充电的型号)

    苹果手机支持无线充电吗(苹果手机支持无线充电的型号)

  • 艺术字大小怎么设置(艺术字大小怎么设置为120号)

    艺术字大小怎么设置(艺术字大小怎么设置为120号)

  • 华为手机滚动截屏不够长怎么办(华为手机滚动截屏怎么使用)

    华为手机滚动截屏不够长怎么办(华为手机滚动截屏怎么使用)

  • 苹果11需要更新13.4.1吗(苹果11需要更新16.5吗)

    苹果11需要更新13.4.1吗(苹果11需要更新16.5吗)

  • iphone11摔了一下会影响硬件吗(iPhone11摔了一下面容不能用)

    iphone11摔了一下会影响硬件吗(iPhone11摔了一下面容不能用)

  • 描述文件会盗取信息吗(描述文件会盗取数据吗)

    描述文件会盗取信息吗(描述文件会盗取数据吗)

  • qq硬盘在哪里(qq硬盘的东西哪儿去了)

    qq硬盘在哪里(qq硬盘的东西哪儿去了)

  • windows无法修复此计算机原因(Windows无法修复怎么办)

    windows无法修复此计算机原因(Windows无法修复怎么办)

  • 华为nova7是双卡吗(华为nova7是双卡还是单卡)

    华为nova7是双卡吗(华为nova7是双卡还是单卡)

  • 抖音的发现在哪里(抖音的发现在哪里找?)

    抖音的发现在哪里(抖音的发现在哪里找?)

  • 怎么关联nintendo account(怎么关联医保卡)

    怎么关联nintendo account(怎么关联医保卡)

  • 怎么在qq上找到以前删除的人(怎么在QQ上找到发黄的空间)

    怎么在qq上找到以前删除的人(怎么在QQ上找到发黄的空间)

  • 不激活windows会影响正常使用吗(不激活windows会怎样)

    不激活windows会影响正常使用吗(不激活windows会怎样)

  • 手机卡停机怎么查号码(手机卡停机怎么恢复)

    手机卡停机怎么查号码(手机卡停机怎么恢复)

  • 联想电脑进入bios方法(联想电脑进入bios方法u盘启动)

    联想电脑进入bios方法(联想电脑进入bios方法u盘启动)

  • 苹果11pro max夜景模式怎么使用(苹果11pro max夜景模式)

    苹果11pro max夜景模式怎么使用(苹果11pro max夜景模式)

  • 手机桌面黑色怎么恢复(手机桌面黑色怎么调成白色)

    手机桌面黑色怎么恢复(手机桌面黑色怎么调成白色)

  • iphonexr定时开机设置(iphonexr定时开关机)

    iphonexr定时开机设置(iphonexr定时开关机)

  • 华为mate20看视频模糊

    华为mate20看视频模糊

  • 一加7pro支持nfc吗(一加7Pro支持5g吗)

    一加7pro支持nfc吗(一加7Pro支持5g吗)

  • 万用表怎么看什么档(万用表如何查)

    万用表怎么看什么档(万用表如何查)

  • 腾讯电脑管家怎么网络修复?(腾讯电脑管家怎么修复dll)

    腾讯电脑管家怎么网络修复?(腾讯电脑管家怎么修复dll)

  • 安全中心启动后自动关闭(安全中心总是弹出来)

    安全中心启动后自动关闭(安全中心总是弹出来)

  • 将uniAPP项目导入到微信开发者工具中保姆级教程(uniapp怎么引入elementui)

    将uniAPP项目导入到微信开发者工具中保姆级教程(uniapp怎么引入elementui)

  • 【CSS】CSS 背景设置 ⑨ ( 背景半透明设置 )(css背景图)

    【CSS】CSS 背景设置 ⑨ ( 背景半透明设置 )(css背景图)

  • 增值税发票综合服务平台密码
  • 税务稽查以前年度进项税额转出
  • 工会经费计税依据包括社保吗
  • 股东个人财产转让协议
  • 如何分辨海关完税凭证的真假?
  • 进口关税的计算方式
  • 服务行业人工费计入什么科目
  • 财务报告与财务报表的联系与区别
  • 劳务服务有什么
  • 减免税备案登记表样本
  • 卷式发票是什么样的
  • 管家婆软件记账流程
  • 金蝶旗舰版如何反过账
  • 个税申报本期收入包括社保吗
  • 关联的公司
  • 企业用于存货的支出
  • 支付股权投资的会计科目
  • 增值税专用发票的税率是多少啊
  • 汽车修理厂可以安装车牌吗
  • 小微企业季度所得税怎么计算
  • 费用与支出的区别是什么
  • 每股收益怎么计算净利润
  • 财务转账一般多久到账
  • 福利费的进项税怎么做账
  • windows10如何卸载edge
  • 多交增值税可以退吗
  • realjbox.exe - realjbox是什么进程 作用是什么
  • php获取访问者qq
  • 微软 Windows10
  • linux怎么创建一个用户组
  • macos big sur使用技巧
  • node -v
  • PHP:base64_decode()的用法_url函数
  • 员工食堂餐费可以税前扣除吗
  • 收到银行退回的会计分录
  • 赞助支出计入应纳税所得额吗
  • 做电脑配件的公司
  • YII2.0之Activeform表单组件用法实例
  • service的启动方式及生命周期
  • 未交土地出让金的处罚
  • 企业所得税核定征收方法有哪两种
  • 观察者模式java实现
  • ChatGPT及相关产品体验与研究
  • 【深度学习】详解 MoCo
  • 电子税务局购票员变更
  • 如何解决面颊毛孔粗大
  • 以前年度的成本忘了结转然后怎么办
  • 陈列费属于什么类目的
  • 城市维护建设税属于中央还是地方
  • 兼职工资帐务处理
  • 什么叫挂往来
  • 纳税调整调减有哪些
  • 管理人员工资属于酌量性固定成本
  • 资产负债表中应交税费为负数是什么意思
  • sqlserver 版本号
  • 在幻灯片母版中
  • win10执行数据保护如何开启
  • 灵活设置成员
  • 方正电脑升级
  • mac 阿里旺旺怎么使用
  • win8 系统设置
  • win8系统怎样
  • win8如何打开任务管理器
  • win8外接显示器没反应怎么办
  • d命令怎么用
  • opengl控制物体移动
  • 如何从0开始赚钱
  • cocos2d官网
  • opengl配置vc6.0
  • jq监听input框value值
  • unity ui
  • node搭建项目
  • android 重启app
  • python 断言详细讲解用法及其案例
  • 陕西省国家励志奖学金证书查询入口
  • 河南洛阳医疗保险电话
  • 社保和税局关联后还要申报吗
  • 河南电子发票申请流程
  • 税控系统减免税报表里
  • 可以去税务局交医社保吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号