快速入门Web开发(下)(2)

简介: 快速入门Web开发(下)(2)

快速入门Web开发(下)(1):https://developer.aliyun.com/article/1548592


JWT

过滤器Filter

  • 出现的意义是因为校验这个操作每个访问的资源页都需要出现一次且代码相同,于是使用过滤器

  • 还要再启动文件中增加@ServletComponentScan来启动拦截服务

执行流程

过滤链

令牌校验

package com.example.webcase.filter;
    import com.alibaba.fastjson2.JSONObject;
    import com.example.webcase.pojo.JwtUtils;
    import com.example.webcase.pojo.Result;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.util.StringUtils;
    import javax.servlet.*;
    import javax.servlet.annotation.WebFilter;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    @Slf4j
    @WebFilter(urlPatterns = "/*")//要拦截的请求
    public class LoginFilter implements Filter {
        @Override
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
            // 获取请求的url来进行判断
            HttpServletRequest req= (HttpServletRequest) servletRequest;//请求对象()客户端给服务器(会带令牌)
            HttpServletResponse resp= (HttpServletResponse) servletResponse;//响应对象
            //获取url
            String url =req.getRequestURI();
            log.info("url:{}",url);
            if (url.contains("login")){
                log.info("登录");
                filterChain.doFilter(servletRequest,servletResponse);
                return;
            }
            // 获取token
           String jwt= req.getHeader("token");
            //判断token是否为空
            if(!StringUtils.hasLength(jwt)){
                log.info("未登入");
              Result error=  Result.error("NOT_LOGIN");
              // 将数据转换为json格式
              String notLogin= JSONObject.toJSONString(error);
              resp.getWriter().write(notLogin);
              return;
            }
            /* 校验令牌,不通过会报错*/
           try{
               JwtUtils.parseJWT(jwt);
           }catch (Exception e){
               e.printStackTrace();
               log.info("令牌解析失败");
               /* 打印错误信息 */
               Result error=  Result.error("NOT_LOGIN");
               String notLogin= JSONObject.toJSONString(error);
               resp.getWriter().write(notLogin);
               return;
           }
            log.info("解析成功");
            filterChain.doFilter(servletRequest,servletResponse);
        }
    }

拦截器

  • 拦截器
  • 使用@ServletComponentScan来开启对servlet组件的使用(在启动文件位置)(开启拦截器)

全局异常处理器

  • 注释二用来指定捕获异常种类

事物回滚

#spring事务管理日志
logging:
  level:
    org.springframework.jdbc.support.JdbcTransactionManager: debug
      
@Transactional

事物传播

AOP

  • 没有文件名的要求,只需要引用依赖后,添加 @Aspect 注释,并使用切入点表达式添加范围即可

@Aspect来标注类是aop类

  • 切入点可以理解为需要增强的方法
  • 使用aop后是使用基于目标对象生成的代理对象来运行

通知类型

通知顺序

通过使用@Order来控制顺序

切入点表达式

annotation

  • 定义一个注解,需要切入点需要在哪里就把该方法放在切入点上面
  • 该注解使用时,括号内的是定义注解的位置

连接点

  • 在方法中增加一个参数即可

案列

SpringBoot原理

配置文件的优先级

Bean

  • bean对象默认单列
  • springboot启动的时候loc容器就已经创建了,并实例化了对象放进了容器中

第三方Bean

  • 自定义的使用@Component
  • 第三方使用@Bean

为什么你能进行快捷的开发?

  • 起步依赖和自动配置

Maven高级

模块

  • 在依赖中输入要引入的依赖名即可
    继承

  • pom文件中的标签中的东西

  • 在父工程上添加项目的原本父工程后,然后将子工程原本的父工程换为新的换成父工程
  • 每个项目生成后,都会有springboot这个父工程的依赖

版本控制

方法二

聚合

Maven私服

技术栈

ngboot这个父工程的依赖

[外链图片转存中…(img-srTvanTe-1714097487488)]

版本控制

[外链图片转存中…(img-1fjrsuCB-1714097487488)]

[外链图片转存中…(img-eJyFXN7D-1714097487489)]

方法二

[外链图片转存中…(img-uG5OywVK-1714097487489)]

[外链图片转存中…(img-YILjjxyY-1714097487489)]

聚合

[外链图片转存中…(img-J4HRjBp7-1714097487490)]

[外链图片转存中…(img-Qt14Y3mp-1714097487490)]

[外链图片转存中…(img-mcc9ErXb-1714097487490)]

Maven私服

[外链图片转存中…(img-ofB5rvaA-1714097487491)]

[外链图片转存中…(img-tboNSNwu-1714097487491)]

[外链图片转存中…(img-yljPDnR6-1714097487491)]

[外链图片转存中…(img-6wo47DZR-1714097487492)]

[外链图片转存中…(img-sxoIl0nB-1714097487492)]

[外链图片转存中…(img-mtHjlikK-1714097487492)]

技术栈

[外链图片转存中…(img-oHkLu4cp-1714097487493)]

[外链图片转存中…(img-YYRYXa8W-1714097487493)]

[外链图片转存中…(img-BznHyq6r-1714097487494)]

[外链图片转存中…(img-UFAU2REN-1714097487495)]

[外链图片转存中…(img-CNQzX3FA-1714097487496)]

