快速入门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)]

目录
相关文章
|
2天前
|
程序员 PHP 数据库
深入理解PHP 7的新特性及其对现代Web开发的影响
【6月更文挑战第26天】随着互联网技术的飞速发展,PHP作为服务端脚本语言的佼佼者,其最新版本PHP 7带来了性能和功能上的显著提升。本文将深度剖析PHP 7中的新特性,并探讨这些变化如何优化现代Web开发实践,提升应用性能及开发效率。我们将从语言本身的变化到实际应用案例,全面解读PHP 7给开发者带来的福音。
4 1
|
2天前
|
SQL XML Java
快速入门Web开发(中)后端开发(有重点)(3)
快速入门Web开发(中)后端开发(有重点)(3)
9 1
|
2天前
|
前端开发 JavaScript Java
快速入门Web开发(中)后端开发(有重点)(2)
快速入门Web开发(中)后端开发(有重点)(2)
9 0
快速入门Web开发(中)后端开发(有重点)(2)
|
2天前
|
网络协议 开发者 Python
|
2天前
|
SQL JSON 前端开发
快速入门Web开发(下)(1)
快速入门Web开发(下)(1)
8 0
|
5天前
|
前端开发 JavaScript API
探索现代Web开发中的动态数据交互——前端与后端整合实战
本文探讨了现代Web开发中前端与后端整合的关键技术点,通过实际案例演示了如何利用JavaScript和Node.js实现动态数据交互,全面解析从数据请求到响应的全过程。
|
5天前
|
自然语言处理 前端开发 Java
Servlet与JSP:Java Web开发的基石技术详解
【6月更文挑战第23天】Java Web的Servlet与JSP是动态网页的核心。Servlet是服务器端的Java应用,处理HTTP请求并响应;JSP则是结合HTML与Java代码的页面,用于动态内容生成。Servlet通过生命周期方法如`init()`、`service()`和`destroy()`工作,而JSP在执行时编译成Servlet。两者在MVC架构中分工,Servlet处理逻辑,JSP展示数据。尽管有Spring MVC等框架,Servlet和JSP仍是理解Web开发基础的关键。
|
2天前
|
JavaScript 程序员 应用服务中间件
快速入门Web开发(上) 黑马程序员JavaWeb开发教程(2)
快速入门Web开发(上) 黑马程序员JavaWeb开发教程(2)
17 7
|
2天前
|
JSON 前端开发 Java
一文读Web开发 之接口后端接口、类与前端请求、拦截器编写
一文读Web开发 之接口后端接口、类与前端请求、拦截器编写
18 6
|
5天前
|
安全 编译器 PHP
探索PHP 8的新特性及其对现代Web开发的影响
【6月更文挑战第22天】随着PHP 8的发布,这一广泛使用的服务器端脚本语言迎来了重大升级。本文将深入探讨PHP 8引入的关键新特性,包括JIT编译器、联合类型、命名参数、匹配表达式以及错误处理和异常改进等。这些新特性不仅提升了性能,还增强了类型系统和语言的表达能力,为现代Web开发带来了新的机遇和挑战。我们将分析这些变化如何影响编码实践,优化策略,并讨论开发者如何适应这些变革以构建更快、更安全、更易于维护的应用程序。