目录
相关文章
|
3月前
|
Linux 数据库 数据安全/隐私保护
Python web Django快速入门手册全栈版,共2590字,短小精悍
本教程涵盖Django从安装到数据库模型创建的全流程。第一章介绍Windows、Linux及macOS下虚拟环境搭建与Django安装验证;第二章讲解项目创建、迁移与运行;第三章演示应用APP创建及项目汉化;第四章说明超级用户创建与后台登录;第五章深入数据库模型设计,包括类与表的对应关系及模型创建步骤。内容精炼实用,适合快速入门Django全栈开发。
89 1
|
4月前
|
Web App开发 前端开发 JavaScript
鸿蒙5开发宝藏案例分享---Web适配一多开发实践
这是一份实用的鸿蒙Web多设备适配开发指南,针对开发者在不同屏幕尺寸下的布局难题提供了解决方案。文章通过三大法宝(相对单位、媒体查询和窗口监听)详细介绍如何实现智能适配,并提供了多个实战案例,如宫格布局、对话框变形和自适应轮播图等。此外,还分享了调试技巧及工具推荐,帮助开发者快速上手并优化性能。最后鼓励读者实践探索,并提示更多官方资源等待发现。
|
6月前
|
关系型数据库 MySQL 数据库
基于Flink CDC 开发,支持Web-UI的实时KingBase 连接器,三大模式无缝切换,效率翻倍!
TIS 是一款基于Web-UI的开源大数据集成工具,通过与人大金仓Kingbase的深度整合,提供高效、灵活的实时数据集成方案。它支持增量数据监听和实时写入,兼容MySQL、PostgreSQL和Oracle模式,无需编写复杂脚本,操作简单直观,特别适合非专业开发人员使用。TIS率先实现了Kingbase CDC连接器的整合,成为业界首个开箱即用的Kingbase CDC数据同步解决方案,助力企业数字化转型。
976 5
基于Flink CDC 开发,支持Web-UI的实时KingBase 连接器,三大模式无缝切换,效率翻倍!
|
6月前
|
机器学习/深度学习 开发框架 API
Python 高级编程与实战:深入理解 Web 开发与 API 设计
在前几篇文章中,我们探讨了 Python 的基础语法、面向对象编程、函数式编程、元编程、性能优化、调试技巧以及数据科学和机器学习。本文将深入探讨 Python 在 Web 开发和 API 设计中的应用,并通过实战项目帮助你掌握这些技术。
|
10月前
|
开发框架 搜索推荐 数据可视化
Django框架适合开发哪种类型的Web应用程序?
Django 框架凭借其强大的功能、稳定性和可扩展性,几乎可以适应各种类型的 Web 应用程序开发需求。无论是简单的网站还是复杂的企业级系统,Django 都能提供可靠的支持,帮助开发者快速构建高质量的应用。同时,其活跃的社区和丰富的资源也为开发者在项目实施过程中提供了有力的保障。
352 67
|
10月前
|
存储 前端开发 JavaScript
如何在项目中高效地进行 Web 组件化开发
高效地进行 Web 组件化开发需要从多个方面入手,通过明确目标、合理规划、规范开发、加强测试等一系列措施,实现组件的高效管理和利用,从而提高项目的整体开发效率和质量,为用户提供更好的体验。
281 63
|
9月前
|
前端开发 安全 JavaScript
2025年,Web3开发学习路线全指南
本文提供了一条针对Dapp应用开发的学习路线,涵盖了Web3领域的重要技术栈,如区块链基础、以太坊技术、Solidity编程、智能合约开发及安全、web3.js和ethers.js库的使用、Truffle框架等。文章首先分析了国内区块链企业的技术需求,随后详细介绍了每个技术点的学习资源和方法,旨在帮助初学者系统地掌握Dapp开发所需的知识和技能。
2025年,Web3开发学习路线全指南
|
10月前
|
开发框架 JavaScript 前端开发
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势。通过明确的类型定义,TypeScript 能够在编码阶段发现潜在错误,提高代码质量;支持组件的清晰定义与复用,增强代码的可维护性;与 React、Vue 等框架结合,提供更佳的开发体验;适用于大型项目,优化代码结构和性能。随着 Web 技术的发展,TypeScript 的应用前景广阔,将继续引领 Web 开发的新趋势。
196 2
|
10月前
|
前端开发 API 开发者
Python Web开发者必看!AJAX、Fetch API实战技巧,让前后端交互如丝般顺滑!
在Web开发中,前后端的高效交互是提升用户体验的关键。本文通过一个基于Flask框架的博客系统实战案例,详细介绍了如何使用AJAX和Fetch API实现不刷新页面查看评论的功能。从后端路由设置到前端请求处理,全面展示了这两种技术的应用技巧,帮助Python Web开发者提升项目质量和开发效率。
195 1
|
10月前
|
XML 安全 PHP
PHP与SOAP Web服务开发:基础与进阶教程
本文介绍了PHP与SOAP Web服务的基础和进阶知识,涵盖SOAP的基本概念、PHP中的SoapServer和SoapClient类的使用方法,以及服务端和客户端的开发示例。此外,还探讨了安全性、性能优化等高级主题,帮助开发者掌握更高效的Web服务开发技巧。

热门文章

最新文章